INSERT INTO

Résolu
Bonjour
J'ai fait quelque chose de très banal et ça ne fonctionne pas, ça me retourne aucune erreur et aucune entrée dans ma BDD.
Je veux simplement insérer des données dans ma BDD.
Mon formulaire se trouve dans le fichier inclue add_user.php
Ma connexion à ma BDD est bonne.
Pouvez-vous me donner votre avis sur ce qui cloche, en vous remerciant par avance.
<?php
$action = (isset($_GET['action']) ? $_GET['action'] : NULL);

	if($action == 'add') {
		if(isset($_POST['register'])) {
			$nom = Security::clean($_POST['nom']);
			$prenom = Security::clean($_POST['prenom']);
			$email = Security::clean($_POST['email']);

			
			$sql = 'INSERT INTO tb_adherent
			SET nom=:nom, prenom=:prenom, email=:email';
			
			$req = $bdd->prepare($sql);
		
			$req->bindParam('nom', $nom, PDO::PARAM_STR);
			$req->bindParam('prenom', $prenom, PDO::PARAM_STR);
			$req->bindParam('email', $email, PDO::PARAM_STR);

			
			$donnees = $req->execute();
			
			if($donnees == TRUE) {
				echo 'OK';
			}
		}
	require_once 'add_user.php';		
	}
?>

14 réponses

  1. Modérateur
    Bonjour,

    Je pense qu'il te manque les ":" devant tes variables dans ton BIND...
    
    			$req->bindParam(':nom', $nom, PDO::PARAM_STR);
    			$req->bindParam(':prenom', $prenom, PDO::PARAM_STR);
    			$req->bindParam(':email', $email, PDO::PARAM_STR);
    

    1. Bonjour
      Merci de ton aide, mais malheureusement ça ne fonctionne toujours pas, il y a quelque chose mais quoi je ne vois toujours pas.
      Si tu peux encore y jeter un oeil.
      Merci
      1. Modérateur
        Sans ta BDD .. et le reste de ton site.. comment veux tu que je teste ???

        A la limite.. il faut essayer de debuguer en ajoutant des ECHO ...

        En plus... tu utilises à la fois du POST et du GET ???

        Essayes ceci
        ( j'ai changé ton IF par un SWITCH .. c'est plus propre...)

        $action   =  isset($_POST['action']) ? $_POST['action'] : NULL;
        $register = isset($_POST['register'])?$_POST['register']:NULL;
        
        // Le temps des tests ...
        echo "<br> Variables GET :";
        print_r ($_GET);
        
        echo "<br> Variables POST :";
        print_r ($_POST);
        
        switch($action){
          case 'add':
              if($register) {
        			$nom = Security::clean($_POST['nom']);
        			$prenom = Security::clean($_POST['prenom']);
        			$email = Security::clean($_POST['email']);
        
        			
        			$sql = 'INSERT INTO tb_adherent
        			SET nom=:nom, prenom=:prenom, email=:email';
        			
        			$req = $bdd->prepare($sql);
        		
        			$req->bindParam('nom', $nom, PDO::PARAM_STR);
        			$req->bindParam('prenom', $prenom, PDO::PARAM_STR);
        			$req->bindParam('email', $email, PDO::PARAM_STR);
        
        			
        			$donnees = $req->execute();
        			
        			if($donnees == TRUE) {
        				echo 'OK';
        			}
        	} else{
                      echo "<br> Error ! register =".$register ;
                }
        	require_once 'add_user.php';		
             break;
           default:
             echo "<br> Error ! Action =".$action;
           break;
        }
        
        
        1. En fait après avoir testé ça me retourne

          Variables GET :Array ( [body] => user [type] => admin )
          Variables POST :Array ( )
          Error ! Action =

          Ma base de donnée j'ai 4 champs
          id
          nom
          prenom
          email

          j'en suis au début le reste c'est que du design, j'ai simplement créé un lien pour afficher le formulaire
          <div id="content">
          	
          	<form id="formulaire" action="" method="post">
                  <fieldset>
                      <legend>Ajouter un membre</legend>
          
          		<table cellpadding="0" cellspacing="3">
          
          			<tr>
          				<th colspan="6">Coordonné :</th>
          			</tr>
          			<tr>
          				<td width="20%">Nom :</td>
          				<td width="30%"><input name="nom" class="content_input" size="30" type="text" value=""/></td>
          				<td width="20%">Prénom :</td>
          				<td width="30%"><input name="prenom" class="content_input" size="30" type="text" value=""/></td>
          			</tr>
          			<tr>
          				<td width="20%">Adresse :</td>
          				<td width="30%"><input name="adresse" class="content_input" size="30" type="text" value=""/></td>
          			</tr>
          			<tr>
          				<td width="20%"><img src="image/mail.png" alt="Email" title="Email" height="22" width="22"/> Adresse mail :</td>
          				<td width="30%"><input name="email" class="content_input" size="30" type="text" value=""/></td>
          			</tr>
          
          		</table>
          
          <!--#######################################################################################################################################-->
          
          			<input type="hidden" name="send"/>
          			<input type="submit" name="register" class="submit" value="Enregistrer"/>
                  </fieldset>
          	</form>
          </div>
          


          Ton avis s'il te plait
          Merci
          1. Modérateur
            Tu as bien ton code PHP dans la même page que ton formulaire HTML ??

            Sinon.. il faut que tu modifies ton FORM
            <form id="formulaire" action="" method="post">
            


            Par :
            <form id="formulaire" action="chemin_vers_ton_fichier_PHP" method="post">
            
        2. Modérateur
          Tu peux tester ce code php ?

          <?php
          //----------------------------------------------------------------
          //RECUPERATION DES VARIABLES POST
          //----------------------------------------------------------------
          $action   =  isset($_POST['action']) ? $_POST['action'] : NULL;
          $register = isset($_POST['register'])?$_POST['register']:NULL;
          $nom = isset($_POST['nom'])?Security::clean($_POST['nom']):'';
          $prenom = isset($_POST['prenom'])?Security::clean($_POST['prenom']):'';
          $email = isset($_POST['email'])?Security::clean($_POST['email']):'';
          
          //----------------------------------------------------------------
          // Le temps des tests ...
          echo "<br> Variables GET :";
          print_r ($_GET);
          
          echo "<br> Variables POST :";
          print_r ($_POST);
          //----------------------------------------------------------------
          
          // SI SUBMIT DU FORMULAIRE :
          if isset($register){
          	switch($action){
          		case 'add':
          				if($register) {			
          					$sql = "INSERT INTO tb_adherent (nom,prenom,email)
          					          VALUES(:nom,:prenom,:email)";
          					$req = $bdd->prepare($sql);				
          					$req->bindParam('nom', $nom, PDO::PARAM_STR);
          					$req->bindParam('prenom', $prenom, PDO::PARAM_STR);
          					$req->bindParam('email', $email, PDO::PARAM_STR);
          
          					$donnees = $req->execute();
          					if($donnees) {
          						echo 'OK';
          					}else{
          					  echo 'ERREUR lors de l\'insertion';
          					}
          				} else{
          					echo "<br> Error ! register =".$register ;
          				}
          			require_once 'add_user.php';		
          			 break;
          		 default:
          			 echo "<br> Error ! Action =".$action;
          		 break;
          	}
          }
          ?>
          


          Et quand je dis tester .... tu remplis tes champs dans ton formulaire puis tu cliques sur ton bouton de submit....

          1. ça me renvoie cette erreur

            Parse error: syntax error, unexpected T_ISSET, expecting '(' in C

            à la ligne 21
            if isset($register){
            .........
            1. Modérateur
              oups.. il manque une parenthèse
              if (isset($register)){ 
              
          2. alors ça me retourne toutes les variables entrer dans le formulaire mais dans la BDD absolument rien
            ça me retourne en dessous des variables ça Error ! Action =
            Vraiment très bizarre pour quelques chose de relativement simple en principe.
            1. Modérateur
              Colles nous exactement ce que ça t'affiche stp
            2. Modérateur
              Ton url.. elle a une variable action=add ??
              Remet GET au lieu de POST pour la récupération de ACTION
          3. Voilà lorsque j'ai envoyé le formulaire

            Variables GET :Array ( [body] => user [type] => admin )
            Variables POST :Array ( [nom] => DUPOND[prenom] => Paul[email] => admin@yahoo.fr [send] => [register] => Enregistrer )
            Error ! Action =

            l'url
            localhost/mon_site/index.php?body=user&type=admin
            1. Modérateur
              Donc..tu n'as nul part de variable ACTION ....
              d'où le problème. ....

              ajoute dans ton formulaire html un input comme ceci :
              <input type = "hidden" name="action" value="add">
              
          4. Bonjour
            Malheureusement toujours aucun insert dans la BDD
            Je te donne mon fichier complet
            Merci
            user.php
            <?php
            //----------------------------------------------------------------
            //RECUPERATION DES VARIABLES POST
            //----------------------------------------------------------------
            $action   =  isset($_GET['action']) ? $_GET['action'] : NULL;
            $register = isset($_POST['register'])?$_POST['register']:NULL;
            $nom = isset($_POST['nom'])?Security::clean($_POST['nom']):'';
            $prenom = isset($_POST['prenom'])?Security::clean($_POST['prenom']):'';
            $email = isset($_POST['email'])?Security::clean($_POST['email']):'';
            
            //----------------------------------------------------------------
            // Le temps des tests ...
            echo "<br> Variables GET :";
            print_r ($_GET);
            
            echo "<br> Variables POST :";
            print_r ($_POST);
            //----------------------------------------------------------------
            
            // SI SUBMIT DU FORMULAIRE :
            if (isset($register)){
             switch($action){
              case 'add':
                if($register) {   
                 $sql = "INSERT INTO tb_adherent (nom,prenom,email)
                           VALUES(:nom,:prenom,:email)";
                 $req = $bdd->prepare($sql);    
                 $req->bindParam(':nom', $nom, PDO::PARAM_STR);
                 $req->bindParam(':prenom', $prenom, PDO::PARAM_STR);
                 $req->bindParam(':email', $email, PDO::PARAM_STR);
            
                 $donnees = $req->execute();
                 if($donnees) {
                  echo 'OK';
                 }else{
                   echo 'ERREUR lors de l\'insertion';
                 }
                } else{
                 echo "<br> Error ! register =".$register ;
                }
               require_once 'add_user.php';  
                break;
               default:
                echo "<br> Error ! Action =".$action;
               break;
             }
            }
            ?>
            <div id="content">
             <form id="formulaire" action="" method="post">
                    <fieldset>
                        <legend>Ajouter un membre</legend>
            
              <table cellpadding="0" cellspacing="3">
            
               <tr>
                <th colspan="6">Coordonné :</th>
               </tr>
               <tr>
                <td width="20%">Nom :</td>
                <td width="30%"><input name="nom" class="content_input" size="30" type="text" value=""/></td>
                <td width="20%">Prénom :</td>
                <td width="30%"><input name="prenom" class="content_input" size="30" type="text" value=""/></td>
               </tr>
               <tr>
                <td width="20%"><img src="image/mail.png" alt="Email" title="Email" height="22" width="22"/> Adresse mail :</td>
                <td width="30%"><input name="email" class="content_input" size="30" type="text" value=""/></td>
                <td width="20%"></td>
                <td width="30%"></td>
               </tr>
              </table>   
               <input type = "hidden" name="action" value="add"/>
               <input type="submit" name="register" class="submit" value="Enregistrer"/>
            
                    </fieldset>
             </form>
            </div>
            

            le retour
            Variables GET :Array ( [body] => user [type] => admin )
            Variables POST :Array ( [nom] => DUPOND[prenom] => Paul[email] => admin@yahoo.fr [action] => add [register] => Enregistrer )
            Error ! Action =
            
            1. Modérateur
              Oui..mais là dans POST tu as bien action..
              donc remet en POST dans la recup...
          5. Bonjour
            He bien je t'ai suffisamment ennuyé, comme quoi il faut que j'apprenne à réfléchir un peu mieux.
            En tout cas un grand merci et encore milles excuses, je n'aurai pas trouvé le fait qu'il fallait créé un input de type hidden pour créé l'action.
            Merci
            1. Modérateur
              On aurait pu aussi utiliser ton BOUTON
               <input type="submit" name="register" class="submit" value="Enregistrer"/>
              


              Mais dans ce cas ... deux choix :
              Changer la valeur en "add" au lieu de "enregistrer"
              Soit changer dans le switch : case:"enregistrer"

              Et quoi qu'il en soit... dans la récup des variables POST .. action serait devenu
              $action   =  isset($_POST['register']) ? $_POST['register'] : NULL;
              


              Voilou...

              PS: Si la question est résolue..
              Merci de ne pas oublier de clôturer le sujet
              (en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

              Cordialement,
              Jordane
          6. Bonjour
            J'ai mis résolu, mais je viens de penser à une toute dernière question.
            Je pensais à la validation du formulaire ça allait me renvoyer une Url de type

            localhost/mon_site/index.php?action=add

            Merci
            1. Modérateur
              Et c'est quoi la question ?

              Là.. tel que tu as écris ton code.. ton URL n'est pas modifiée .... elle conserve donc celle que tu as tel que tu arrives sur la page...
          7. Alors en fait ça sert à quoi le nom du paramétre "action" et sa valeur add ?
            J'essai juste de comprendre.
            moi sur ma page du traitement du formulaire l'Url se décompose ainsi

            /index.php?body=add_user&type=admin

            et lorsque je valide le formulaire je pensais que ça me retournerai cette Url en fait..

            index.php?action=add

            Merci
            1. Modérateur
              Ben non... et pour quelle raison ça te ferait ça ?

              Là.. actuellement... quand tu testes ton formulaire..ça te retourne quoi ???
          8. Non les INSERT dans la BDD c'est tout bon comme je te l'ai dit mais je voulais simplement faire une redirection à cette adresse

            index.php?action=add
            en affichant 'Le nouveau membre à bien été enregistré !';"

            alors je pensais faire comme ça mais le message ne s'affiche pas alors je voulais juste comprendre.

            header(Location: ndex.php?action=add');
            echo 'Le nouveau membre à bien été enregistré !';