Verlinkung HTML zu PHP

Lass dir mal per mysql_error() ausgeben, was die letzte Fehlermeldung war.

Ansonsten:
  • Bitte Code-Tags verwenden, z. B.: [code=php]Code[/code]
  • Entschuldige, wenn ich das so sage, aber dein Code vereint gleich 4 der schlimmsten Fehler, die man nur machen kann:
    1. Die alte MySQL-Erweiterung nutzen. Lösung: MySQLi (mit Prepared Statements), PDO
    2. Eingaben von außerhalb (bei dir $_POST) ohne Escapen ("Maskierung") in SQL einfügen. SQL Injection Angriffe sind somit sehr leicht möglich! Lösung: Siehe Punkt 1.
    3. MD5 zum Passworthashen benutzen. bcrypt. Reichlich Informationen hier: http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords
    4. CSRF-Attacken sind möglich. Mehr Informationen dazu hier: https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
    Und das sind nur die sicherheitsrelevanten Fehler! Ich würde dir empfehlen, den Code komplett neuzuschreiben, nachdem du dich über die oben genannten Themen informiert hast.
 
Hast du meinen Beitrag, im Speziellen seinen ersten Satz, vollständig gelesen?

Naja, ich finde, man sollte solche Probleme immer gleich ansprechen und solchen Code nicht stillschweigend dahinvegetieren lassen :) Es ist natürlich auch in deinem Sinne, damit du später nicht deinen Nutzern beibringen musst, wieso alle Passwörter im Klartext an irgendwelche Eindringle gelangten.
 
Guten Morgen :)
Ich habe nun den Quellcode zu:
PHP:
 <?php
 error_reporting(E_ALL);
 /*Verbindung zur Datenbank*/
$verbindung = mysql_connect("localhost", "root" , "")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");

mysql_select_db("mae") or die ("Datenbank konnte nicht ausgewählt werden");
echo mysql_errno($verbindung) . ": " . mysql_error($verbindung). "\n";

/*Übergeben der Variablen*/
$username = $_POST["username"];
$passwort = $_POST["passwort"];
$passwort2 = $_POST["passwort2"];
$Vorname = $_POST["Vorname"];
$Nachname = $_POST["Nachname"];
$Ort = $_POST["Ort"];
$Email = $_POST["Email"];


/*Überprüfen ob Passwort und Benutzername eingegeben wurden, Überprüfen ob Passwörter übereinstimmen, */
if($passwort != $passwort2 OR $username == "" OR $passwort == "" )
  {
  echo "Eingabefehler. Bitte alle Felder korekt ausfüllen. <a href=\"neureg.html\">Zurück</a>";
  exit;
  }

$passwort = md5($passwort);

$result = mysql_query("SELECT id FROM accounts WHERE username LIKE '$username'");
$menge = mysql_num_rows($result);
echo mysql_errno($verbindung) . ": " . mysql_error($verbindung) . "\n";
.....

geändert und bekomme wieder das gleiche angezeigt. Hab ich was falsch gemacht?
 
Naja, die (Sicherheit-)Tipps von @ComFreek bezogen sich ja auch nicht auf das eigentliche Problem.
Ja schon nur ist diese im Aufbau befindende Website nicht dafür gedacht jemals wirklich online zu gehen. Ist ein Uni-Projekt. Daher werd ich das jetzt erstmal so lassen.
Dennoch müssen die Daten in die Datenbank und ich möchte gern auf mein Profil, wo ich die Daten sehen kann. :)
 
Das habe ich in den Zeilen 10 und 33 versucht. Nur wird mir nichts angezeigt. Oder muss das anders geschrieben werden? Auf der Seite stand das so.....
Es wird nach wie vor das hier angezeigt:
SQL:
INSERT INTO accounts (username, passwort, Vorname, Nachname, Email, Ort) VALUES ('cx', '0bdff8095c8bf1b38775bf35547a1317', 'cx', 'cx', 'cx@','cx')
 
Zuletzt bearbeitet von einem Moderator:
Nicht wirklich hilfreich, aber:
Dein Passwort ist cx.
Warum ich das weiß? Weil MD5 wirklich wirklich unsicher ist.
Hat ca 0.1 Sekunden gedauert.

Mehr hilfreiches: Lass dir einmal den HTML-Quelltext vom Browser anzeigen.
 
Ein Syntaxfehler ist es sicher nicht, da dies bei SQL Fiddle funktioniert: http://www.sqlfiddle.com/#!2/a1018/1

Und bitte benutze Codetags, wie @spicelab schon oben in seinem Beitrag erwähnte. Ich habe es in deinem letzten Beitrag jetzt korrigiert. So sind Syntaxfehler auch leichter erkennbar.

Führe mal das Query direkt bei der Datenbank aus (in der MySQL Konsole oder bspw. in PHPMyAdmin). Ich bezweifle zwar sehr stark, dass root nicht die genügenden Rechte zum Einfügen von Daten hat, aber man weiß ja nie.

Außerdem: wieso benutzt du eine LIKE-Klausel, wenn du einen direkten Vergleich (=, <>) willst? Bei deinem Code könnte der Nutzer auch Prozentzeichen nutzen, die dann wirklich interpretiert werden (siehe MySQL-Handbuch). Das Ausführen von Nutzerdaten sollte man immer verhindern, sie sollten immer "roh" / als reine Daten an sich interpretiert werden.
 
Zurück