Mysql
 sql >> Base de données >  >> RDS >> Mysql

Je n'arrive pas à empêcher les entrées de nom en double

Il y a pas mal de choses qui ne vont pas ici.

Vous utilisez une list de mots-clés MySQL en tant que fonction, et cela seul vous causera des problèmes.

Sidenote :Oui, je sais que ce n'est pas un mot "réservé", c'est un "mot clé" et MySQL traite les mots clés spécialement s'ils sont utilisés comme une fonction, ce que vous faites maintenant dans votre deuxième requête , et est la façon dont MySQL l'interprète comme ; une fonction plutôt qu'un nom de déclaration de table.

Je vous suggère de renommer ce tableau en listes ou de l'envelopper de ticks.

Vous mélangez également des API/fonctions MySQL qui ne se mélangent pas.

Ainsi, votre nouveau code se lirait comme suit,
tout en supprimant $selected = mysql_connect('christmas', $dbhandle);

$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);

Votre code est également ouvert à une injection SQL. Utilisez une déclaration préparée.

Maintenant, nous n'avons aucune idée d'où viennent toutes vos variables.

Utilisez le rapport d'erreurs.

Je vous suggère également d'utiliser un conditionnel empty() pour vos variables/entrées.

Sinon, vous pouvez également obtenir d'autres erreurs dont MySQL peut se plaindre.

C'est-à-dire :

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

En fin de compte et pour vous assurer qu'il n'y a pas d'entrées en double dans votre base de données, vous pouvez définir une contrainte UNIQUE.