Problem mit meiner PHP-Homepage

L

LastChaosTyp

Guest
Guten Abend PCGHler,

Ich wollte mir eine kleine Website schreiben, über die Benutzer nachher Dateien von meinem RasperryPi aus dem Browser herunterladen können. Dies soll aber erstmal nur für mich zum Testen dienen.
Jetzt habe ich mir ein paar PHP-Seiten geschrieben:

1.) index.php => Sind nur 2 Links fürs Registrieren und für den Login drauf
Code:
<?php echo '<!DOCTYPE html>'; ?>
<html>
    <head>
        <title>Startseite - LastChaosTyp</title>
        <meta charset='UTF-8' />
    </head>
    <body> 
        <?php 
            echo '<h2>Herzlich Willkommen auf meiner Homepage :)</h2>';
            echo '<a href="register.php">Registrieren</a>';
            echo '<p style="text-indent: 5em;"></p>';
            echo '<a href="login.php">Login</a>';
        ?>
    </body>
</html>


2.) register.php => Dient zur Registrierung eines Benutzers
Code:
<?php echo '<!DOCTYPE html>'; ?>
<html>
    <head>
        <title>Registrierung - LastChaosTyp</title>
        <meta charset='UTF-8' />
    </head>
    <body> 
        <h2>Registrierung</h2>
        <a href="index.php">Startseite</a>
        <form action="auswertung.php" method="post">
        <table width="50%" border="0px" cellspacing="5px" cellpadding="5px">
            <tr><td>Benutzername:*</td><td><input type="text" name="username" size="45"></td></tr><br>
            <tr><td>Passwort:*</td><td><input type="text" name="password" size="45"></td></tr><br>
            <tr><td>Passwort wiederholen:*</td><td><input type="text" name="passwordRep" size="45"></td></tr><br>
            <tr><td>Anrede*: </td><td><select name="anrede">
            <option>Herr</option>
            <option>Frau</option></td></tr>
            </select><br>
            <tr><td>Vorname*: </td><td><input type="text" name="vorname" size="45"></td></tr><br>
            <tr><td>Nachname*: </td><td><input type="text" name="nachname" size="45"></td></tr><br>
            <tr><td>Geburtsdatum: </td><td><input type="text" name="datum" size="45"></td></tr><br>
            <tr><td>E-Mail*: </td><td><input type="text" name="mail" size="45"></td></tr><br>
            <tr><td>Bemerkungen: </td><td><textarea name="bemerkungen" rows="6" cols="45"></textarea></td></tr>
            <tr><td> </td><td><input type="submit" value="Weiter"><input type="reset" value="Reset" name="reset"/></td></tr>
        </table>
        </form>
    </body>
</html>


3.) auswertung.php => Ist die PHP-Datei für die Registrierung, die die Daten verarbeitet und in die MySQL Tabelle einträgt/eintragen sollte
Code:
<?php echo '<!DOCTYPE html>'; ?>
<html>
    <head>
        <title>Registrierung - LastChaosTyp</title>
        <meta charset='UTF-8' />
    </head>
    <body>   
        <h2>Regestrierung abschließen</h2>
        <?php
            
            $verbindung = mysql_connect("192.168.2.106", "root" , "PASSWORT HABE ICH HIER MAL RAUSGENOMMEN ;)") 
            or die("Verbindung zur Datenbank konnte nicht hergestellt werden!"); 
            mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden!");
            
            
            $username = addslashes(hmtlspecialchars(.$_POST['username']));
            $password = addslashes(hmtlspecialchars(.$_POST['password']));
            $passwordRep = addslashes(hmtlspecialchars(.$_POST['passwordRep']));
            $anrede = addslashes(hmtlspecialchars(.$_POST['anrede']));
            $vorname = addslashes(hmtlspecialchars(.$_POST['vorname']));
            $nachname = addslashes(hmtlspecialchars(.$_POST['nachname']));
            $datum = addslashes(hmtlspecialchars(.$_POST['datum']));
            $mail = addslashes(hmtlspecialchars(.$_POST['mail']));
            $bemerkungen = addslashes(hmtlspecialchars(.$_POST['bemerkungen']));
            
            $passwordHash = md5($password);
            
            if((vorname == "") OR (nachname == "") OR (mail == "") OR (password == "") OR (password != passwordRep) OR (username == "")) { 
                echo '<h2>Es ist ein Fehler aufgetreten! Bitte registrieren sie sich erneut. <a href=\"register.php\">Zurück</a></h2>';
                exit;
            } else {
                $result = mysql_query("SELECT id FROM benutzer WHERE username LIKE '$username'"); 
                $menge = mysql_num_rows($result); 
                if($menge == 0) 
                    { 
                    $eintrag = "INSERT INTO benutzer (username, passwort, anrede, vorname, nachname, geburtsdatum, mail, bemerkungen) VALUES ('$username', '$passwordHash', '$anrede', '$vorname', '$nachname', '$datum', '$mail', '$bemerkungen')"; 
                    $eintragen = mysql_query($eintrag);
                    if($eintragen == true) {
                        echo '<u> Ihre Benutzerdaten: </u> <br><br>';
                        echo 'Benutzername: ' .$_POST['username'] .'<br>';
                        echo 'Passwort: ' .$_POST['password'] .'<br>';
                        echo 'Name: ' .$_POST['anrede'] .' ' .$_POST['vorname'] .' ' .$_POST['nachname'] .'<br>';
                        echo 'Geburtsdatum: ' .$_POST['datum'] .'<br>';
                        echo 'E-Mail: ' .$_POST['mail'] .'<br>';
                        echo 'Bemerkungen: ' .$_POST['bemerkungen'];
                    } else {
                        echo '<h2>Es ist ein Fehler aufgetreten! Bitte registrieren sie sich erneut. <a href=\"register.php\">Zurück</a></h2>';
                    }
                } else { 
                        echo 'Dieser Benutzername ist bereits vorhanden! <a href=\"register.php\">Zurück</a>'; 
                }                          
            }
        ?>        
    </body>
</html>


Soweit bin ich im Moment, Login hab ich noch nicht angefangen, da die Registrierung erstmal klappen sollte :D Mein Problem ist jetzt, dass ich auf auswertung.php nichts angezeigt bekomme :/ Weder die <h2> Überschrift noch sonst irgendwas. Wo ist der Fehler? Ebenfalls werden keine Daten in der MySQL Tabelle eingetragen!

Wenn ihr die Seite mal selber ausprobieren wollt:
www.lastchaostyp.noip.me


Vielen Dank und schönen Abend noch
Henri
 
Jo, ich benutze Apache2, aber wo liegen denn die Logs? Bin neu in Linux ;)
 
Während du entwickelst, lohnt es sich in der php.ini zwei Variablen zu ändern, die du für ein Produktivsystem aber wieder abschalten solltest.

Editiere mal als root die /etc/php/cgi/php.ini die Werte von error_reporting und display_errors zu :
Code:
error_reporting = E_ALL
[...]
display_errors = On

Dann spuckt er dir eine ganze Menge Kram raus und bemängelt unsauberen Code (Notices sind an sich nichts schlimmes, aber ich nutze sie gerne, weil man damit sauberen Code schreibt). Wenn's dich stört, benutz anstatt E_ALL einfach E_ALL & ~E_NOTICE.

Es ist übrigens nicht gerade die beste Idee, sämtlichen Input erst einmal mit irgendwelchen Filtern zu bearbeiten.
Code:
$username = addslashes(hmtlspecialchars(.$_POST['username']));
Ich sehe, was du versuchst zu machen, aber aber das macht noch keinen Sinn an der Stelle, weil die beiden Funktionen eher auf die Ausgabe ausgerichtet sind. Du möchtest schließlich erst mit den rohen Eingabedaten arbeiten und nicht irgendwelche Sonderzeichen in der Datenbank stehen haben.
Wenn du Dinge in die Datenbank schreiben möchtest, escape sie mit mysql_real_escape_string($str). Für die Ausgabe kannst du das dann so machen.

Übrigens versteckt sich in den Zeilen auch gleich der Fehler:
hmtlspecialchars <- Es muss htmlspecialchars heißen.
 
Wo ist der Fehler? Ebenfalls werden keine Daten in der MySQL Tabelle eingetragen!
Auf den ersten Blick kommt mir das hier komisch vor:
Code:
$verbindung = mysql_connect("192.168.2.106", "root" , "PASSWORT HABE ICH HIER MAL RAUSGENOMMEN ;)") 
            or die("Verbindung zur Datenbank konnte nicht hergestellt werden!"); 
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden!");
Wenn ich mich nicht täusche, müsstest Du der Funktion mysql_select_db() (siehe "Beispiele") neben der DB auch noch die Verbindung als Parameter geben.
Code:
mysql_select_db("user", $verbindung)
Würdest Du mysqli benutzen, könntest Du das alternativ auch in einer Zeile lösen:
Code:
$db = mysqli_connect("192.168.2.106", "root", "<Passwort>", "user");
 
Bin noch in der Schule im Moment, werde das dann nachher mal alles durchgehen :) Danke schonmal für die Hilfe. Aber warum bekomme ich bei der Auswertung.php Gar nichts angezeigt? Mir sollte doch wenigstens die erste <h2> Überschrift angezeigt werden, oder etwa nicht?
 
Ich habe jetzt einfach mal Deinen ganzen auswerten.php Code in ein File mit eben diesem Namen gesteckt, das in meiner xampp Installation in den htdocs Ordner eingefügt und im Browser mit 127.0.0.1/auswerten.php aufgerufen. Dabei habe ich erstmal nur einen Syntax-Error in Zeile 16 angezeigt bekommen. Das ist genau da, wo bei Dir das ganze addslashes-Zeug anfängt. Also habe ich dann diesen Block (Zeile 16 bis 24) auskommentiert und danach folgendes angezeigt bekommen:
Capture.JPG

^^ Das dürfte jetzt der Fehler sein, auf den ich in meinem vorigen Posting hingewiesen habe. Wie Du siehst, wird damit allerdings zumindest Deine Überschrift angezeigt ...

Also korrigiere mal bitte Deine Verbindung zur DB und überlege Dir was schlaueres anstatt dem addslashes-Zeugs. Wenn's dann noch nicht geht, kann man weiterschauen.

[EDIT]
Der Syntaxfehler ist wohl das von Penman entdeckte "hmtl...". Dennoch: Lass das addslashes() erstmal.
 
Zuletzt bearbeitet:
Auf den ersten Blick kommt mir das hier komisch vor:
Code:
$verbindung = mysql_connect("192.168.2.106", "root" , "PASSWORT HABE ICH HIER MAL RAUSGENOMMEN ;)") 
            or die("Verbindung zur Datenbank konnte nicht hergestellt werden!"); 
mysql_select_db("user") or die ("Datenbank konnte nicht ausgewählt werden!");
Wenn ich mich nicht täusche, müsstest Du der Funktion mysql_select_db() (siehe "Beispiele") neben der DB auch noch die Verbindung als Parameter geben.
Das Übergeben einer Verbindungskennung ist nicht nötig, da nur eine Verbindung geöffnet ist.
Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen.
Man sollte sich eventuell wirklich mal den netten Warnhinweis auf der Manual-Seite geben und gleich auf MySQLi oder PDO Basis programmieren. Nicht, dass die Entwickler noch auf die Idee kommen, bald die MySQL-Funktionen zu entfernen.

Warum du nur eine weiße Seite bekommst, könnte daran liegen, dass PHP die Auslieferung abbricht, wenn es auf einen Fehler läuft, was es unweigerlich tut. Das könnte den gebufferten Inhalt betreffen. Da bin ich mir gerade nicht sicher.
Wichtig ist jedenfalls, dass du die Fehler beseitigst und dir die Fehler entweder direkt im Browser anzeigen lässt oder du den Errorlog verfolgst. (tail -f /var/log/apache2/error.log)
 
^^ Ich hatte meine auf die Schnelle erstellte Test-DB nicht "user" genannt, deswegen bei mir keine DB-Verbindung ... XD
Der Parameter ist wohl wirklich optional.
-----------

Statt dem addslashes(), wie bereits von Penman erwähnt, besser (in allen 9 Zeilen):
Code:
$username = mysql_real_escape_string($_POST['username']);
Hier die $-Zeichen als Variablenkennzeichnung nicht vergessen:
Code:
if(($vorname == "") OR ($nachname == "") OR ($mail == "") OR ($password == "") OR ($password != $passwordRep) OR ($username == "")) {
Und Deine Überprüfung auf Vorhandensein habe ich so umbasteln müssen:
Code:
$check = mysql_query("SELECT * FROM benutzer WHERE username='".$vorname."';");
if (!mysql_num_rows($check))
Damit funktioniert's bei mir ...

Capture.JPG

Wenn Du allerdings eine id in Deiner DB hast, könnte es auch damit funktionieren (statt meiner Variante mit Sternchen für alle Felder).
 
Zuletzt bearbeitet:
Code:
$username = mysql_real_escape_string($_POST['username']);
Nicht den Input direkt escapen! Das sorgt für verwunderswerte Dinge, wenn z.B. ein User "Bar's Foo" heißt, dann wird er innerhalb des Systems "Bar\'s Foo". Das ist ein Zeichen mehr und das mittendrin. Das ist unschön. Bei Passwörtern ist es noch schöner: Ein anderes System würde nicht auf denselben Passworthash kommen, da das Escapen ein Zeichen eingefügt hat, das eigentlich nicht da sein sollte. mysql_real_escape_string deshalb nur verwenden, wenn etwas in einen SQL-Query eingesetzt werden soll.

Hier die $-Zeichen als Variablenkennzeichnung nicht vergessen:
Code:
if(($vorname == "") OR ($nachname == "") OR ($mail == "") OR ($password == "") OR ($password != $passwordRep) OR ($username == "")) {
Eine einfache, nicht sonderliche schöne Art. Mehr als True oder False kann sie nicht zurückgeben. Das freut jeden User, wenn er liest "Ein Fehler ist aufgetreten". :)
Fehler direkt in ein Array speichern, ein Fehlercode o.Ä. würde solchen Frust vermeiden. Für den Anfang aber "erlaubt" (genauso == "" :) )

Und Deine Überprüfung auf Vorhandensein habe ich so umbasteln müssen:
Code:
$check = mysql_query("SELECT * FROM benutzer WHERE username='".$username."';");
if (!mysql_num_rows($check))
Damit funktioniert's bei mir ...
Wenn Du allerdings eine id in Deiner DB hast, könnte es auch damit funktionieren (statt meiner Variante mit Sternchen für alle Felder).
Richtig. Anstatt den MySQL-Server alle Felder (*) übertragen zu lassen einfach den Primary Key oder eine nützliche Information anfragen. "WHERE x LIKE y" verwendet man nicht bei exakten Gleichheitsprüfungen. Sofern du also nicht vorhast mit Jokerzeichen zu arbeiten, solltest du "WHERE x = y" verwenden, weil der MySQL-Server dann den Index benutzen kann.
 
Eine einfache, nicht sonderliche schöne Art. Mehr als True oder False kann sie nicht zurückgeben. Das freut jeden User, wenn er liest "Ein Fehler ist aufgetreten". :)
Fehler direkt in ein Array speichern, ein Fehlercode o.Ä. würde solchen Frust vermeiden. Für den Anfang aber "erlaubt" (genauso == "" :) )
Die Zeile war nicht als meine Idee oder gar Empfehlung gedacht. Ich würde noch viel eher folgendes machen (und die Variablenzuweisung in einem else statt dem Block oben in seinem Code):
Code:
if (!isset($_POST['username'] or ...)
Bei der Variante des TEs weist er sofort alles zu und überprüft erst danach, ob ihm die Daten überhaupt passen und er sie verwerten will.

Aber ich wollte erst einmal abwarten, ob der TE sein Projekt mit kleinen Änderungen am bestehenden Code zum Laufen kriegt. Eine sinnvolle Fehlermeldung müsste man jedenfalls auch bei dieser Variante hier ergänzen.

[EDIT @ TE]
MD5 ist anno 2015 so "gut" als wenn Du gar keinen Schutz verwenden würdest. Mach lieber:
Code:
$salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
$passwordHash = hash('sha512', ($_POST['password']).$salt);
;)
 
Zuletzt bearbeitet:
Habe den Code mal überarbeitet, jetzt bekomm ich auch was angezeigt, aber immernoch nicht mein Ergebnis :/
Ich habe das mit den Fehlermeldungen noch nicht ganz verstanden: Wie mache ich die an? Muss ich die ";" in der Config vor den entsprechenden Zeilen entfernen? Kenn mich mit Linux, wie bereits gesagt, kaum aus :D
So sieht die /etc/php5/cli/php.ini jetzt aus:
Settings.png

Und das ist mein überarbeiteter Code:
Code:
<?php echo '<!DOCTYPE html>'; ?>
<html>
    <head>
        <title>Registrierung - LastChaosTyp</title>
        <meta charset='UTF-8' />
    </head>
    <body>   
        <h2>Regestrierung abschließen</h2>
        <?php
            $tabelle = mysqli_connect("192.168.2.106", "root", "MEIN PASSWORT", "user");
            
            $username = $_POST['username'];
            $password = $_POST['password'];
            $passwordRep = $_POST['passwordRep'];
            $anrede = $_POST['anrede'];
            $vorname = $_POST['vorname'];
            $nachname = $_POST['nachname'];
            $datum = $_POST['datum'];
            $mail = $_POST['mail'];
            $bemerkungen = $_POST['bemerkungen'];
            
            $passwordHash = md5($password);
            
            $usernameDB = mysql_real_escape_string($username);
            $anredeDB = mysql_real_escape_string($anrede);
            $vornameDB = mysql_real_escape_string($vorname);
            $nachnameDB = mysql_real_escape_string($nachname);
            $datumDB = mysql_real_escape_string($datum);
            $mailDB = mysql_real_escape_string($mail);
            $bemerkungenDB = mysql_real_escape_string($bemerkungen);
 
            if(($vorname == "") OR ($nachname == "") OR ($mail == "") OR ($password == "") OR ($password != $passwordRep) OR ($username == "") OR ($username != $usernameDB)) { 
                echo '<h2>Ihre Eingaben sind nicht korrekt! Bitte registrieren sie sich erneut. <a href=\"register.php\">Zurück</a></h2>';
                exit;
            } else {
                $result = mysql_query("SELECT id FROM benutzer WHERE username LIKE '$username'"); 
                $menge = mysql_num_rows($result); 
                if($menge == 0) 
                    {                               
                    $eintrag = "INSERT INTO benutzer (username, passwort, anrede, vorname, nachname, geburtsdatum, mail, bemerkungen) VALUES ('$usernameDB', '$passwordHash', '$anredeDB', '$vornameDB', '$nachnameDB', '$datumDB', '$mailDB', '$bemerkungenDB')"; 
                    $eintragen = mysql_query($eintrag);
                    if($eintragen == true) {
                        echo '<u> Ihre Benutzerdaten: </u> <br><br>';
                        echo 'Benutzername: ' .$_POST['username'] .'<br>';
                        echo 'Passwort: ' .$_POST['password'] .'<br>';
                        echo 'Name: ' .$_POST['anrede'] .' ' .$_POST['vorname'] .' ' .$_POST['nachname'] .'<br>';
                        echo 'Geburtsdatum: ' .$_POST['datum'] .'<br>';
                        echo 'E-Mail: ' .$_POST['mail'] .'<br>';
                        echo 'Bemerkungen: ' .$_POST['bemerkungen'];
                    } else {
                        echo '<h2>Es ist ein Fehler aufgetreten! Bitte registrieren sie sich erneut. <a href=\"register.php\">Zurück</a></h2>';
                    }
                } else { 
                        echo 'Dieser Benutzername ist bereits vorhanden! <a href=\"register.php\">Zurück</a>'; 
                }                          
            }
        ?>        
    </body>
</html>

Ich wieß jetzt auch noch nicht, wie ich das genau mit dem Passwort machen soll. Aber eine SQL-Injektion sollte doch durch den md5-Hash verhindert werden, oder? Dann muss ich das doch nicht vorher per mysql_real_escape_string() umwandeln, oder?

Danke nochmal für die Hilfe :)
 
Also ich, für meinen Teil, hätte mir das eher so in die Richtung vorgestellt:
PHP:
<!DOCTYPE html>
<html>
    <head>
        <title>Registrierung - LastChaosTyp</title>
    </head>
    <body>   
        <h2>Registrierung abschließen</h2>
        <?php     
            error_reporting(E_ALL);
            
            define('MYSQL_HOST', '127.0.0.1');
            define('MYSQL_USER', 'root');
            define('MYSQL_PASS', '');
            define('DATABASE', 'user');
            
            $salt = "#sf$!\"ä\"\$asd³s²a~§653 sa51d75qÖAa@üeX";
            
            $db = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, DATABASE);
            if ($db->connect_errno) {
                echo "Verbindung zur Datenbank konnte nicht hergestellt werden: (" . $db->connect_errno . ") " . $db->connect_error;
            }
            
            if (isset($_POST['vorname'], $_POST['nachname'], $_POST['mail'], $_POST['password'], $_POST['passwordRep'], $_POST['username']) and trim($_POST['vorname']) != "" and trim($_POST['nachname']) != "" and trim($_POST['mail']) != "" and trim($_POST['password']) != "" and trim($_POST['passwordRep']) != "" and trim($_POST['username']) != "") {  
                $username = ($_POST['username']);        
                $password = ($_POST['password']);
                $passwordRep = ($_POST['passwordRep']);
                $anrede = ($_POST['anrede']);
                $vorname = ($_POST['vorname']);
                $nachname = ($_POST['nachname']);
                $datum = ($_POST['datum']);
                $mail = ($_POST['mail']);
                $bemerkungen = ($_POST['bemerkungen']);
                if ($password != $passwordRep) {
                    echo '<h2>Die Bestätigung des Passworts stimmt nicht.<a href="register.php">Zurück</a></h2>';
                } else {
                    $passwordHash = hash('sha512', ($password).$salt);
                    $check = mysqli_query($db, "SELECT username FROM user WHERE username='".$username."';");
                    if (mysqli_num_rows($check))  {
                        echo '<h2>Benutzername schon vorhanden.<a href="register.php">Zurück</a></h2>';
                    } else {
                        $entry = mysqli_query($db, "INSERT INTO user (username, password, anrede, vorname, nachname, datum, mail, bemerkung) VALUES ('$username', '$passwordHash', '$anrede', '$vorname', '$nachname', '$datum', '$mail', '$bemerkungen')");
                        if ($entry) {
                            echo '<u> Ihre Benutzerdaten: </u> <br><br>';
                            echo 'Benutzername: ' .$_POST['username'] .'<br>';
                            echo 'Passwort: ' .$_POST['password'] .'<br>';
                            echo 'Name: ' .$_POST['anrede'] .' ' .$_POST['vorname'] .' ' .$_POST['nachname'] .'<br>';
                            echo 'Geburtsdatum: ' .$_POST['datum'] .'<br>';
                            echo 'E-Mail: ' .$_POST['mail'] .'<br>';
                            echo 'Bemerkungen: ' .$_POST['bemerkungen'];
                        } else {
                            echo '<h2>Es ist ein Fehler aufgetreten! Bitte registrieren Sie sich erneut. <a href="register.php">Zurück</a></h2>';
                        }
                    }  
                }
            } else {    
                echo '<h2>Eingabefehler. Bitte alle Felder korrekt ausfüllen.<a href="register.php">Zurück</a></h2>';
            }
        ?>        
    </body>
</html>
Ich habe dieses mysql_real_escape_string selbst noch nie benutzt, deswegen kann ich Dir dazu nichts sagen. Aber einen Tipp will ich Dir trotzdem geben: Verwende niemals Funktionen, die Du nicht kennst und bei denen Du nicht zu 100 % verstehst, was die genau machen!!! Ansonsten wirst Du früher oder später Fehler kriegen, deren Ursache Du suchen kannst bist Du alt wirst!

Überhaupt sollte Dein Ziel erst einmal sein, einen möglichst einfachen Code, der mal nur die Grundfunktionalität Deines Programmes liefert, fehlerfrei zum Laufen zu kriegen.

Jedenfalls, wenn Du meinen Code, der bei mir einwandfrei funktioniert, ausprobieren willst und der bei Dir aber nicht geht, dann liegt's daran, dass unsere DBs nicht völlig idente Bezeichnungen haben und auch unsere Testumgebungen (IP-Adressen, ...) unterschiedlich sind. Auf gut Deutsch: Du müsstest die Bezeichnungen an Dein Setting anpassen. Eben die IP und das PW in der Verbindung, und event. ein paar Namen, aber das darfst Du selbst checken. ;)

Mit error_reporting war, denke ich, E_ALL in der entsprechenden Funktion gemeint. Das solltest Du dann im "Produktivbetrieb" Deiner Website auf 0 setzen um potenziellen Angreifern keine Fehler und Schwachstellen im Code zu verraten.
 
Zuletzt bearbeitet:
Ah, vielen Dank. Den Code verstehe ich soweit, muss mir halt nochmal die Methoden genau anschauen. Ich hielt meinen Code auch ziemlich einfach, zB. mit $username != "" und so weiter, aber das habt ihr ja ausgebessert :D

Noch ne Frage: Wo kann ich diese Codes für zB. "ß" finden, also "ß"? Was ist das denn für eine Kodierung?


Edit: Habe grade mal meine Website dementsprechend erneuert. Nun habe ich die genaue Fehlermeldung, die mir vorher gefehlt hat:
"Verbindung zur Datenbank konnte nicht hergestellt werden: (2003) Can't connect to MySQL server on '192.168.2.106' (111)"

Woran könnte das liegen? Ich weiß selber, dass so ein Fehler ziemlich viele Ursachen haben kann, aber vielleicht habt ihr ja ein paar Tipps, wo der Fehler liegen könnte. Ich kann von meinem Windows-Rechner wunderbar auf PHPMyAdmin von meinem RasPi zugreifen, also auch auf die Datenbank(en). Port wurde im Router an meinen RasPi weitergeleitet.
 
Zuletzt bearbeitet von einem Moderator:
Zeichenreferenz

Bzgl. des Error: Du bist doch unter Linux unterwegs?! Probiere mal ...
Code:
nano /etc/mysql/my.cnf
#bind-address = 127.0.0.1
service mysql restart
Zeile 2 ist kein command! Du sollst die Zeile im config file durch die Raute auskommentieren. Quelle

^^ Wenn's das nicht ist, weitergoogeln. Ich habe das hier unter Win7 mit xampp laufen. K. A. was man unter Linux alles einstellen muss.
 
Ich bin ein Vollidiot: Ich schreibe die PHP Seiten auf Windows und kopiere sie dann rüber auf meinen RasPi. Natürlich müsste ich von meinem Windowsrechner die lokale IP des Pi eintragen, aber wenn ich die Seite rüberkopiere, dann muss ich ja localhost/127.0.0.1 nehmen :D Werde ich nachher mal prüfen, ob das der Fehler war, muss jetzt zur Schule ;)
 
Kleines Update:
Ich bin wirklich ein Vollidiot :D Ich habe in der DB andere Spaltennamen als in meinem Code verwendet :facepalm: Danke für die Hilfe!

error.png

Aber noch was, was mir grade so aufgefallen ist: Wenn ich meinen SQL-Service neustarte, kommt da auch eine Fehlermeldung. Was hat die zu bedeuten? Ich habe die dazugehörige Config-Datei mal links daneben aufgemacht. Stimmt das so oder muss da auch 127.0.0.1 hin?
 
Zuletzt bearbeitet von einem Moderator:
^^ Im untersten Drittel des Codes haben wir ein if ($entry), dessen Code im Block nur ausgeführt wird, wenn $entry "wahr" ist. Und das ist nur dann der Fall, wenn das INSERT-query darüber korrekt ausgeführt wurde. Andernfalls landet er im else Block, wo eben die Fehlermeldung auf deinem Screenshot ausgegeben wird ...

Ich nehme an, bei Dir werden keine Daten in die DB geschrieben?! Überprüfe das bitte mal. Bei mir hat's allerdings tadellos geklappt. Ich vermute daher, dass immer noch ein paar wenige Bezeichnungen im Code nicht mit Deiner DB übereinstimmen.

Deine DB heißt definitiv 'user', der meiste Rest müsste auch passen. Vielleicht heißt Deine PW-Spalte in der DB 'passwort' und nicht 'password'? Oder hast Du 'bemerkungen' statt 'bemerkung'?
 
Zurück