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...
SQL Update geht nicht
Einklappen
X
-
Doch. Es gibt keinen Grund SELECT * zu verwenden, also tu das auch nicht.Zitat von thommy1972de Beitrag anzeigenIch habe jetzt mal alles Umgebaut. Bitte keine Kommentare wegen * ^^
Durchnummerierte Variablen sind Käse.Zitat von thommy1972de Beitrag anzeigenSorum funktioniert es.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'];
}}
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:
-
re
Ich habe jetzt mal alles Umgebaut. Bitte keine Kommentare wegen * ^^
Sorum funktioniert es.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'];
}}
Einen Kommentar schreiben:
-
Weil du gar nicht überprüfst, ob die Abfrage erfolgreich war. query() liefert einen Rückgabewert, diesen solltest du nicht ignorieren.
Einen Kommentar schreiben:
-
re
Selbst wenn ich nur
eingebe erhalte ich weder Fehler noch ein Update ??PHP-Code:$update = "UPDATE kunden SET firstlogin = '1' WHERE kdnr = '1'";
$mysqli->query($update);
Stimmt doch ??PHP-Code:error_reporting(E_ALL);
ini_set('display_errors', 1);
Einen Kommentar schreiben:
-
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($random1, PASSWORD_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:
-
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:
-
re
Dadurch erhalte ich mit $db_email die korrekte Email Adresse.PHP-Code:$stmt->bind_result($db_kdnr, $db_email, $db_passwort, $db_firstlogin, $db_firstversuche, $db_anrede, $db_nachname, $db_vorname);
$stmt->fetch();
diese kann ich auch vor der SQL Abfrage ausgeben somit stimmt diese definitiv.
Einen Kommentar schreiben:
-
$stmt enthält kein Objekt, sondern einen boolschen Wert. Jetzt musst du herausfinden warum.
Einen Kommentar schreiben:
-
re
Die Kurzform wäre doch
PHP-Code:$mysqli->query("UPDATE kunden SET firstlogin = '1' WHERE email = 'die Email'");
und in Zeile 65 stehtPHP-Code:$mysqli->close();
$stmt->close();
Einen Kommentar schreiben:
-
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:
-
"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:
-
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:
Einen Kommentar schreiben: