Problème enregistrement de données dans une base de données .

Par PapySweek, il y a 10 ans


Bonjour,

J'ai une problème pour enregister des données dans ma base de données. <br/>
J'ai entrer mon code puis ma page m'indique une erreur a ces deux lignes:

$req = $db->query("SELECT username FROM users WHERE username = '$username'"); $count = $req->rowCount();

Je n'arrive pas à régler l'erreur pouvez vous m'aider. S'il vous plait.<br/>
<br/>
Merci

9 réponses

PapySweek, il y a 10 ans

Je vais regarder ça quenti77 merci.

Sparkosis, il y a 10 ans

Salut salut, peux tu envoyer le message d'erreur ? (je te déconseille de mettre une variable en brut dans ta requête pour des raisons de sécurité)

PapySweek, il y a 10 ans

Les messages sont :<br/>
Warning: PDO::query(): SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in /home/u922207586/public_html/register.php on line 14

Fatal error: Call to a member function rowCount() on a non-object in /home/u922207586/public_html/register.php on line 15

Sparkosis, il y a 10 ans

As tu effectué ta connexion PDO ?

PapySweek, il y a 10 ans

Non mais je ne me connais pas trop en php voila le code :

<?php require 'db/db.php'; if(isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password']) && isset($_POST['password_comfirm'])){ $username = addslashes(htmlspecialchars(htmlentities(trim($_POST['username'])))); $email = addslashes(htmlspecialchars(htmlentities(trim($_POST['email'])))); $password = sha1($_POST['password']); $password_comfirm = sha1($_POST['password_comfirm']); if(strlen($username) > 8){ if(strlen($email) < 255){ if(preg_match("#^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)){ if($password == $password_comfirm){ $req = $db->query("SELECT username FROM users WHERE username = '$username'"); $count = $req->rowCount(); if($count == 0){ $req = $db->query("SELECT email FROM users WHERE email = '$email'"); $count = $req->rowCount(); if($count == 0){ $req = array( 'username' => $username, 'password' => $password, 'email' => $email ); $req = $db->query("INSERT INTO users(username, password, email) VALUES('$username', '$password', '$email')"); $req->execute(); }else{ $message = 'Cet addresse email est déjà utilisé.'; } }else{ $message = 'Le pseudo $username est déjà utilisé.'; } }else{ $message = 'Les deux mot de passe ne sont pas identique.'; } }else{ $message = 'Votre addresse email n\'est pas valide.'; } }else{ $message = 'Votre addresse email doit contenir moin de 255 caractères.'; } }else{ $message = 'Votre pseudo doit faire plus de 8 caractères.'; } }else{ $message = 'Veillez remplir tout les champs.'; } require 'header.php'; ?>

Oû je dois faire la connection PDO ?
Merci

Sparkosis, il y a 10 ans

Voilà ton problème (on est tous passer par une phase d'apprentissage) ton soucis est que tu effectue une requete mais sans la connexion a ta BDD php ne parviens donc pas a se connecter, pour se faire: dans db.php tu devrais avoir quelque chose du genre:

<?php $dsn = 'mysql:dbname=TA_BASE_DE_DONNEES;host=127.0.0.1'; $user = 'root'; $password = ''; try { $db = new PDO($dsn, $user, $password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { echo 'Échec lors de la connexion : ' . $e->getMessage(); } ?>
PapySweek, il y a 10 ans

Merci tu a réglé mon problème :)

Sparkosis, il y a 10 ans

Pas de problème ;)

quenti77, il y a 10 ans

Par contre un petit conseil. Il faudrait juste revoir la gestion de tes erreurs car des if imbriqué comme ça c'est moins lisible et en plus ça donne ce genre de cas pour un utilisateur :
Troll carotte image