Problème avec le register.php

Résolu
Zakarya93 Messages postés 1026 Statut Membre -  
Zakarya93 Messages postés 1026 Statut Membre -
Bonjour,

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

4 réponses

  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Car tu as une erreur, regardes le premier cadre, il te parle d'un paramètre manquant à une fonction.
    0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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 ! )

    0
  3. Zakarya93 Messages postés 1026 Statut Membre 10
     
    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>
    0
    1. hharchi9 Messages postés 693 Statut Membre 24
       
      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
      0
    2. Zakarya93 Messages postés 1026 Statut Membre 10
       
      ah, je vois
      0
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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();
    }
    
    

    0
    1. Zakarya93 Messages postés 1026 Statut Membre 10
       
      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
      0
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831 > Zakarya93 Messages postés 1026 Statut Membre
         
        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();
        }
        
        0
    2. Zakarya93 Messages postés 1026 Statut Membre 10
       
      Merci infiniment pour votre patience et compréhension ! :)
      0