Guten Tag Community, ich möchte kurz und knapp mein Problem schildern.
Bei Absenden eines Datensatzes wird die Benutzer_ID um 1 erhöht. Gut, also müsste bei einem zweiten Absenden des Datensatzes die Benutzer_ID 2 haben. Hat es auch, jedoch wird bei nicht erfolgreicher Absendung die Benutzer_ID um 1 erhöht. Das bedeutet wenn ich ein zweiten Datensatz z.B einfügen möchte und es fehlgeschlagen ist und es nochmal probiere und es klappt hat die zweite Benutzer_ID den Wert 3 anstatt 2. Genauer kann ich es nicht erklären vllt fällt euch was beim Bild auf.
Code:
Benutzer_ID hat in der Datenbank-Tabelle folgende Werte: INT(11) NOT NULL, Auto_Increment, Primary_Key
Falls ihr noch meinen Code sehen möchtet der den Datensatz einfügt:
[PHP]
<?php
if ("POST" == $_SERVER['REQUEST_METHOD']) {
include "inc/verbindung.inc.php";
$insert = $verbindung->prepare("INSERT INTO account (user, password, zahl) VALUES (?, ?, ?)");
$insert->bindValue(1, $_POST['user']);
$insert->bindValue(2, password_hash($_POST['password'], PASSWORD_DEFAULT));
$insert->bindValue(3, $_POST['zahl']);
if ($insert->execute()) {
echo "Sie haben die Daten richtig eingegeben";
} else {
exit($insert->errorInfo());
}
}
?>
[/PHP]
Was ich gern haben möchte: Das sich bei jedem Account der erstellt wird die , Benutzer_ID um eins steigt auch wenn es fehlgeschlägt beim Absenden.(bzw. Sie haben nicht alle Felder ausgefüllt oder weiteres).
Das entspricht aber dann nicht dem was Du oben als Problem beschreibst. Wenn Du die Pflichtfelder prüfen würdest und dabei heraus kommt das eines fehlt, dann dürftest Du kein INSERT ausführen - das wäre auch schon die Lösung.
@bdt600 : Habe es mal mit empty und Trim versucht wobei ich noch nichts von trim wusste. Deswegen habe ich es mal eingefügt und es klappt auch jetzt alles , nur könnte ich dies jetzt so verwenden und ist es auch sicher?
[PHP]
<?php
if ("POST" == $_SERVER['REQUEST_METHOD']) {
include "inc/verbindung.inc.php";
if((empty(trim($_POST['user'] ))) || (empty(trim($_POST['password']))) ||(empty(trim($_POST['personalnummer']))))
{
echo "
Also ich gehe mal davon aus, das es eine Art „Registration“ ist. Daher ist es gut möglich das der Benutzername der angegeben und in der Datenbank hinterlegt wird, irgendwo wieder angezeigt wird. Dh. wiederum, dass du diesen Benutzernamen filtern solltest, damit der Angreifer bspw. keinen HTML-Code / JavaScriptCode in deine Datenbank einschleusen kann.
Wobei man dies auch erst beim Auslesen filtern könnte. Primär wichtig ist es, SQL Injections vorzubeugen und das sollte bei den prepared statements der Fall sein-.
@bdt : Danke für den Link erstmals aber: Das beantwortet immer noch nicht das Problem das , wenn ich mich mit dem Benutzer Einlogge , das er dann immer ausgibt: Das die Daten Korrekt sind obwohl ich ungültige Zeichen verwende wie: !"§$% etc.
Ungültige Zeichen? Die Zeichen ausgenommen die Hochkommas, darfst du heutzutage in jedem Passwort und Benutzernamen verwenden. Damit lässt sich auch nicht viel manipulieren, bezüglich der Sicherheit. Zumindest nicht das ich wüsste, wenn korrigiert mich.
Wichtig ist, das du kein XSS, SQLi und Blind SQLi zulässt. Da reichen eig. Prepared-Statements und htmlspecialchars().
Habe die Dokumentation von filter_var jetzt nicht im Kopf, aber kann da nicht nur TRUE oder FALSE geliefert werden? Von daher müsste es auch bei deine Version dann knacken.
Wie dem auch sei Chef. Du wusstest ja worauf ich hinnaus will. Müsste man wenn halt an den Quellcode anpassen.
Das Funktoniert immer noch nicht ganz. Alles klappt außer das mit den Filtern. Sobald ich ungültige Zeichen verwende steht da immer: Alle Pflichtfelder ausfüllen. (Code von bdt).