Fatal error:Call to undefined function clear_input

Bonjour,

J'ai l'erreur : Fatal error: Call to undefined function clear_input_data() in C:\wamp\www\rs\pages\register.php on line 159

Voici mon 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
{
               
        $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";
    }
     
    if (empty($password))
    {
      $errors[] ="Veuillez saisir un password";
    }
     
    if($password != $repeatpassword)
    {
     $errors[] = "Vos deux password doivent être identiques";
    }
     
    if(!filter_var($email,FILTER_VALIDATE_EMAIL))
    {
     $errors[] = "Votre adresse email n'est pas correcte";    
    }
     
    if(empty($apropos))
    {
     $errors[] = "Veuillez vous décrire en quelques lignes";    
    }
     
    if(pseudo_existe($email) == 1)
    {
     $errors[] = "Ce pseudo n'est pas disponible";
    }
     
    if(email_existe($email) == 1)
    {
     $errors[] = "Cette adresse email existe déjà <br> avez vous oublié votre <a href='#'>password? </a>";
    }
     
    if(!empty($errors))
    {
     foreach($errors as $error)
     {
      echo "<div class='error'>".$error."</div>";
     }
      }
       inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
                        die('Inscription terminée, vous pouvez vous <a href=\'index.php?page=login\'>connecter</a>');
}
?>
 
 
<?php
 
require('functions/connect.php');
require_once('functions/register.func.php');
 
  
 //si le formulaire a été soumis
 if(isset($_POST['register'])) {
 
  // si tous les champs sont remplis
  if(not_empty(['name', 'pseudo', 'email', 'password', 'password_confirm'])) {
 
   $errors = []; //tableau contenant l'ensemble des erreurs
 
   extract($_POST);
 
   
 
   //si le pseudo est deja dans la bdd
   if(is_already_in_use('pseudo', $pseudo, 'users')) {
    $errors[] = "Le pseudonyme est déja utilisé.";
   }
 
   //si l'adresse mail est deja dans la bdd
   if(is_already_in_use('email', $email, 'users')) {
    $errors[] = "L'adresse e-mail est déja utilisée.";
   }
 
 
   //si il y a 0 erreur
   if(count($errors) == 0) {
 
     
        //enregistrement du membre dans la base de données
        $q = $db->prepare('INSERT INTO users(name, pseudo, email, password)
                  VALUES(:name, :pseudo, :email, :password)');
        $q->execute([
 
         'name' => $name,
         'pseudo' => $pseudo,
         'email' => $email,
         'password' => ($password)
 
        ]);
 
        redirect('index.php');
 
   } else {
    save_input_data();
   }
 
  } else {
 
   //si tous les champs ne sont pas remplis
   $errors[] = "Veuillez remplir s'il vous plaît tous les champs";
   save_input_data();
 
 
  }
 
 } else {
  clear_input_data();
 }
 
 
?>
 
 
<?php require('views/register.views.php'); ?>


Une solution ? Merci d'avance :)

6 réponses

  1. Poste les scripts functions/connect.php et functions/register.func.php
    1. Merci de ton aide !!

      connect.php :

      <?php
      try 
      {
        $bdd = new PDO ('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '');
      }
      catch(Exception $e) 
      {
        die('Erreur : '.$e->getMessage());
      }


      Register.func.php :

      <?php
      try 
      {
        $bdd = new PDO ('mysql:host=localhost;dbname=rs;charset=utf8', 'root', '');
      }
      catch(Exception $e) 
      {
        die('Erreur : '.$e->getMessage());
      }
      
      function inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos)
      {
        Global $bdd;
        
        $password=sha1($password);
        $sql = "INSERT INTO utilisateurs(pseudo,password,email,sexe,apropos)
                VALUES (:pseudo,:password,:email,:sexe,:apropos)";
        $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->execute();
      }
      
      
      
      //vérifie que les données ne sont pas en double dans la base de données
      if(!function_exists('is_already_in_use')) {
       function is_already_in_use($field, $value, $table) {
        global $db;
      
        $q = $db->prepare("SELECT id FROM $table WHERE $field = ?");
        $q->execute([$value]);
      
        $count = $q->rowCount();
      
        $q->closeCursor();
      
        return $count;
       }
      }
  2. Salut,

    Dans le code que tu as fournis la fonction en question n'est pas déclarée. Je suppose qu'elle est censé être dans un des fichiers inclus? Vérifie que les bons fichiers sont bien utilisés, que le nom de la fonction est exactement celui déclaré, tu peux essayé de copier coller la fonction dans le code directement pour voir si elle bien prise en compte.
    1. Je ne trouve pas, j'ai pris ce code de ligne 98 à la fin bêtement car on me l'a donné dans ce topic en espèrant me bloquer les doublons de pseudos : www.commentcamarche.net/forum/affich-31905072-function-pseudo-existe-pseudo
  3. J'avoue ne pas avoir regardé le déroulement exact du script je me suis limité aux erreurs que tu m'as décrit.
    1. Ah, as tu une solution pour le problème du dessus ?
  4. Ok c'est normal que tu es ce message d'erreur la fonction clear_input_data() n'est pas déclarée ni dans le script principal ni dans ceux inclus, il va falloir la rédiger !
    1. Lorsque je supprime le script que j'ai copié collé ligne 98 jusque fin (premier script) je n'ai aucune erreur cependant php ne detecte pas les doublons
    2. Je recois cette erreur : Fatal error: Call to undefined function pseudo_existe() in C:\wamp\www\rs\pages\register.php on line 75

      Register.php sans le c/c :
      <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
      {
                    
      		$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";
          }
          
          if (empty($password))
          {
            $errors[] ="Veuillez saisir un password";
          }
          
          if($password != $repeatpassword)
          {
           $errors[] = "Vos deux password doivent être identiques";
          }
          
          if(!filter_var($email,FILTER_VALIDATE_EMAIL))
          {
           $errors[] = "Votre adresse email n'est pas correcte";     
          }
          
          if(empty($apropos))
          {
           $errors[] = "Veuillez vous décrire en quelques lignes"; 	 
          }
      	
      	if(pseudo_existe($email) == 1)
      	{
      	 $errors[] = "Ce pseudo n'est pas disponible";
          }
      	
      	if(email_existe($email) == 1)
      	{
      	 $errors[] = "Cette adresse email existe déjà <br> avez vous oublié votre <a href='#'>password? </a>";
      	}
      	
          if(!empty($errors))
          {
           foreach($errors as $error)
           {
            echo "<div class='error'>".$error."</div>";
           }
            } 
      	   inscrire_utilisateur($pseudo,$password,$email,$sexe,$apropos);
                              die('Inscription terminée, vous pouvez vous <a href=\'index.php?page=login\'>connecter</a>');
      }
      ?>
  5. En effet je ne vois pas non plus la fonction pseudo_existe, pourtant en parcourant l'ancien poste que tu as fais sur le site j'ai pu voir un script ou tu l'avais apparemment déclarée, l'as tu supprimé entre temps?
    1. Tu parles de ceci ?
      //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)
      {
       
      }
       
      //sinon
      else
      {
          echo('Le pseudo que vous avez choisi est déjà prit');
      }
      }
    2. Oui c'est un début de fonction pseudo_existe
    3. Je le mets dans register.func.php n'est ce pas ? (encore merci d'être aussi actif)
    4. Malgré ça j'ai : Fatal error: Call to undefined function email_existe() in C:\wamp\www\rs\pages\register.php on line 80
    5. Oui tu peux mais tu devrais l'améliorer un petit peu car je ne vois pas de return dans ta fonction, mais dans ta condition tu considères un retour :
      if(pseudo_existe($email) == 1)

      Soit tu fais qqch comme ça
      if($etat == 0){
      return 0;
      }else{
      return 1;
      //echo('Le pseudo que vous avez choisi est déjà prit');
      }

      Ce qui en revient à utiliser un booléen plutôt que le résultat du count qui en lui même n'est pas forcément utile dans cette fonction.
      Regardes si le pseudo est présent tu renvois vrai ou faux.