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
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();
}
?>
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é)
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
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
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 :