• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Benutzer_id in der Datenbank steigt bei jedem Absenden auch wenn ein Error kommt.

Werbung:
Wenn Du uns verrätst was Du damit in Bezug auf deinen uns unbekannten Quellcode meinst, könnte man die Frage evtl. beantworten.
 
Der Code von bdt der gepostet wurde kann den nochmal einfügen, was mir jedoch grad eingefallen ist wollte ich in den Usernamen nur Zahlen und Buchstaben vorhanden haben. Alles klappt , doch wenn ich erfolgreicher Einträge eintrage, wird meine Homepage leer als ob man Exit einfügt kein Error nichts. Der Code mit ctype_alnum

Code von bdt (Problem mit Filter)
PHP:
<?php
if (isset($_POST['user']))
{
$user = trim($_POST['user']);
$pnr  = trim($_POST['personalnummer']);
$pw  = trim($_POST['password']);

if(!empty ($user) && !empty ($pnr) && !empty ($pw))
{
 $user = filter_var($user, FILTER_SANITIZE_STRING);
$pnr  = filter_var($pnr, FILTER_VALIDATE_INT);

if($user !== false && $pnr !== false)
{
include "inc/verbindung.inc.php";

$insert = $verbindung->prepare("INSERT INTO account (user, password, personalnummer) VALUES (?, ?, ?)");
$insert->bindValue(1, $user);
$insert->bindValue(2, password_hash($pw, PASSWORD_DEFAULT));
$insert->bindValue(3, $pnr);

if($insert->execute())  echo "Der Eintrag war erfolgreich"; else print_r($insert->errorInfo());
}
else
 {
 if($user === false) 
 echo "Der Benutzername ist nicht korrekt";
 
 if($pnr === false) 
 echo "Bitte nur Zahlen";
 }
}
else 
echo "Alle Pflichtfelder ausfüllen";
}
?>

Neuer Code das nur Buchstaben und Zahlen vorhanden sein sollen. (Problem , beim erfolgreichen Eintrag wird die Seite leer)

PHP:
<?php
if (isset($_POST['user']))
{
$user = trim($_POST['user']);
$pnr  = trim($_POST['personalnummer']);
$pw  = trim($_POST['password']);

if(!empty ($user) && !empty ($pnr) && !empty ($pw))
{
$user = ctype_alnum($user);
$pnr  = filter_var($pnr, FILTER_VALIDATE_INT);

if($user !== false && $pnr !== false)
{
include "inc/verbindung.inc.php";

$insert = $verbindung->prepare("INSERT INTO account (user, password, personalnummer) VALUES (?, ?, ?)");
$insert->bindValue(1, $user);
$insert->bindValue(2, password_hash($pw, PASSWORD_DEFAULT));
$insert->bindValue(3, $pnr);

if($insert->execute())  echo "Der Eintrag war erfolgreich"; else print_r($insert->errorInfo());
}
else
 {
 if($user === false) 
 echo "Der Benutzername ist nicht korrekt";
 
 if($pnr === false) 
 echo "Bitte nur Zahlen";
 }
}
else 
echo "Alle Pflichtfelder ausfüllen";
}
?>
 
Werbung:
Wenn du nur eine weiße Seite hast, setz mal das hier ganz oben in den Code
PHP:
error_reporting(E_ALL);
ini_set('display_errors', 1);

Wie ich finde das die Syntax total drunter leidet wenn geschweifte klammern weggelassen werden :D
 
Lag an Password-hash war anscheind eine alte Version, aufjedenfall habe ich es gelöst jedoch wenn ich den Nutzername eintrage und absende erscheint in der Datenbank Tabelle User eine 1 , auch wenn ich ein Name angebe. Wenn ich es nochmal versuche steht da:

Array ( [0] => 23000 [1] => 1062 [2] => Duplicate entry '1' for key 'user' )

Egal was für ein Text ich eingebe der User wird in der Datenbank immer als 1 gespeichert.

PHP:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

if (isset($_POST['user']))
{
$user = trim($_POST['user']);
$pnr  = trim($_POST['personalnummer']);
$pw  = trim($_POST['password']);

if(!empty ($user) && !empty ($pnr) && !empty ($pw))
{
$user = ctype_alnum($user);
$pnr  = filter_var($pnr, FILTER_VALIDATE_INT);

if($user !== false && $pnr !== false)
{
include "inc/verbindung.inc.php";

$insert = $verbindung->prepare("INSERT INTO account (user, password, personalnummer) VALUES (?, ?, ?)");
$insert->bindValue(1, $user);
$insert->bindValue(2, password_hash($pw, PASSWORD_DEFAULT));
$insert->bindValue(3, $pnr);

if($insert->execute())  echo "Der Eintrag war erfolgreich"; else print_r($insert->errorInfo());
}
else
{
if($user === false)
echo "Der Benutzername ist nicht korrekt";

if($pnr === false)
echo "Bitte nur Zahlen";
}
}
else
echo "Alle Pflichtfelder ausfüllen";
}
?>
 
Hört sich nach falschen Datentypen an, wie sieht die Tabellenstruktur aus?
 
Werbung:
Tabellen-Struktur:
PHP:
<?php
include "verbindung.inc.php";

try {
$verbindung->exec("CREATE TABLE IF NOT EXISTS `account` ( 
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 `user` varchar(25) NOT NULL,
 `password` varchar(255) NOT NULL,
 `personalnummer` INT(11) NOT NULL,
  UNIQUE KEY `user` (`user`))");
  echo '<p>Die Datenbank-Tabelle wurde <b>erfolgreich</b> erstellt</p>';
} catch(PDOException $err) {
exit("Tabelle fehlgeschlagen" . $err->getMessage());
}
?>

Aber habe ich es überhaupt richtig gemacht mit ctype_alnum bzw. in die richtige Stelle gesetzt.
 
Richtig debuggen

1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.


Und dann möchtest du bestimmt mal in der Doku nachsehen, was ctype_alnum zurückliefert: http://php.net/ctype_alnum
 
Finde es Hammer von dir das du aktiv bist und mir immer tipps gibst wie das auch jetzt mit den Debuggen. Habe alles wirklich alles gemacht sogar den error in Google gesucht doch keine entsprechenden Erfolge erzielt, das er bei immer eine 1 in den User in der db reinfügt. Immer der gleiche mysql error:

Array([0]=>23000 [1]=> 1062 [2]=> Duplicate entry '1' for key 'user')

Bin schon seit 2 Tagen dran...
 
Werbung:
Finde es Hammer das du immer aktiv und mir hilfreiche tipps zur verfügen stellst. Ich habe wirklich alles gemacht mit dem Debuggen habe sogar den Fehler in Google gesucht jedoch keine entsprechenden Erfolge erzielt. Es kommt immer der gleiche Fehler. Er fügt nicht den User Namen ein der eingeben wird sondern einfach bei user eine 1 in die datenbank.

Error mysqli

Array([0]=>23000, [1]=>1062, [2]=> Duplicate entry '1' for key 'user')
 
Und wenn du "Richtig debuggen" wirklich befolgt hättest und dir $user vor dem Speichern in die DB mal per echo hättest ausgeben lassen, wäre dir aufgefallen, dass da nicht mehr der User drinsteht!

Klarer Fall von mangelnder Eigeninitiative!
 
Werbung:
Finde es Hammer das du immer aktiv und mir hilfreiche tipps zur verfügen stellst. Ich habe wirklich alles gemacht mit dem Debuggen habe sogar den Fehler in Google gesucht jedoch keine entsprechenden Erfolge erzielt. Es kommt immer der gleiche Fehler. Er fügt nicht den User Namen ein der eingeben wird sondern einfach bei user eine 1 in die datenbank.

Error mysqli

Array([0]=>23000, [1]=>1062, [2]=> Duplicate entry '1' for key 'user')
http://lmgtfy.com/?q=Duplicate+entry+'1'+for+key+'user'
 
Zurück
Oben