Php problème no database selected

Résolu/Fermé
Utilisateur anonyme - 9 mai 2015 à 10:19
 Utilisateur anonyme - 9 mai 2015 à 11:36
Bonjour,

Je suis en train de faire un espace membre pour mon site et j'en suis à l'inscription. Seul problème..lorsque je clique sur Inscription, une erreur s'affiche

Erreur SQL !
SELECT count(*) FROM utilisateurs WHERE pseudo="($_POST["prenom"])"
No database selected

Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\wamp\www\tests\autre.php on line 30

Voici le code :

<?php include ("cnx.php"); ?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>

<body>
<h2> Formulaire d'inscription : </h2>

<form action="" method = "POST">
<label for="prenom"> Prenom (4 à 20 caractères !) : </label> </br>
<input type="texte" name = "prenom" /> </br>

<label for="password"> Password : </label> </br>
<input type="password" name = "password" /> </br>

<input type="submit" value ="Inscription" />
</form>

<?php

if(!empty($_POST))
{
if(strlen($_POST["prenom"])>=4 && strlen($_POST["prenom"])<20)
{
// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM utilisateurs WHERE pseudo="($_POST["prenom"])"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

if ($data[0] == 0)
{
$prenom = addslashes($_POST['prenom']) ; //enlève les antislash
$password = sha1($_POST['password']) ; //hachage du mot de passe avec un sel

$q = array ('prenom' => $prenom, 'password' => $password) ;
$sql = 'INSERT INTO utilisateurs (pseudo, password) VALUES (:prenom, :password)' ;
$req = $cnx->prepare($sql);
$req->execute($q);
echo "Vous êtes enregistré";
}
else
{
echo "pseudo déjà utilisé !";
}
}
else
{
echo "Votre pseudo doit être entre 4 et 20 caractères !";
}
}
else
{
echo "Problème pour cette étape !";
}

?>


</body>
</html>


Quelqu'un a-t-il une idée sur l'erreur que j'ai faite ? Merci

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 9/05/2015 à 11:30
'lut
Quelqu'un a-t-il une idée sur l'erreur que j'ai faite ?
Oui: tu utilises deux API de gestion de BDD, dont l'obsolète et dangereuse* (d'où le message d'avertissement) extension MySQL dont il faut à tout prix se débarrasser. Il faut que tu n'utilises que PDO ici, pas les 2.

Remplaces le passage de recherche de login utilisé par ceci:
// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM utilisateurs WHERE pseudo=:prenom';
$req = $cnx->prepare($sql);
$data = $req->execute(array('prenom' => $_POST["prenom"]));

if ($data->fetchColumn() == 0)

*: dangereuse car tu as une injection SQL clairement visible: tu mets directement des données POST dans la requête, et car tu utilises la pire gestion d'erreur qui soit: le
or die
; par design l'extension est mauvaise.
from human import idiocy
del idiocy
0
Utilisateur anonyme
9 mai 2015 à 11:36
Merci pour ta réponse !
0