Lesen in Datenbank mit mysqli

Du hast jetzt etwas gemacht und etwas geht aber nicht alles. Jetzt soll ich dir sagen, was du falsch gemacht hast ohne zu wissen was du gemacht hast,
Naja, so schwer kanns nicht sein. Der Fehler ist auf Zeile 51, 13tes Zeichen.
 
Code nicht rein gepackt.. ^^

PHP:
<?php
    //Daten
    $username = $_POST["username"];
    $mail = $_POST["mail"];
    $pw1 = $_POST["pw1"];
    $pw2 = $_POST["pw2"];
   
    //Formular prüfen
    if($username == "" OR $mail == "" OR $pw1 == "" OR $pw2 == "") {
        echo "Bitte f&uuml;llen Sie das Formular vollst&auml;ndig aus.";
        exit();
    } elseif($pw1 != $pw2) {
        echo "Die eingegebenen Passw&ouml;rter stimmen nicht &uuml;berein.";
        exit();
    } elseif($pw1 == $username OR $pw1 == $mail) {
        echo "Das Passwort darf weder mit dem Usernamen noch der Email-Adresse &uuml;bereinstimmen.";
        exit();
    } elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
        echo "Die eingegebene Email-Adresse ist nicht korrekt.";
        exit();
    }
   
    //Passwort verschlüsseln
    $pw = md5($pw1);
   
    //Zeitstempel
    $reg_time = time();
   
    $res = "SELECT * FROM user WHERE mail = '$mail' or username = '$username'";
    $zahl = mysqli_num_rows($con, $res);
   
    if($zahl == 0) {
        $sql = "INSERT INTO user (username, mail, passwort, reg_time) VALUES ('$username', '$mail', '$pw', '$reg_time')";
        $eintragen = mysqli_query($con, $sql);
    } else {
        echo "Es gibt bereits einen User mit diesem Usernamen und/oder dieser Email-Adresse.";
        exit();
    }
   
    {
        printf("%d Eingetragene Datens&auml;tze\n", $con->affected_rows);
    }
?>

Ich habe einfach die Vergleichswerte in ' gepackt.
 
Ich bin dabei, eine Webseite zu programmieren auf der man sich registrieren kann. Das Eintragen in die DB klappt auch super. Allerdings funktioniert es noch nicht richtig: Ich kann ein und denselben Datensatz so oft ich will in dieselbe DB-Tabelle eintragen. Und das soll bzw darf so nicht sein. Es muss vorher überprüft werden ob bereits ein User mit dieser Email-Adresse bzw diesem Usernamen schon vorhanden ist.

Der gesamt Code:

PHP:
<?php
    //Daten
    $username = $_POST["username"];
    $mail = $_POST["mail"];
    $pw1 = $_POST["pw1"];
    $pw2 = $_POST["pw2"];
   
    //Formular prüfen
    if($username == "" OR $mail == "" OR $pw1 == "" OR $pw2 == "") {
        echo "Bitte f&uuml;llen Sie das Formular vollst&auml;ndig aus.";
        exit();
    } elseif($pw1 != $pw2) {
        echo "Die eingegebenen Passw&ouml;rter stimmen nicht &uuml;berein.";
        exit();
    } elseif($pw1 == $username OR $pw1 == $mail) {
        echo "Das Passwort darf weder mit dem Usernamen noch der Email-Adresse &uuml;bereinstimmen.";
        exit();
    } elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
        echo "Die eingegebene Email-Adresse ist nicht korrekt.";
        exit();
    }
   
    //Passwort verschlüsseln
    $pw = md5($pw1);
   
    //Zeitstempel
    $reg_time = time();
   
    $res = "SELECT * FROM user WHERE mail = '$mail' or username = '$username'";
    $zahl = mysqli_num_rows($con, $res);
   
    if($zahl == 0) {
        $sql = "INSERT INTO user (username, mail, passwort, reg_time) VALUES ('$username', '$mail', '$pw', '$reg_time')";
        $eintragen = mysqli_query($con, $sql);
    } else {
        echo "Es gibt bereits einen User mit diesem Usernamen und/oder dieser Email-Adresse.";
        exit();
    }
   
    {
        printf("%d Eingetragene Datens&auml;tze\n", $con->affected_rows);
    }
?>

wichtiger Code-Abschnitt:

PHP:
...
    $res = "SELECT * FROM user WHERE mail = '$mail' or username = '$username'";
    $zahl = mysqli_num_rows($con, $res);
   
    if($zahl == 0) {
        $sql = "INSERT INTO user (username, mail, passwort, reg_time) VALUES ('$username', '$mail', '$pw', '$reg_time')";
        $eintragen = mysqli_query($con, $sql);
    } else {
        echo "Es gibt bereits einen User mit diesem Usernamen und/oder dieser Email-Adresse.";
        exit();
    }
   
    {
        printf("%d Eingetragene Datens&auml;tze\n", $con->affected_rows);
    }
?>

Wo ist mein Fehler? Ich kann ihn einfach nicht finden.. -.-
 
Ich habe die Themen mal zusammengeführt. Ist ja dieselbe Frage

Ein Blick in die php-hilfe: http://www.php.net/mysqli_num_rows
mysqli_num_rows kannst du nicht so ausführen.
Zuerst ein Query und dann der num_rows
PHP:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

if ($result = mysqli_query($link, "SELECT Code, Name FROM Country ORDER BY Name")) {

    /* determine number of rows result set */
    $row_cnt = mysqli_num_rows($result);
}


Und brav dran denken, dass du mit deinem Code, da du keine Prepared Statement verwendest, Hacker eine riesengrosse Türe ohne Schloss hingestellt hast. SQL Injektion nennt sich das Problem.
 
edit: Zu spät :D

Hi

Und weil wir grad bei Sicherheit sind: MD5 muss weg (und das ist übrigens auch keine Verschlüsselung, nie gewesen).
"Sicher" ist heutzutagte was Anderes.

Verwende BCrypt oder PBKDF2 (für beide gibts PHP-Funktionen), und dazu auch einen "Salt" (lange zufällige Daten (zufällig = Nicht ausgedacht, sondern technisch mit zB. /dev/random erzeugt), idealerweise einen eigenen pro User, auch in der DB gespeichert)

Sonst... grob geschätzt:
angenommen, deine DB hat 1000 Passwörter, die sich Menschen ausgedacht haben. Alle sind max. 32 Zeichen lang (das ist relativ lang, die meisten Benutzer nehmen viel kürzere Passwörter) und verwenden nur Buchstaben.
Mit einem 20K€-Computer (zwar nicht billig, aber auch für Privatpersonen zusammensparbar) sind alle 1000 Passwörter in einer Stunde geknackt. Obwohl sie sehr lang sind, und auch wenn keins davon irgendein "bekanntes" Wort (Wörterbuch, übliche Passwörter usw.) ist.
 

Neue Beiträge

Zurück