INSERT INTO [Résolu/Fermé]

Signaler
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014
-
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014
-
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

Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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);

Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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;
}

Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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">
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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....



Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

ça me renvoie cette erreur

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

à la ligne 21
if isset($register){
.........
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
oups.. il manque une parenthèse
if (isset($register)){ 
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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.
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
Colles nous exactement ce que ça t'affiche stp
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
Ton url.. elle a une variable action=add ??
Remet GET au lieu de POST pour la récupération de ACTION
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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">
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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 =
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
Oui..mais là dans POST tu as bien action..
donc remet en POST dans la recup...
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
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...
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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
Messages postés
31184
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2021
3 209
Ben non... et pour quelle raison ça te ferait ça ?

Là.. actuellement... quand tu testes ton formulaire..ça te retourne quoi ???
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

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é !';
Messages postés
13
Date d'inscription
dimanche 6 mai 2012
Statut
Membre
Dernière intervention
3 décembre 2014

Merci

ok c'est tout bon je te remercie.
Cordialement