Problème avec le register.php

Résolu
Bonjour,

Pourquoi lorsque je m'inscris sur mon site j'ai tout ça ? :

4 réponses

  1. Modérateur
    Car tu as une erreur, regardes le premier cadre, il te parle d'un paramètre manquant à une fonction.
    1. Modérateur
      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 ! )

      1. 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>
        1. Bonsoir,

          Ta fonction inscrire_utilisateur attend un autre paramètre $avatar que tu ne lui fournis pas lors de l'appel, dans le fichier register.php
        2. ah, je vois
      2. Modérateur
        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();
        }
        
        

        1. 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
        2. Modérateur
          @Zakarya93je 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();
          }
          
        3. Merci infiniment pour votre patience et compréhension ! :)