SQL Update geht nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL Update geht nicht

    Ich habe folgendes Skript:
    PHP-Code:
    if (filter_input(INPUT_POST"email"FILTER_VALIDATE_EMAIL)) { $email htmlspecialchars($_POST["email"]); }
    if (
    filter_input(INPUT_POST"kdnr"FILTER_VALIDATE_INT)) { $kdnr htmlspecialchars($_POST["kdnr"]); }
    $passwort password_hash($_POST["passwort"]);


    if (
    mysqli_connect_errno()) {
        
    printf("Connect failed: %s\n"mysqli_connect_error());
        exit();
    }

    /* prepare statement */
    if ($stmt $mysqli->prepare("SELECT kdnr, email, passwort, firstlogin, firstversuche, anrede, nachname, vorname FROM kunden WHERE kdnr = '$kdnr' AND email = '$email' LIMIT 1")) {
        
    $stmt->execute();
        
    $stmt->bind_result($db_kdnr$db_email$db_passwort$db_firstlogin$db_firstversuche$db_anrede$db_nachname$db_vorname);
    $stmt->fetch();

        
    if(
    $db_firstlogin == 0) { // Wenn zum ersten mal Login

    if($db_firstversuche >= 5) { // Wenn mehr oder gleich 5 Versuche
    echo "Sie haben mehr als 5x Versucht eine Bestätigungsemail zu senden. Deswegen wurde ihr Account gesperrt. <br />Bitte kontaktieren Sie uns unter: ----- um ihren Account wieder zu Entsperren."
    exit; 
    }
        
        
    if(!empty(
    $db_email)) { // Wenn Email vorhanden

        
    echo "<br /><hr><br />Sie melden sich heute zum 1. mal in unserem System an !<br />Daher müssen wir ihre Identität noch verifizieren."
        
    $betreff utf8_decode("Ihr Bestätigungscode");
        
    $from "From: NAME <xxxxxx>\n";
        
    $from .= "Reply-To: antwort@domain.de\n";
        
    $from .= "Content-Type: text/html\n";

        
    $random1 rand(99999,999999999);
        
    $random password_hash($random1PASSWORD_DEFAULT);
        
    $text utf8_decode("Hallo ".$db_anrede." ".$db_nachname." ".$db_vorname.".<br /><br />Ihr Bestätigungscode lautet: ".$random1."<br /><br />Falls Sie die Seite schon geschlossen haben, folgen Sie bitte diesem Link:<br /><center><br />Link zum Bestätigen: <br /><a style='background: #454545; color:#fff; text-decoration:none;' href='http://www.webseitee/verify.php&email=".$db_email."&code=".$random."'> Hier klicken </a></center>  <br /><br /><hr><p style='font-size='1px'><hr><br /> \n\nDanke");
     
        
    mail($db_email$betreff$text$from);

        
    // Eintrag in DB der nicht geht !!!!

    if ($stmt $mysqli->prepare("UPDATE kunden SET firstlogin = '1' WHERE email = 'eine Email Adresse @ adddi. de'")) {
        
    $stmt->execute();
    }


    }

    Woran kann das liegen ??? Hab schon mit ` und ' ohne Anführungszeichen und mit mit ? und bind_param
    Er macht einfach in firstlogin keine 1 rein

  • #2
    Woran kann was liegen? "geht nicht" ist keine Fehlerbeschreibung.

    htmlspecialchars() hat in SQL-Code nichts verloren. Das gehört nur in die HTML-Ausgabe.

    Wenn du schon prepare() verwendest, warum setzt da dann nicht auch die Parameter damit? Und bevor du fragst wie: Steht alles im PHP-Handbuch.

    mail() sollte nicht verwendet werden. Nimm stattdessen eine Mailer-Klasse.

    Kommentar


    • #3
      re

      if ($stmt = $mysqli->prepare("UPDATE kunden SET firstlogin = ? WHERE email = ?")) {
      $stmt->bind_param("is", "1", "test@test");
      $stmt->execute();
      }

      Geht auch nicht. Wenn das SQL Update mal geht kümmer ich mich um die Mailer Klasse

      Kommentar


      • #4
        "geht nicht" ist keine Fehlerbeschreibung.

        Du ignorierste sämtlich SQL-Fehler. Lass sie dir doch mal ausgeben. Betreiber Debugging. Lass dir Variableninhalt und Rückgabewerte ausgeben oder verwende gleich einen Debugger.

        Kommentar


        • #5
          Soory

          Sry hab die Function vergessen anzustellen ^^

          Fatal error: Call to a member function close() on boolean in /var/www/k103238web/htdocs/www.zwpc.de/web/seiten/kundencenter.php on line 66

          Kommentar


          • #6
            In deinem geposteten Code kommt kein close() vor.

            Kommentar


            • #7
              re

              Die Kurzform wäre doch
              PHP-Code:
              $mysqli->query("UPDATE kunden SET firstlogin = '1' WHERE email = 'die Email'"); 

              und in Zeile 65 steht
              PHP-Code:
                $mysqli->close();  
                
              $stmt->close(); 

              Kommentar


              • #8
                $stmt enthält kein Objekt, sondern einen boolschen Wert. Jetzt musst du herausfinden warum.

                Kommentar


                • #9
                  re

                  PHP-Code:
                  $stmt->bind_result($db_kdnr$db_email$db_passwort$db_firstlogin$db_firstversuche$db_anrede$db_nachname$db_vorname);
                      
                  $stmt->fetch(); 
                  Dadurch erhalte ich mit $db_email die korrekte Email Adresse.
                  diese kann ich auch vor der SQL Abfrage ausgeben somit stimmt diese definitiv.

                  Kommentar


                  • #10
                    Du zeigst immer nur Code-Fetzen ohne Zusammenhang. Das ist überhaupt nicht hilfreich. Schreibe bitte ein kurzes und knackiges Code-Beispiel, bei dem das Fehlverhalten nachvollziehbar auftritt.

                    Kommentar


                    • #11
                      re

                      Der komplette Code:

                      PHP-Code:
                      fehleranzeige();

                      if(!isset(
                      $_POST["login_5_1"])) { echo "fehler !"; exit; } 

                      if (
                      filter_input(INPUT_POST"email"FILTER_VALIDATE_EMAIL)) { $email $_POST["email"]; }
                      if (
                      filter_input(INPUT_POST"kdnr"FILTER_VALIDATE_INT)) { $kdnr $_POST["kdnr"]; }
                      $passwort password_hash($_POST["passwort"], PASSWORD_DEFAULT);

                      if (
                      $stmt $mysqli->prepare("SELECT kdnr, email, passwort, firstlogin, firstversuche, anrede, nachname, vorname FROM kunden WHERE kdnr = '$kdnr' AND email = '$email' LIMIT 1")) {
                          
                      $stmt->execute();
                          
                      $stmt->bind_result($db_kdnr$db_email$db_passwort$db_firstlogin$db_firstversuche$db_anrede$db_nachname$db_vorname);
                          
                      $stmt->fetch();

                          if(
                      $db_firstlogin == 0) { 

                                  if(
                      $db_firstversuche >= 5) { 
                                    echo 
                      "Sie haben mehr als 5x Versucht eine Bestätigungsemail zu senden. Deswegen wurde ihr Account gesperrt. <br />Bitte kontaktieren Sie uns unter:  um ihren Account wieder zu Entsperren."
                                    exit; 
                                  }
                          
                          if(!empty(
                      $db_email)) {
                          echo 
                      "<br /><hr><br />Sie melden sich heute zum 1. mal in unserem System an !<br />Daher müssen wir ihre Identität noch verifizieren."
                          
                      $betreff utf8_decode("Ihr Bestätigungscode");
                          
                      $from "From: xxxx <xxxx>\n";
                          
                      $from .= "Reply-To: antwort@domain.de\n";
                          
                      $from .= "Content-Type: text/html\n";

                          
                      $random1 rand(99999,999999999);
                          
                      $random password_hash($random1PASSWORD_DEFAULT);
                          
                      $text utf8_decode("Hallo ".$db_anrede." ".$db_nachname." ".$db_vorname.".<br /><br />Ihr Bestätigungscode lautet: ".$random1."<br /><br />Falls Sie die Seite schon geschlossen haben, folgen Sie bitte diesem Link:<br />        <center><br />Link zum Bestätigen: <br /><a style='background: #454545; color:#fff; text-decoration:none;' href='http://xxxxxx/verify.php&email=".$db_email."&code=".$random."'> Hier klicken </a></center>  <br /><br /><hr><hr><br /> \n\nDanke");
                          
                      mail($db_email$betreff$text$from);

                          
                      $mysqli->query("UPDATE kunden SET firstlogin = '1' WHERE email = '$db_email'"); // <<-- Geht nicht 
                           
                      }}
                          
                           if(
                      password_verify($_POST['passwort'], $db_passwort) == False) { echo "<br /><br /><h3>Das Passwort stimmt leider nicht mit unseren Daten überein !</h3>"; exit; }
                                echo 
                      "<br />";
                                echo 
                      first_verify();
                      }

                      $mysqli->close();  
                      $stmt->close(); 
                      Zuletzt geändert von thommy1972de; 05.05.2016, 16:21.

                      Kommentar


                      • #12
                        Bitte Code lesbar und einheitlich einrücken.

                        Kommentar


                        • #13
                          re

                          Selbst wenn ich nur
                          PHP-Code:
                              $update "UPDATE kunden SET firstlogin = '1' WHERE kdnr = '1'";
                              
                          $mysqli->query($update); 
                          eingebe erhalte ich weder Fehler noch ein Update ??

                          PHP-Code:
                          error_reporting(E_ALL);
                          ini_set('display_errors'1); 
                          Stimmt doch ??

                          Kommentar


                          • #14
                            Weil du gar nicht überprüfst, ob die Abfrage erfolgreich war. query() liefert einen Rückgabewert, diesen solltest du nicht ignorieren.

                            Kommentar


                            • #15
                              re

                              Ich habe jetzt mal alles Umgebaut. Bitte keine Kommentare wegen * ^^

                              PHP-Code:
                              $query2 "SELECT * FROM kunden WHERE kdnr = '1'";
                              if(
                              $ergebnis mysqli_query($mysqli$query2)) {
                              while(
                              $row=mysqli_fetch_assoc($ergebnis)) {
                                  
                              $db_firstlogin $row['firstlogin'];
                                  
                              $db_firstversuche $row['firstversuche'];
                                  
                              $db_email $row['email'];
                                  
                              $db_passwort $row['passwort'];
                                  
                              $db_anrede $row['anrede'];
                                  
                              $db_nachname $row['nachname'];
                                  
                              $db_vorname $row['vorname'];
                              }} 
                              Sorum funktioniert es.

                              Kommentar

                              Lädt...
                              X