Problème avec le register.php
Résolu
Zakarya93
Messages postés
1026
Statut
Membre
-
Zakarya93 Messages postés 1026 Statut Membre -
Zakarya93 Messages postés 1026 Statut Membre -
4 réponses
-
Car tu as une erreur, regardes le premier cadre, il te parle d'un paramètre manquant à une fonction.
-
Bonjour Zakarya93,
Comme pour chacune de tes questions .......merci de nous fournir le code qui te pose problème !
Sans ça .. impossible de t'aider !
Il nous faut :
- Le code de ta page REGISTER
- Le code de ta page register.func.php
Sachant déjà que tu pourrais traiter les soucis de UNDEFINED de tes variables en utilisant, comme je te l'ai déjà précisé.... la fonction ISSET ( + l'écriture TERNAIRE ) pour récupérer le contenu de tes variables...
Par exemple :$toto = isset($_POST['unevariable']) ? $_POST['unevariable'] : NULL;
Ce qui revient à la même chose que si tu avais écrit :if(isset($_POST['unevariable']) ){ $toto = $_POST['unevariable']; }else{ $toto = NULL; }
==>> Ce type de code est à utiliser pour toutes les variables de type POST / GET / SESSION / COOKIE et ARRAY.
Cela évite les WARNING que tu as !
Pour les autres erreurs ( la première et la dernière de ton image....) là... il nous faut ton code.
(sachant que comme le dit Nhenry... la première est liée à une erreur dans le nombre d'arguments que tu utilises pour appeller ta fonction ! )
-
Register.func.php :
<?php function inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos,$avatar) { Global $bdd; $password=sha1($password); $sql = "INSERT INTO utilisateurs(pseudo,password,email,sexe,apropos,avatar) VALUES (:pseudo,:password,:email,:sexe,:apropos,'defaut.jpg')"; $result = $bdd->prepare($sql); $result->bindValue('pseudo', $pseudo, PDO::PARAM_STR); $result->bindValue('password', $password, PDO::PARAM_STR); $result->bindValue('email', $email, PDO::PARAM_STR); $result->bindValue('sexe', $sexe, PDO::PARAM_STR); $result->bindValue('apropos', $apropos, PDO::PARAM_STR); $result->bindValue('avatar', defaut.jpg, PDO::PARAM_STR); $result->execute(); } //la function qui va vérifier si pseudo existe($pseudo) function pseudo_existe($pseudo) { $bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', ''); //donc la, la verification: $req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE pseudo="'.$pseudo.'"'); $etat = $req->fetchColumn(); if($etat == 0){ return 0; }else{ return 1; //echo('Le pseudo que vous avez choisi est déjà prit'); } } //la function qui va vérifier si l'email existe($email) function email_existe($email) { $bdd = new PDO('mysql:host=localhost;dbname=rs;charset=utf8', 'root', ''); //donc la, la verification: $req = $bdd->query('SELECT COUNT(*) FROM utilisateurs WHERE email="'.$email.'"'); $etat = $req->fetchColumn(); if($etat == 0){ return 0; }else{ return 1; } } ?>
Register.php :
<h1>Inscription</h1> <?php if (!isset($_POST['submit'])) { ?> <form method="POST" action=""> <label for='sexe'>Sexe</label> <select name="sexe"> <?php echo isset($sexe)?'<option value='.$sexe.'>'.$sexe.'</option>':""; ?> <?php echo $sexe != 'Homme' ?'<option value="Homme">Homme</option>':""; ?> <?php echo $sexe != 'Femme' ?'<option value="Femme">Femme</option>':""; ?> </select><br /><br/> <label for="pseudo">Votre pseudo : </label> <input type="text" name ="pseudo" value='<?php echo isset($pseudo) ? $pseudo :""; ?>'><br /> <label for="password">Votre password : </label> <input type="password" name ="password"><br /> <label for="repeatpassword">Repetez votre password : </label> <input type="password" name ="repeatpassword"><br /> <label for="email">Veuillez saisir votre email : </label> <input type="text" name ="email" value='<?php echo isset($email) ? $email :""; ?>'><br /> <label for="apropos">A propos de vous </label> <textarea rows="6" cols="30" name="apropos"><?php echo isset($apropos) ? $apropos : ""; ?></textarea><br /><br /> <input type="submit" value="S'inscrire" name="submit"> </form> <?php } else { $test=0; $sexe = htmlspecialchars(strip_tags($_POST['sexe'])); $pseudo = htmlspecialchars(strip_tags($_POST['pseudo'])); $password = htmlspecialchars(strip_tags($_POST['password'])); $repeatpassword = htmlspecialchars(strip_tags($_POST['repeatpassword'])); $email = htmlspecialchars(strip_tags($_POST['email'])); $apropos = htmlspecialchars(strip_tags($_POST['apropos'])); if(empty($pseudo)) { $errors[] ="Veuillez saisir un pseudo"; $test=1; } if (empty($password)) { $errors[] ="Veuillez saisir un password"; $test=1; } if($password != $repeatpassword) { $errors[] = "Vos deux password doivent être identiques"; $test=1; } if(!filter_var($email,FILTER_VALIDATE_EMAIL)) { $errors[] = "Votre adresse email n'est pas correcte"; $test=1; } if(empty($apropos)) { $errors[] = "Veuillez vous décrire en quelques lignes"; $test=1; } if(pseudo_existe($pseudo) == 1) { $errors[] = "Ce pseudo n'est pas disponible"; $test=1; } if(email_existe($email) == 1) { $errors[] = "Cette adresse email existe déjà <br> avez vous oublié votre <a href='#'>password ?</a>"; $test=1; } if(!empty($errors)) { foreach($errors as $error) { echo "<div class='error'>".$error."</div>"; } } if ($test !== 1) { inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos); die('Inscription terminée, vous pouvez vous <a href=\'index.php?page=login\'>connecter</a>'); } } ?> <a href="http://localhost/rs/index.php?page=login" >Retourner à la page de connexion </a> -
Sans oublier que tu as oublié des QUOTES autour du nom de ton image...
Tu pourrais aussi donner une valeur par défaut au paramètre $avatar ... comme ça .. si tu ne mets pas ce paramètre dans l'appel à la fonction.. tu n'auras pas d'erreur.
ce qui donne :function inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos,$avatar="defaut.jpg"){ Global $bdd; $password=sha1($password); $sql = "INSERT INTO utilisateurs(pseudo,password,email,sexe,apropos,avatar) VALUES (:pseudo,:password,:email,:sexe,:apropos,'defaut.jpg')"; $result = $bdd->prepare($sql); $result->bindValue('pseudo', $pseudo, PDO::PARAM_STR); $result->bindValue('password', $password, PDO::PARAM_STR); $result->bindValue('email', $email, PDO::PARAM_STR); $result->bindValue('sexe', $sexe, PDO::PARAM_STR); $result->bindValue('apropos', $apropos, PDO::PARAM_STR); $result->bindValue('avatar', $avatar, PDO::PARAM_STR); $result->execute(); }
-
Encore merci pour votre aide qui m'est chere ! j'ai cette erreur : Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\rs\functions\register.func.php on line 16
avec cette correction appliquée- je n'avais pas vu que tu avais AUSSI mis le nom de l'image par défaut directement dans la requête...
y'a vraiment intérêt à tout relire avec toi ... tu arrives à buguer un programme à 50 endroits différents en même temps ... :-)
voilà :function inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos,$avatar="defaut.jpg"){ Global $bdd; $password=sha1($password); $sql = "INSERT INTO utilisateurs(pseudo,password,email,sexe,apropos,avatar) VALUES (:pseudo,:password,:email,:sexe,:apropos,:avatar)"; $result = $bdd->prepare($sql); $result->bindValue('pseudo', $pseudo, PDO::PARAM_STR); $result->bindValue('password', $password, PDO::PARAM_STR); $result->bindValue('email', $email, PDO::PARAM_STR); $result->bindValue('sexe', $sexe, PDO::PARAM_STR); $result->bindValue('apropos', $apropos, PDO::PARAM_STR); $result->bindValue('avatar', $avatar, PDO::PARAM_STR); $result->execute(); }
-
-
