Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ich kann doppelte Namenseingaben nicht verhindern

Hier stimmt einiges nicht.

Sie verwenden ein MySQL-Schlüsselwort list als Funktion, und das allein wird Ihnen Probleme bereiten.

Nebenbemerkung:Ja, ich weiß, es ist kein "reserviertes" Wort, es ist ein "Schlüsselwort", und MySQL behandelt Schlüsselwörter speziell, wenn sie als Funktion verwendet werden, was Sie jetzt in Ihrer zweiten Abfrage tun , und so interpretiert MySQL es als; eher eine Funktion als ein Tabellendeklarationsname.

Ich schlage vor, Sie benennen diese Tabelle in Listen um oder umschließen sie mit Häkchen.

Sie mischen auch MySQL-APIs/Funktionen, die sich nicht mischen.

Ihr neuer Code würde also so lauten,
während $selected = mysql_connect('christmas', $dbhandle); gelöscht wird

$query = mysqli_query($dbhandle, "SELECT * FROM `list` WHERE name='$name'") 
        or die (mysqli_error($dbhandle));

if(mysqli_num_rows($query) > 0){
    echo 'that name already exists';
}else{
    mysqli_query($dbhandle, "INSERT INTO `list` (name, one, two, three, four, five, six, seven, eight) 
                VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')") 
                 or die (mysqli_error($dbhandle));

}


mysqli_close($dbhandle);

Ihr Code ist auch offen für eine SQL-Injection. Verwenden Sie eine vorbereitete Anweisung.

Jetzt haben wir keine Ahnung, woher all Ihre Variablen kommen.

Verwenden Sie die Fehlerberichterstattung.

Ich schlage auch vor, dass Sie ein bedingtes empty() verwenden für Ihre Variablen/Eingaben.

Andernfalls erhalten Sie möglicherweise auch andere Fehler, über die sich MySQL möglicherweise beschwert.

D.h.:

if(!empty($var)){...}

Letztendlich und um sicherzustellen, dass es keine doppelten Einträge in Ihrer Datenbank gibt, können Sie eine UNIQUE-Einschränkung festlegen.