Autor |
Beitrag |
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 04.10.16 12:01
- Nachträglich durch die Entwickler-Ecke gelöscht -
Zuletzt bearbeitet von Frühlingsrolle am Di 04.10.16 12:44, insgesamt 1-mal bearbeitet
|
|
hydemarie
Beiträge: 475
Erhaltene Danke: 51
|
Verfasst: Di 04.10.16 12:05
Eine Vermischung von mysql_ und mysqli_ würde ich tunlichst zu vermeiden raten.
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 04.10.16 14:36
Warum nutzt Du keine Parameter?
So kümmert sich die msqli-Library um SQL Injection und um alles andere gleich mit.
In meinem Code, den ich dir ganz zu Beginn gegeben habe, habe ich das genutzt.
Zitat: | Die Gültigkeit der Daten bzw. ihre Vollständigkeit, richtet sich an der Eingabe des Nutzers. Diese Überprüfung sollte mit Hilfe von JavaScript erfolgen, im Zusammenspiel mit Ereignissen von input-Feldern aus dem HTML. |
Ich würde dennoch auf beiden Seiten gegenprüfen und eine vorzeigbare Fehlermeldung generieren.
Klar, JavaScript ist da schöner, aber wenn ein User das ausgeschaltet hat, sollte der PHP-Code den Fehler ebenfalls entsprechend behandeln.
Ich würde dafür für die Login-Seite - die ja ebenfalls via PHP generiert werden kann - entsprechende GET_Parameter anbieten, sodass Du im Login-PHP-Code diese Seite aufrufen und ein Flag setzen kannst, dass die Fehler-Meldung angezeigt werden soll. In die POST-Variable sollten dann wieder alle zuvor eingegebenen Daten rein.
Wenn der Nutzer dann ohne JavaScript falsche Daten eingibt, dann lädt die Seite neu, alle zuvor eingegeben Daten werden eingetragen und es wird eine Meldung angezeigt, dass diese falsch sind.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 04.10.16 16:43
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
hydemarie
Beiträge: 475
Erhaltene Danke: 51
|
Verfasst: Di 04.10.16 16:54
Es ist ausgesprochen rücksichtslos, Javascript beim Besucher zwingend vorauszusetzen, wenn dies aus technischen Gründen nicht unbedingt nötig (und das ist es nie) ist.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 09:17
Hallo Forum, ich wollte mich nochmal entschuldigen, dass ich in diesem Thread sehr vorschnell und unüberlegt gehandelt habe. Ich wollte nur, dass alles funktioniert. Jetzt hapert es nur noch an einer kleinen Sache. Ich habe mir den Code gestern nochmal angesehen und ihn jetzt auch verstanden.
Zu dem kleinen Problem:
In der PHP Datei, wo die Daten in die Datenbank geschrieben werden, möchte ich, dass dem User eine Email mit einem Bestätigungslink gesendet wird. Das ist schonmal mein Code:
PHP-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if ($mysqli) { $nachricht = "Vielen Dank für die Registrierung in dem Mainlysoft netzwerk."; $subject = "Anmeldebestätigung"; mail($chem1, $subject, $nachricht); header("Location: reg_succes.html"); } else { echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut."; } |
Erst soll die Email versendet werden und danach soll eine andere Website geöffnet werden. Wenn ich dies so aber mache, bleibt der Browser bei der PHP Datei stehen, er zeigt nichts an und leitet auch nicht weiter. Eine Email bekomme ich auch nicht. Woran liegt es jetzt noch?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Do 06.10.16 09:22
Warum mail nicht klappt, kann ich nicht sagen.
Für den Redirect, schau mal hier:
stackoverflow.com/qu...ke-a-redirect-in-php
Da werden auch ein paar Besonderheiten angesprochen, die Du beachten musst.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 14:22
Oder kann es sein, dass sich ein anderer Fehler eingeschlichen hat? Wenn ich mich registrieren kommt immer dieser Fehler: [echo "Ueberpruefen Sie alle Daten";]
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97:
| if($sql_query) { $username = mysqli_real_escape_string($sql_query, $_POST['username']); $geburtsdatum = mysqli_real_escape_string($sql_query, $_POST['geburtsdatum']); $vorname = mysqli_real_escape_string($sql_query, $_POST['vorname']); $nachname = mysqli_real_escape_string($sql_query, $_POST['lastname']); $chem1 = mysqli_real_escape_string($sql_query, $_POST['email_one']); $chem2 = mysqli_real_escape_string($sql_query, $_POST['email_two']); $safequestion = mysqli_real_escape_string($sql_query, $_POST['safequestion']); $question_answer = mysqli_real_escape_string($sql_query, $_POST['question_answer']); $chpass1 = mysqli_real_escape_string($sql_query, $_POST['password1']); $chpass2 = mysqli_real_escape_string($sql_query, $_POST['password2']); $gender = mysqli_real_escape_string($sql_query, $_POST['gender']); $language = mysqli_real_escape_string($sql_query, $_POST['language']);
$checked_password = false; $checked_email = false; $checked_agb = false; if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "") { if($chpass1 == $chpass2) { $password = true; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>"; $checked_password = false; } if(isset($_POST['agb'])) { $checked_agb = true; } else { echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>"; $checked_agb = false; }
if($chem1 == $chem2) { $checked_email = true; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>"; $checked_email = false; } if($checked_password === true && $checked_email === true && $checked_agb === true) { $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'"); $row = mysqli_fetch_row($search);
if($row[1]==$chem1) { echo "Username and Email exists "; } else { $b = "false"; $regDatum = date(Y-M-D); $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]); $anzMeld = "0"; $emBest = "false"; $mysqli = mysqli_query($sql_query, "INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`) VALUES('$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')"); if ($mysqli) { header("Location: reg_succes.html"); } else { echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut."; } } } else { echo "Ueberpruefen Sie alle Daten"; } } else { echo "Füllen Sie bitte alle Datenfelder aus."; } } else { die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.'); } |
Kann es vielleicht damit zusammenhängen, dass die Email nicht gesendet wird, aber ich finde den Fehler wirklich nicht
Einloggen, um Attachments anzusehen!
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
hydemarie
Beiträge: 475
Erhaltene Danke: 51
|
Verfasst: Do 06.10.16 14:28
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 14:30
Meinst du, wie viele fehlgeschlagene Loginversuche der User hatte?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
hydemarie
Beiträge: 475
Erhaltene Danke: 51
|
Verfasst: Do 06.10.16 14:48
Nein, ich meine ein PHP-Fehlerprotokoll. Da würde dann auch sowas wie "mail() kaputt, weil..." drinstehen.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 15:05
Stimmt. An sich ist es ja eine gute Idee, aber trotzdem muss man ja das Problem lösen, dass die Daten wieder in die Datenbank geschrieben werden...
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 20:40
Soo Leute. Ich habe jetzt erkannt, dass der Code nicht ausgeführt wird, weil irgendetwas mit der IF-Abfrage nicht stimmt.
Zur Erklärung: auf dem HTML Formular befindet sich eine CheckBox (für die AGB) und die Eingabefelder für die Daten. In der PHP Datei soll nun abgefragt werden, ob die Emails gleich sind, ob die Passwörter gleich sind und ob die CheckBox gecheckt ist. Dann soll erst ein Eintrag in die Datenbank vorgenommen werden. Soweit so gut. Ich habe mal diesen Code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| if($sql_query) { $username = mysqli_real_escape_string($sql_query, $_POST['username']); $geburtsdatum = mysqli_real_escape_string($sql_query, $_POST['geburtsdatum']); $vorname = mysqli_real_escape_string($sql_query, $_POST['vorname']); $nachname = mysqli_real_escape_string($sql_query, $_POST['lastname']); $chem1 = mysqli_real_escape_string($sql_query, $_POST['email_one']); $chem2 = mysqli_real_escape_string($sql_query, $_POST['email_two']); $safequestion = mysqli_real_escape_string($sql_query, $_POST['safequestion']); $question_answer = mysqli_real_escape_string($sql_query, $_POST['question_answer']); $chpass1 = mysqli_real_escape_string($sql_query, $_POST['password1']); $chpass2 = mysqli_real_escape_string($sql_query, $_POST['password2']); $gender = mysqli_real_escape_string($sql_query, $_POST['gender']); $language = mysqli_real_escape_string($sql_query, $_POST['language']); if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "") { if($chpass1 == $chpass2) { $password = 'true'; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>"; $checked_password = 'false'; } if(isset($_POST['agb'])) { $checked_agb = true; } else { echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>"; $checked_agb = false; }
if($chem1 == $chem2) { $checked_email = 'true'; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>"; $checked_email = 'false'; } if($checked_agb == 'true' && $checked_email == 'true' && $checked_password == 'true') { $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'"); $row = mysqli_fetch_row($search);
if($row[1]==$chem1) { echo "Username and Email exists "; } else { $b = "false"; $regDatum = date(Y-M-D); $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]); $anzMeld = "0"; $emBest = "false"; $mysqli = mysqli_query($sql_query, "INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`) VALUES('$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')"); if ($mysqli) { $mail = "Eine Email"; mail($chem1, 'hallo', 'tscgüss'); header("Location: reg_succes.html"); } else { echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut."; } } } else { echo "Fehler"; } } else { echo "Füllen Sie bitte alle Datenfelder aus."; } } else { die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.'); } |
Aber egal was ich mache, es wird mit der If- Agfrage immer "FEHLER" geechoed. Aber es soll ja geprüft werden, ob die übereinstimmen. Woran hapert es?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
FinnO
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Do 06.10.16 21:00
Csharp-programmierer hat folgendes geschrieben : | PHP-Quelltext 1:
| if($checked_agb == 'true' && $checked_email == 'true' && $checked_password == 'true') | |
gewöhne dir bitte Vergleiche der Form $sth == 'true' oder ähnliches ab. Das macht in wirklich keinerlei Hinsicht Sinn. Du vergleichst deine Variable mit dem Stringwert 'true', das funktioniert in Sprachen wie PHP oder JavaScript nur an Dienstagen, weil der ==-Operator die Typen coerciert.
Außerdem hat dieser Vergleich logisch wenig nutzen. Eine If-Abfrage erwartet einen booleschen Wert als "Eingabe":
PHP-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if (true) { echo "wird immer ausgeführt." }
if (false) { echo "wird nie ausgeführt." } |
Ein Statement der Form:
PHP-Quelltext
evaluiert zu einem booleschen Wert und ist daher mehr als ausreichend für eine If-Abfrage.
Ich möchte eigentlich gar nicht im Detail verstehen, was PHP genau macht, wenn du die o.g. Abfrage ausführst, aber wenn da jemals etwas vernünftiges herauskommt, wäre ich schon leicht verwundert.
Gruß
Finn
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 06.10.16 21:02
Zusätzlich zu dem, was FinnO schreibt: Es gibt keinen Grund, Wahrheitswerte als String zu speichern, für sowas sind bool'sche Werte da.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 06.10.16 21:09
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70:
| if($chpass1 == $chpass2) { $password = true; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>"; $checked_password = false; } if(isset($_POST['agb'])) { $checked_agb = true; } else { echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>"; $checked_agb = false; }
if($chem1 == $chem2) { $checked_email = true; } else { echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>"; $checked_email = false; } if($checked_agb && $checked_email && $checked_password) { $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'"); $row = mysqli_fetch_row($search);
if($row[1]==$chem1) { echo "Username and Email exists "; } else { $b = "false"; $regDatum = date(Y-M-D); $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]); $anzMeld = "0"; $emBest = "false"; $mysqli = mysqli_query($sql_query, "INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`) VALUES('$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')"); if ($mysqli) { $mail = "Eine Email"; mail($chem1, 'hallo', 'tscgüss'); header("Location: reg_succes.html"); } else { echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut."; } } } else { echo "Fehler"; } } |
Soo. Jetzt habe ich alle Variablen in booleans umgewandelt, aber es kommt immer noch "Fehler" als echo
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Christian S.
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 06.10.16 21:17
Zeile 3
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 07.10.16 13:31
Upps, dass ist echt peinlich
Jetzt funktioniert es. Auf die Email mit dem Bestätigungslink wird jetzt abgesendet.
Dazu hatte ich die Idee, einen Link zu erstellen, der eine PHP Datei anfunkt und dieser über die $_GET Variable eine ID mitschickt. In dieser PHP Datei soll denn der Datensatz geändert werden, der die ID hat. Dazu habe ich diesen Lösungsansatz:
PHP-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| if ($mysqli) { function getUsetId($email) {[color=red] $result= mysqli_query($sql_query, "SELECT ID FROM MainlysoftBenutzer WHERE `email`='$email'"); $row = mysqli_fetch_row($result); $id = $row['id'];[/color] return $id; }
$calc_id = getUsetId($chem1); $to = $chem1; $subject = 'Subject...'; $message = '<html><body>'; $message .= '<a href="http://www.mainlysoft.com/VerifyUser.php?ID=$calc_id">Bestätigungslink</a><br><br>'; $message .= '<label>Mit freundlichen Grüßen,</label><br>'; $message .= '<label>Das Mainlysoft Team</label>'; $message .= '</body></html>'; $em_res = mail($to, $subject, $message, $headers); if ($em_res) { [color=red]header("Location: reg_succes.html");[/color] } else { echo "Fehler beim Senden der Email"; } } |
PHP-Quelltext 1: 2: 3: 4:
| <?php $ID = $_GET['Id']; echo $ID; ?> |
Aber wenn ich diesen Script nun so ausführe, bekomme ich diesen Fehler: Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 82
Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, null given in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 83
Warning: Cannot modify header information - headers already sent by (output started at /var/www/web23442894/html/Mainlysoft/InsertData.php:82) in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 111
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 07.10.16 15:30
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: FinnO
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 07.10.16 15:50
Ich verstehe es nicht so recht, da es in diesem Code eine Funktion gibt, die genau das selbe nur mit anderen Werten. Anscheinend fehlt irgendein Argument, aber ich weiß nicht welches
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
|