Bonjour lorsque je test mon système d'inscription j'ai "Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\MyHabboTV\register.php on line 97" qui s'affiche. cela fait déjà 1 jour que je cherche a régler le problème .
Pouvez-vous m'aidez s'il vous plait ?
<?php
include_once('connexion_sql.php');
if (isset($_POST['submit']))
{
$pseudo = htmlspecialchars(trim($_POST['pseudo']));
$pass = sha1(trim($_POST['pass']));
$rpass = sha1(trim($_POST['rpass']));
$email = htmlspecialchars(trim($_POST['email']));
if($pseudo&&$pass&&$rpass&&$email)
{
if(strlen($pseudo)>=2)
{
if(strlen($pass)>=6)
{
if(strlen($pass==$rpass))
{
echo "Inscription terminée, vous pouvez vous <a href='login.php'>connecter</a>!";
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array(
'pseudo' => $pseudo,
'pass' => $pass_hache,
'email' => $email));
}else echo "Les mots de passes ne sont pas identique";
}else echo "Le mot de passe est trop court";
}else echo "Ton pseudo est trop court";
}else echo "Tu as oublié des champs";
}
?>
Bonsoir,
Pour moi ton erreur vient de ta manière de te connecter à la base de données. Utilise plutôt PDO pour cela. Ce qui donne pour ton fichier "connexion_sql.php" :
<?php
$dsn = "mysql:dbname=mabase;host=localhost";
$bdd = new PDO($dsn, 'root', '');
?>
Fais un test de ton coté et tiens nous informés.
Bonne soirée
Essaie avec les ':' dans ton execute
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array(
':pseudo' => $pseudo,
':pass' => $pass_hache,
':email' => $email));
@Intertoxx merci de ta réaction rapide. Alors je viens d'essayer avec les ':' comme dans ton exemple et cela ne change rien, j'ai toujours le même message d'erreur :/
@Lartak merci, je viens de le rajouter. Je l'avais oublié
$pass_hache = sha1($_POST['pass']);
La méthode prepare a retourné false plutot qu'un objet statement
Surement une erreur dans les noms de champs ?
Bonjour je suis débutant mais quelque chose me turlupine dans ton code
if(strlen($pass==$rpass))
{
echo "Inscription terminée, vous pouvez vous <a href='login.php'>connecter</a>!";
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array(
'pseudo' => $pseudo,
'pass' => $pass_hache,
'email' => $email));
}else echo "Les mots de passes ne sont pas identique";
La fonction strlen retourne le nombre de caractères si je ne dis pas de conneries
Alors il ne serais pas mieux de verifier si les mot de passe sont egaux plutot que leurs nombre de caractères ?
if($password === $rpass)
{
echo "Inscription terminée, vous pouvez vous <a href='login.php'>connecter</a>!";
$req = $bdd->prepare('INSERT INTO membres(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array(
'pseudo' => $pseudo,
'pass' => $pass_hache,
'email' => $email));
}else echo "Les mots de passes ne sont pas identique";
Sinon pour ton problème ton champs date_inscription est au quel format ?
je ne pense pas non
Pourtant, je ne vois pas d'espace après le nom de la table dans la requête.
@lartak tu parles d'ici
$req = $bdd->prepare('INSERT INTO membres//ici?// (pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
je précise bien pour ceux qui me suive que le problème viens d'après le message d'erreur de cette ligne :
$req->execute(array(
Non, le execute n'est pas en cause
l'erreur vient du prepare juste avant, les données passées dans le array ne sont pas en cause.
Essayes de coller ta requête dans phpMyadmin (mets des valeurs bidon dans le value)
tu auras un message plus clair.
@Huggy comme tu l'as dit, je viens de modifier les valeur dans le value j'ai mis ":bebe" et le message d'erreur sur ma page ne diffère pas :/
Il ne t'a pas dit de juste modifier sur ton script PHP, mais de faire la requête via PHPMyAdmin dans la console SQL.
$pass == $rpass; #=> true ou false
strlen(true); #=> 1
strlen(false); #=> 0
// au final, ça fonctionne, mais ce n'est clairement pas optimisé
$pass === $rpass; #=> true ou false
Pour ton problème de requête SQL, essaye d'exécuter la query directement sur MySQL, tu verras comme ça l'erreur que tu reçois.
@tpinforet le voici
<!DOCTYPE html>
<meta charset="utf-8">
<?php
$bdd = mysqli_connect('localhost', 'root', '', 'mabase');
if($bdd = mysqli_connect('localhost', 'root', '', 'mabase'))
{
//echo'Vous vous êtes connecté à la base de donné du site';
}
else // Mais si elle rate…
{
echo 'Erreur'; // On affiche un message d'erreur.
}
?>
</html>
@telb non non je t'assure tu m'as vraiment aidé xD mon problème est résolu je t'assure :)
Désolé, je n'ai pas l'habitude de regarder le premier post d'un topic, je n'avais pas vu la réponse qui a tout résolu.
My bad. :)
@tleb en effet la réponse est apparue après que le sujet soit résolu
le principal c'est que ce soit résolu