web-dev-qa-db-fra.com

Essayer de vérifier si le nom d'utilisateur existe déjà dans la base de données MySQL en utilisant PHP

J'ai examiné les nombreux autres articles qui étaient similaires à mon numéro et mis en œuvre leurs solutions (autant que je sache) aussi exactement que possible. Cependant, chaque fois que j'exécute ce script, le code du bloc else est exécuté (même lorsque le nom d'utilisateur entré est déjà présent).

Le nom de la table est "Utilisateurs" et la colonne que je cherche est "nom d'utilisateur" . L'entrée de mon formulaire a été lue dans $username et j'ai vérifié qu'elle était lue correctement à l'aide de echo . $con contient la connexion au serveur.

À un moment donné, j'ai également mis dans echo $query (rien n'était imprimé) et echo mysql_num_rows($query) (rien n'était imprimé).

Voici le segment pertinent du code. J'apprécierais vraiment quelques conseils.

$query = mysql_query("SELECT username FROM Users WHERE username=$username", $con);

  if (mysql_num_rows($query) != 0)
  {
      echo "Username already exists";
  }

  else
  {
    ...
  }

EDIT: Apparemment, j'étais censé utiliser mysqli pour mon serveur et la façon dont j'ai vérifié num_rows était de faire $ query-> num_rows puisqu'il s'agissait d'une propriété de l'objet. Merci pour votre aide!

9
covfefe

changez votre requête pour aimer.

$username = mysql_real_escape_string($username); // escape string before passing it to query.
$query = mysql_query("SELECT username FROM Users WHERE username='".$username."'");

Cependant, MySQL est obsolète. Vous devriez plutôt utiliser MySQLi ou PDO

10
Renish Khunt

Essaye ça:

$query = mysql_query("SELECT username FROM Users WHERE username='$username' ")

N'ajoutez pas $con à la fonction mysql_query().

Avertissement: l'utilisation de la variable username dans la chaîne passée à mysql_query, comme indiqué ci-dessus, est un vecteur d'attaque par injection SQL trivial dans la mesure où username dépend des paramètres de la requête Web (chaîne de requête, en-têtes, corps de la requête, etc.) ou autre. paramètres qu'une entité malveillante peut contrôler.

3
Oki Erie Rinaldi

$ query = mysql_query ("SELECT nom d'utilisateur DES utilisateurs WHERE nom d'utilisateur = '$ username'")

Utilisez des instructions préparées , n'utilisez pas mysql car il est obsolète.

// check if name is taken already
$stmt = $link->prepare("SELECT username FROM users WHERE username = :username");
$stmt->execute([
    'username' => $username
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (isset($user) && !empty($user)){
    // Username already taken
}
1
Jack Nicholson