Problème PHP - Crée un espace membre

Ce topic a été résolu
MeDrioX

MeDrioX Le 12 avril 2017 à 09:49 (Édité le 25 janvier 2019 à 17:53)

Bonjour,

J'ai voulu crée un espace membre mais je tombe sur des erreurs php.

Erreur

Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::rowCount() in
/inscription.php:42
Stack trace:
#0 {main}
thrown in /inscription.php on line 42


Ligne de code:

if(isset($_POST['form']))
{
    if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
    {
        $pseudo = htmlspecialchars($_POST['pseudo']);
        $mail = htmlspecialchars($_POST['mail']);
        $mail2 = htmlspecialchars($_POST['mail2']);
        $mdp = sha1($_POST['mdp']);
        $mdp2 = sha1($_POST['mdp2']);

        $pseudolenght = strlen($pseudo);
        if($pseudolenght <= 255)
        {
            
            if($mail == $mail2)
            {
                if(filter_var($mail, FILTER_VALIDATE_EMAIL))
                {
                    $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
                    $reqmail->execute(array($mail));
                    #$mailexist = $reqmail->mysqli_num_rows();

                    $reqpseudo = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ?"); 
                    $reqpseudo->execute($pseudo); 
                    $pseudoexist = $reqpseudo->rowCount();
                    
                    if($mailexist == 0)
                    {
                        if($pseudoexist == 0)
                        {
                            if($mdp == $mdp2)
                            {
                                $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?");
                                $insertmbr->execute(array('pseudo' => $pseudo, 'mail' =>$mail, 'mdp' => $mdp));
                                $erreur = "Inscription terminé !";
                            }else{
                                $erreur = "Vos mot de passe correspondent pas !";
                            }
                        }else{
                            $erreur = "Ce pseudo est déjà utilisé !";
                        }
                    }else{
                            $erreur = "Cette adresse email est déjà utilisé !";
                    }
                }else{
                    $erreur = "Vos adresse email ne correspondent pas !";
                }
            }else{
                $erreur = "Votre adresse email n'est pas valide !";
            }
        }else{
            $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
        }

    }else{
        $erreur = "Tous les champs doivent être complétés !";
    }
}

?>

Merci à ceux qui vont m'aider 😀
TBMaster59

TBMaster59 Le 12 avril 2017 à 10:39

Bonjour/Bonsoir

Je crois avoir trouvé ton erreur
$insertmbr->execute(array('pseudo' => $pseudo, 'mail' =>$mail, 'mdp' => $mdp));
Je crois qu'il ne faut pas mettre 'pseudo' =>. Voici le code corigé
$insertmbr->execute(array($pseudo, $mail, $mdp));
MeDrioX

MeDrioX Le 12 avril 2017 à 10:46

Bonjour

J'ai une nouvelle erreur :


Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::rowCount() in
/inscription.php:41
Stack trace:
#0 {main}
thrown in /inscription.php on line 41
TBMaster59

TBMaster59 Le 12 avril 2017 à 10:52

J'ai encore trouvé je me disais bien que cette ligne était suspecte :
#$mailexist = $reqmail->mysqli_num_rows();
Voici la ligne Corrigé
$mailexist = $reqmail->rowCount();
MeDrioX

MeDrioX Le 12 avril 2017 à 10:54

Mais moi c'est la ligne 41 ^^
$pseudoexist = $reqpseudo->rowCount();
TBMaster59

TBMaster59 Le 12 avril 2017 à 11:08

Voilà enfin
$reqpseudo->execute($pseudo); 
C'est
$reqpseudo->execute(array($pseudo)); 
MeDrioX

MeDrioX Le 12 avril 2017 à 11:14

Encore 😭
Fatal error:  Uncaught Error: Call to undefined method mysqli_stmt::rowCount() in 
/inscription.php:37
Stack trace:
#0 {main}
  thrown in /inscription.php on line 37
TBMaster59

TBMaster59 Le 12 avril 2017 à 11:18

Bas je t'es dit :
#$mailexist = $reqmail->mysqli_num_rows();
Voici la ligne Corrigé
$mailexist = $reqmail->rowCount();
MeDrioX

MeDrioX Le 12 avril 2017 à 11:24

Oui mais sa change rien toujours l'erreur :(
TBMaster59

TBMaster59 Le 12 avril 2017 à 11:27

Bas je sais pas ducoup
MeDrioX

MeDrioX Le 12 avril 2017 à 11:30

Je doit etre connecté en PDO ?
MeDrioX

MeDrioX Le 12 avril 2017 à 12:06

MeDrioX

MeDrioX Le 12 avril 2017 à 12:58

J'ai une erreur ici

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in
/inscription.php:15
Stack trace: #0
/inscription.php(15):
PDO->__construct('mysql:hosts=db6...', 'BDD', 'password') #1 {main}
thrown in
/inscription.php
on line 15
arthurlautard

arthurlautard Le 12 avril 2017 à 13:42

essaye avec
````
if(isset($_POST['form']))
    {
        if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
            {
                $pseudo = htmlspecialchars($_POST['pseudo']);
                $mail = htmlspecialchars($_POST['mail']);
                $mail2 = htmlspecialchars($_POST['mail2']);
                $mdp = sha1($_POST['mdp']);
                $mdp2 = sha1($_POST['mdp2']);

                $pseudolenght = strlen($pseudo);
                if($pseudolenght <= 255)
                    {
                        if($mail == $mail2)
                            {
                                $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
                                $reqmail->execute(array($mail));
                                $mailexist = $reqmail->rowCount();
                                if($mailexist == 0)
                                    {
                                        if($mdp == $mdp2)
                                            {

                                                $insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, mdp) VALUES(?, ?, ?)");
                                                $insertmbr->execute(array($pseudo, $mail, $mdp));
                                                $erreur = "Votre compte à bienété créer!";
                                                header('Location: connexion.php');

                                            }else
                                                {
                                                    $erreur = "Vos mot de passe ne corresponent pas!";
                                                }

                                    }else
                                        {
                                            $erreur = "Adresse mail déjà utilisée!";
                                        }

                            }else
                                {
                                    $erreur = "Vos mails ne correspondent pas!";
                                }

                    
                    }else
                        {
                            $erreur = "Votre pseudo ne dois pas éxeder les 255 caractères!";
                        }

            }else
                {
                    $erreur = 'Tous les chants doivent êtres remplis!!!';
                }

    }

?>
```
Balatharas

Balatharas Le 12 avril 2017 à 14:36 (Édité le 12 avril 2017 à 21:35)

J'ai une erreur ici 

Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] No such file or directory in 
/inscription.php:15 
Stack trace: #0 
/inscription.php(15): 
PDO->__construct('mysql:hosts=db6...', 'BDD', 'password') #1 {main} 
thrown in 
/inscription.php 
on line 15
Selon cette erreur, tu appelles un fichier à ta ligne 15, mais le serveur n'arrive pas à le trouver: "No such file or directory"
Faut lire tes erreurs un peu...
Zbuu

Zbuu Le 12 avril 2017 à 15:24

Il semble y avoir une erreur dans le dsn de ta connexion avec pdo 
'mysql:hosts=db6...', 'BDD', 'password'
C'est host sans S
MeDrioX

MeDrioX Le 12 avril 2017 à 21:18

@Zbuu Je ne sait pas comment te remercier ! mais 10000 MERCI !!!
MeDrioX

MeDrioX Le 12 avril 2017 à 21:29

Je rajoute un problème sa insert pas :(
Zbuu

Zbuu Le 12 avril 2017 à 23:07 (Édité le 12 avril 2017 à 23:08)

Tu as des erreurs ? 

Ton code est toujours le même que ton premier post ? Si c'est le cas c'est normal car tu passes des marqueurs dans ta requête mais tu l’exécute mal. (en plus il te manque une parenthèse fermante) 

Avec marqueur ton code devrait être plutôt comme ça : 
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp));
Ou alors si tu veux passer des valeurs nommés alors c'est : 
$insertmbr = $bdd->prepare("INSERT INTO membres(pseudo, mail, motdepasse) VALUES(:pseudo, :mail, :motdepasse)");
$insertmbr->execute(array('pseudo' => $pseudo, 'mail' => $mail, 'motdepasse' => $mdp));
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte