1. #1
    No Adblocker!

    Mitglied seit
    18.08.2017
    Ort
    8km von Harburg
    Beiträge
    443

    [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Moin,
    hab schon verschiedene Sachen versucht und es geht irgendwie nicht.
    Ich verstehe nicht wieso es nicht funktioniert, es postet "User has been created." aber in "HeidiSQL (localhost)" sehe Ich nichts.

    Code:
    if(empty($_POST['username']) || empty($_POST['email']) || empty($_POST['password'])){
        echo "Signup form isn't filled.";
        exit();
    }else{
        // Set variables
        $username = $_POST['username'];
           $email = $_POST['email'];
        $password = $_POST['password'];
    
    
        // Prepare query
        $stmt = $pdo->prepare("SELECT * FROM users WHERE email = ? OR username = ?");
        $stmt->execute([$email,$username]);
        if($stmt->rowCount() !== 0){
            echo 'Email or username is taken.';
            exit();
        }else{
            // FIX: Doesn't insert anything into the DB.
            $stmt = $pdo->prepare("INSERT INTO users (email,password,username) VALUES (?,?,?)");
            $stmt->execute([$email,$password,$username]);
            echo 'User has been created.';
            exit();
        }
    }
    Im Internet ist jede Person intelligenter als die größten Erfinder die je gelebt haben.

    •   Alt

      Anzeige
      Bitte einloggen, um diese Anzeige auszublenden.
       

  2. #2
    Avatar von ZAM
    No Adblocker!

    Mitglied seit
    17.12.2008
    Ort
    Fürth
    Beiträge
    2.285

    AW: [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Vielleicht ist das ja im Endeffekt aufschlussreicher
    PHP-Code:
    if(empty($_POST['username']) || empty($_POST['email']) || empty($_POST['password'])){
       echo 
    'Signup form isn\'t filled.';
    }else{

       
    // Set variables
       // HIER TROTZDEM BESSER PRÜFEN. Prepared-Statements schützen nicht vor XSS.  
       
    $username $_POST['username'];
       
    $email $_POST['email'];
       
    // Und warum wird hier ein Klartext-Passwort gespeichert? ARGH ^^ Erinnert mich bitte daran, mich nie bei irgendeinem System von BloodSteam zu registrieren. ^^
       
    $password $_POST['password'];

       
    // Prepare query
       
    $stmt $pdo->prepare('SELECT 1 FROM users WHERE email = :email OR username = :username');
       
    $stmt->bindValue(':email'$emailPDO::PARAM_STR);
       
    $stmt->bindValue(':username'$usernamePDO::PARAM_STR);
       if ( 
    $stmt->execute() ) {
          if ( (int)
    $pdo->errorCode() ) {
             echo 
    'Fehler ' print_r($pdo->errorInfo(), true);
          } else {
             if (
    $stmt->rowCount() !== 0) {
                exit(
    'Email or username is taken.');
             } else {
                
    // FIX: Doesn't insert anything into the DB.
                
    $stmtInsert $pdo->prepare('INSERT INTO users (email,password,username) VALUES (:email,:password,:username)');
                
    $stmtInsert->bindValue(':email'$emailPDO::PARAM_STR);
                
    $stmtInsert->bindValue(':password'$passwordPDO::PARAM_STR);
                
    $stmtInsert->bindValue(':username'$usernamePDO::PARAM_STR);
                if ( 
    $stmtInsert->execute() ) {
                   if ( (int)
    $pdo->errorCode() ) {
                      echo 
    'Fehler ' print_r($pdo->errorInfo(), true);
                   } else {
                      echo 
    'User has been created.';
                   }
                }
             }
          }
       }
    }
    exit; 
    Wartungsdrohne
    "Und wenn einer so ein Bug-Loch entdeckt, Granate rein!"
    ASRock X99 Extreme4 | i7-5820K @ 4,2 OC 1.24v | Crucial 4x4 GB DDR4-2400 | 3xSSD,2x2TB HDD | ZOTAC GTX 980 Ti AMP! Edition | ASUS Xonar DGX PCIe | be quiet! Straight Power 10-CM Modular | Fractal R5 Define

  3. #3
    No Adblocker!

    Mitglied seit
    18.08.2017
    Ort
    8km von Harburg
    Beiträge
    443

    AW: [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Zu dem Passwort, Ich glaube wir haben beide ein anderen Verlauf beim Coden. Ich mache es immer so, Schritt -> Testen -> Schritt -> Testen. Schritt (INSERT) -> Testen -> Fixen. Solange es nicht gefixt ist, brauche Ich es nicht zu hashen. Wenn mein Insert funktioniert, dann wird weiter gemacht.

    @edit
    Hab was getestet.
    Dies hier funktioniert nicht
    Code:
    $stmt = $pdo->prepare("INSERT INTO users (email,password,username) VALUES (?,?,?)");
    und
    Code:
    $stmt = $pdo->prepare("INSERT INTO users (email,password,username) VALUES (:email, :password, :username)");
    Das hier geht.
    Code:
    $stmt = $pdo->prepare("INSERT INTO users (email,password,username) VALUES ('abc','123','f121212')");
    Geändert von BloodSteam (08.01.2019 um 19:14 Uhr)
    Im Internet ist jede Person intelligenter als die größten Erfinder die je gelebt haben.

  4. #4
    Avatar von ZAM
    No Adblocker!

    Mitglied seit
    17.12.2008
    Ort
    Fürth
    Beiträge
    2.285

    AW: [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Dann ist einer der übermittelten Werte leer und das zugehörige Tabellenfeld ist definiert mit "NOT NULL" oder es gibt eine andere Unstimmigkeit bei den Feld-Definitionen der Tabelle und den übermittelten Werten.
    Interessant, dass du bei meinen Anpassungen keine Fehlermeldungen bekommst. Zumindest ein SQL-Fehler müsste dann ausgegeben werden.
    Wartungsdrohne
    "Und wenn einer so ein Bug-Loch entdeckt, Granate rein!"
    ASRock X99 Extreme4 | i7-5820K @ 4,2 OC 1.24v | Crucial 4x4 GB DDR4-2400 | 3xSSD,2x2TB HDD | ZOTAC GTX 980 Ti AMP! Edition | ASUS Xonar DGX PCIe | be quiet! Straight Power 10-CM Modular | Fractal R5 Define

  5. #5
    No Adblocker!

    Mitglied seit
    18.08.2017
    Ort
    8km von Harburg
    Beiträge
    443

    AW: [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Kannst du es auch erklären? Es funktionier danke aber dennoch lege Ich es Wert drauf es zu verstehen.
    Code:
    $stmtInsert = $pdo->prepare('INSERT INTO users (email,password,username) VALUES (:email,:password,:username)');
                $stmtInsert->bindValue(':email', $email, PDO::PARAM_STR);
                $stmtInsert->bindValue(':password', $password, PDO::PARAM_STR);
                $stmtInsert->bindValue(':username', $username, PDO::PARAM_STR);
                if ( $stmtInsert->execute() ) {
                   if ( (int)$pdo->errorCode() ) {
                      echo 'Fehler ' . print_r($pdo->errorInfo(), true);
                   } else {
                      echo 'User has been created.';
                   }
                }
            exit;
    Geändert von BloodSteam (09.01.2019 um 23:54 Uhr)
    Im Internet ist jede Person intelligenter als die größten Erfinder die je gelebt haben.

  6. #6
    Avatar von ZAM
    No Adblocker!

    Mitglied seit
    17.12.2008
    Ort
    Fürth
    Beiträge
    2.285

    AW: [PHP/SQL] INSERT mit PDO prepared funktioniert nicht.

    Was genau? Meinst du den Code-Ablauf?

    PDO->errorCode() liefert nach einem execute() des Prepared-Statements in der Regel immer '0000', wenn kein Fehler auftritt, daher mache ich einen Int-Cast auf 0. Liefert die Funktion keine 0 zurück, liegt ein Fehler vor, den du mit PDO-errorInfo() (ist ein Array mit dem Error-Stack) abrufen kannst.

    bindValue mit direkten Namens( :xxx )- statt Positions( ? )-Platzierungen nutze ich aus Gewohnheit, falls man den gleichen Wert an mehreren Stellen braucht. Und man kann hier genau(er) definieren, um was für einen Übergabetyp es sich handelt mit PDO :: PARAM_*.
    Wartungsdrohne
    "Und wenn einer so ein Bug-Loch entdeckt, Granate rein!"
    ASRock X99 Extreme4 | i7-5820K @ 4,2 OC 1.24v | Crucial 4x4 GB DDR4-2400 | 3xSSD,2x2TB HDD | ZOTAC GTX 980 Ti AMP! Edition | ASUS Xonar DGX PCIe | be quiet! Straight Power 10-CM Modular | Fractal R5 Define

Ähnliche Themen

  1. [PHP/SQL/PDO] Stundenplan
    Von Georgler im Forum Programmierung und Webdesign
    Antworten: 25
    Letzter Beitrag: 26.08.2015, 01:25
  2. Java <-> php-Skript funktioniert nur unter Linux
    Von Crymes im Forum Programmierung und Webdesign
    Antworten: 10
    Letzter Beitrag: 18.09.2013, 23:32
  3. SQL For Schleife mit PHP funktioniert nicht
    Von Krammer im Forum Programmierung und Webdesign
    Antworten: 5
    Letzter Beitrag: 19.03.2013, 12:01
  4. Technischer Assi für Informatik --> PHP,SQL, Visual C# 2010 etc.
    Von Lan_Party im Forum Programmierung und Webdesign
    Antworten: 17
    Letzter Beitrag: 11.08.2011, 17:55
  5. PHP/SQL - Spielesammlung
    Von Delacroix im Forum Programmierung und Webdesign
    Antworten: 4
    Letzter Beitrag: 29.01.2009, 15:31

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •