SQL Update geht nicht

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

  • thommy1972de
    antwortet
    re

    Es gibt definitiv immer nur eine kdnr weil diese Unique ist deshalb kann auch nur 1 Ergebnis rauskommen aber Array wäre natürlich besser.

    Ich schaue morgen wegen dem Fetch. Hab jetzt nach 10 Stunden keine Lust mehr...

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Zitat von thommy1972de Beitrag anzeigen
    Ich habe jetzt mal alles Umgebaut. Bitte keine Kommentare wegen * ^^
    Doch. Es gibt keinen Grund SELECT * zu verwenden, also tu das auch nicht.

    Zitat von thommy1972de Beitrag anzeigen
    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.
    Durchnummerierte Variablen sind Käse.

    Variablen in einer Schleife jedesmal zu überschreiben ist auch Quatsch. Wenn du nur einen Datensatz erwartest, dann verwende keine Schleife.

    Statt zig Variablen anzulegen könntest du auch einfach ein Array oder ein Objekt verwenden. Das macht den Code wesentlich übersichtlicher.

    Du ignorierst Datenbankfehler. Wenn mysqli_query() fehlschlägt, wird das still und heimlich verschluckt. Sowas ist ganz schlecht und führt nur zu einer unnötig aufwändigen und langwierigen Fehlersuche, wenn mal doch etwas nicht so funktioniert, wie mans gern hätte.

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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 ??

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Bitte Code lesbar und einheitlich einrücken.

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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, 15:21.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    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.

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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(); 

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    In deinem geposteten Code kommt kein close() vor.

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    "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.

    Einen Kommentar schreiben:


  • thommy1972de
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X