probleme d'insertion champs formulaire php

baxterbax
Invité n'ayant pas de compte PHPfrance

30 sept. 2011, 15:44

Bonjour,


sur mon formulaire d'inscription à des ateliers , je ne comprends pas pourquoi quand je saisie une ligne (nom,prenom) il me enregistre deux lignes au lieu d'une dans ma table, donc il m'hote deux places disponibles à chaque fois.

l'une est bien remplie correctement avec le nom et prenom, et l'autre ligne reste vide . avez vous une idée ? merci par avance à ceux qui veulent bien jetter un oeil et m'aider à corriger.

je précise que je me suis aidé d'un script existant pour afficher automatiquement le nombre de champs à remplir selon les places restantes à l'activité.


ma requete :

Code : Tout sélectionner

if ( $captchacrypte == md5($_POST['captcha']) AND !empty($_POST['captcha'])&&($_POST['nom'])&&($_POST['prenom'])&& ($_POST['email'])&&($_POST['atelier']) ) { $atelier=$_POST['atelier']; $nom=$_POST['nom'.$i]; $prenom=$_POST['prenom'.$i]; $email=$_POST['email']; $size=sizeof($nb_champs); for($i=0;$i<=$size;$i++){ mysql_query("INSERT INTO noms VALUES('' ,'" . $nom_atelier. "','" . $id_atelier. "', '" . $nom[$i] . "', '" .$prenom[$i] . "','" . $email . "')" ) or die (mysql_error()); } header('Location: resultat.php?inscription=ok'); } if($ok=='ok') { echo '<font color="#FF0000"><font size="5">Votre inscription a bien &eacute;t&eacute; prise en compte ! Merci.</font>'; } else { if($ok!='ok') echo '<font color="#FF0000"><font size="4">Vous devez indiquer vos coordonn&eacute;es dans les champs &agrave; remplir.</font color"></font>';} if ( !empty($_POST['captcha']) ) { echo "\t\t\t<B style=\"color : #ff0000;\">Le code saisi est incorrect</b><br />\n";}



Code : Tout sélectionner

// si l'utilisateur soumet le formulaire on affiche la valeur de tous les champs du formulaire if (isset($_POST['submit']) && $_POST['submit'] == "Envoyer"){ // on affiche le nombre de champs du formulaire echo 'Nombre de champs : '.$_POST['nb_champs'].'<br />'; // on affiche la valeur des champs du formulaire for ($i=1; $i<=$_POST['nb_champs']; $i++){ $nom = 'nom'.$i; $value = $_POST[$nom]; $prenom= 'prenom'.$i; $value = $_POST[$prenom]; echo 'nom'.$i.' : '.$value.''; echo 'prenom'.$i.' : '.$value.'' ; echo 'email'.$i.' : '.$value.'<br />'; } else{ // on défini le nombre initial de champs if (!isset($_POST['nb_champs'])){ $_POST['nb_champs'] = $nb_de_places_restantes; } // si la personne clic sur "un champs en +", on ajoute un champs if (isset($_POST['ajouter_champs']) && $_POST['ajouter_champs'] == "Un champs en +"){ $_POST['nb_champs']++; } // on affiche le formulaire echo '<FORM METHOD="post">'; // on place un champ caché contenant un entier ayant comme valeur le nombre de champs du formulaire echo '<INPUT TYPE="hidden" NAME="nb_champs" VALUE="'.$_POST['nb_champs'].'">'; // on affiche tous les champs du formulaire for ($i=1; $i<=$_POST['nb_champs']; $i++){ echo ' Nom*/prénom <input name="nom[]' , $i , '" type="text" id="nom' , $i , '" value="' , isset($_POST['nom'.$i]) ? $_POST['nom'.$i] : '' , '"> <input name="prenom[]' , $i , '" type="text" id="prenom' , $i , '" value="' , isset($_POST['prenom'.$i]) ? $_POST['prenom'.$i] : '' , '"><br/>'; } } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 sept. 2011, 22:07

a priori ton code ne fait qu'une seule insertion
par contre
if ( $captchacrypte == md5($_POST['captcha']) AND !empty($_POST['captcha'])&&($_POST['nom'])&&($_POST['prenom'])&&
($_POST['email'])&&($_POST['atelier'])

Ca manque de isset ou !empty la dedans il ne faut jamais faire du $variable && $variable1 sans savoir si elle existe et surtout sans savoir s'il s'agit de booleen ou pas ! car dans le cas de variables de formulaire tous ce qui est différent de 0 var être considéré comme "vrai" et ça n'a pas de sens.

Après je pense que soit la requête est exécutés deux fois (avec le header peux être).

on pourrait p'tet mieux y voir avec tous le code.

utilise de préférence la balise adapté pour le code car cela permet la colorisation de celui ci donc la =>
en plus ça éviter d'user ma roulette ;)

@+
Il en faut peu pour être heureux ......

baxterbax
Invité n'ayant pas de compte PHPfrance

30 sept. 2011, 22:50

merci pour ta réponse, je vais voir en fonction de tes conseils, la solution possible.

Pour donner une idée de l'ensemble, ma page formulaire, par contre faut pas être effrayé devant le code car n'étant pas un crack en php j'ai retourner mon script dans tout les sens pour trouver la solution à mon probème. alors soyez indulgent svp, car ça doit être un joyeux bordel dans mes lignes.
<?php

if ( !empty($_POST['captcha']) ) {
		$captchacrypte = md5($_SESSION['captcha']);

		// On supprime la session pour éviter la récupération pour les robots
		$_SESSION['captcha'] = '';
	}
	
	// On prépare la liste de caractère a inséré dans le captcha
	$chaine = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

	// On prépare le compteur de caractère
	$nb = 0;

	// On limite à 6 caractères
	while( $nb < 6 ) {

		// On tire un nombre au hazard
		$rand = rand(0,51);

		// On regarde à quelle lettre il correspond et on l'ajoute à la chaine
		$chaine2 .= $chaine[$rand];

		// On prépare pour la lettre suivante
		$nb++;
	}

	// Enfin on génère la session
	$_SESSION['captcha'] = $chaine2;
    $nb_champs=$_POST['nb_champs'];

	if ( $captchacrypte == md5($_POST['captcha']) AND !empty($_POST['captcha'])&&($_POST['nom'])&&($_POST['prenom'])&&
($_POST['email'])&&($_POST['atelier']) ) 



{
  $nom_atelier=$_POST['atelier'];
   $nom=$_POST['nom'.$i];
   $prenom=$_POST['prenom'.$i];
   $email=$_POST['email'];

  



  $size=sizeof($nb_champs);
   for($i=0;$i<=$size;$i++){


        mysql_query("INSERT INTO noms VALUES('' ,'" . $nom_atelier. "','" . $id_atelier. "', '" . $nom[$i] . "', '" .$prenom[$i] . "','" . $email . "')" ) or die (mysql_error());

   }

header('Location: resultat.php?inscription=ok');
 }




if($ok=='ok') {  

echo '<font color="#FF0000"><font size="5">Votre inscription a bien &eacute;t&eacute; prise en compte ! Merci.</font>';



}
else { if($ok!='ok') echo '<font color="#FF0000"><font size="4">Vous devez indiquer vos coordonn&eacute;es dans les champs &agrave; remplir.</font color"></font>';}

if ( !empty($_POST['captcha']) ) {
		echo "\t\t\t<B style=\"color : #ff0000;\">Le code saisi est incorrect</b><br />\n";}


$captcha = (isset($_POST['captcha'])) ? $_POST['captcha'] : '';


$nom_atelier=($atelier);

$ok = (isset($_GET['inscription'])) ? $_GET['inscription'] : '';

$id  = $_GET["idPersonne"] ;

///////////////

// on crée la requête SQL 
$sql = 'SELECT haut FROM structure'; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 
while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    echo' '.$data['haut'].''; 
   
    } 

?>

    </tr>
    <tr> 
      <td align="" valign="center"> 
        <?
define('SUJET','Inscription aux ateliers Fête de la science 2011'); 

$message = "Bonjour,




Ceci est un mail automatique, merci de ne pas y répondre.
";




mail(ADRESSE_WEBMASTER,SUJET,$message,'From: '.ADRESSE_WEBMASTER);


$message = "Bonjour,
Ceci est un mail automatique, merci de ne pas y répondre.
";


; 


mail($_POST['email'],SUJET,$message,'From: '.ADRESSE_WEBMASTER);



  echo' <form method="post" action="" id="idPersonne' . $id . '" enctype="multipart/form-data" onClick="traitement(this.id)">';


 $reponse0 = mysql_query('SELECT COUNT(*) AS nb_activites FROM ateliers WHERE theme = '.$id.' ORDER BY atelier') or die(mysql_error());

 $donnees0 = mysql_fetch_array($reponse0);

 $nb_activites = $donnees0['nb_activites'];


// echo '<h3>Liste des activit&eacute;s</h3>';
 

 if($nb_activites == 0)

 {   }


  else  {

   if($nb_activites == 1)

    {echo '';}

     else

     { echo '';}

  }

 //récupération de la variable d'URL,
  //qui va nous permettre de savoir quel enregistrement modifier
  $id  = $_GET["idPersonne"] ;
 

 $reponse1= mysql_query('select* from ateliers WHERE id = '.$id.' ORDER BY atelier')or die(mysql_error());


 while ($donnees1 = mysql_fetch_array($reponse1))

 {    
     
     $id = $donnees1['id'];
     $id_atelier = $donnees1['id']; 
	 $id = $donnees1['id'];   
     $nom_atelier = $donnees1['id']; 
     $atelier = $donnees1['atelier'];
     $places = $donnees1['places'];
     $details = $donnees1['details'];
     $dates = $donnees1['dates'];
   
  ?>
  <style type="text/css">
  .fondClaire{
    background-color: #F1F5FA;
   border: 1px dotted #000000;
 }
  </style>
</head>
<body>

<table width="700"class="fondClaire">
  <tr>
    <td width="750" height="144" valign="top" class="fondClaire">
  
  <p>
    <?
   echo ' <font color="#0000ff"><font size="4"><strong>'.$atelier.'</strong></font><br />';
   echo'<br>';
    echo '<font color="#000000"><font size="3"><strong>'.$dates.'</strong></font><br />';
 echo'<br>';
 
  if(empty($details))  {   echo '<br>';  } 

  else    {   echo ''.nl2br($details).'';  }

 
   $reponse2 = mysql_query('SELECT COUNT(*) AS nb_de_places_occupees FROM noms WHERE id_atelier = '.$id_atelier.'');
  
  $donnees2 = mysql_fetch_array($reponse2);

  $nb_de_places_restantes = $places - ($donnees2['nb_de_places_occupees']);

  echo 'Nombre de places total : '.$places.'<br />';

  echo 'Nombre de places restantes : '.$nb_de_places_restantes.'';

   if($nb_de_places_restantes =='0') {  

  echo 'Plus de places disponibles';



 }

  ?>
  </p>
  <table width="250" border="0" align="right">
    <tr valign="bottom">
      <td height="31" align="right">
    <?
      if($nb_de_places_restantes >'0') {  

     echo ' <font color="#266577"><strong></strong></font><input type="hidden" name="atelier"  value="'.$nom_atelier.' ">'; 
 }?>
 
 </td>
    </tr>
</table></td>
</tr></table>

<?
$id  = $_GET["idPersonne"] ;

echo'</font>';
 echo '<font color="#266577"><font size="3"><strong></strong></font><br />';

echo'<hr><style="border-style: border-bottom: 3px dotted #266577; color="#266577;"></hr>'; 
echo '<br>';

 }
?>
</tr>
    <tr> 
      <td align="center" valign="center"> 
        <?

// on crée la requête SQL 
$sql = 'SELECT bas FROM structure'; 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

// on fait une boucle qui va faire un tour pour chaque enregistrement 


?>
 
<p align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><span
class="bloc"><font size="3"><strong>Pour vous inscrire à cet atelier, merci d'indiquer le nom et pr&eacute;nom de chaque participant ainsi qu'une seule adresse email :
</strong></font> </span><br>
</font> </p>
<table width="550
" height="325"
border="0" align="center" cellpadding="0" cellspacing="0"
style="text-align: left; margin-left: auto; margin-right: ; height: 550
px; width: 550

px;">
<tbody>
<tr>
  <td width="31"></td>
<td width="28"></td>
<td width="38" style="text-align: center;"></td>
<td width="149" style="text-align: center;"></td>
<td width="110" style="text-align: center;"></td>
</tr>
<tr valign="middle">
  <td height="42" colspan="5" align="center" style="vertical-align: center;"><span style="vertical-align: top;">
    <?php



// si l'utilisateur soumet le formulaire on affiche la valeur de tous les champs du formulaire
if (isset($_POST['submit']) && $_POST['submit'] == "Envoyer"){
		// on affiche le nombre de champs du formulaire
		echo 'Nombre de champs : '.$_POST['nb_champs'].'<br />';

		// on affiche la valeur des champs du formulaire
		for ($i=1; $i<=$_POST['nb_champs']; $i++){
				
			
				$nom = 'nom'.$i;
				
				$value = $_POST[$nom];

	                $prenom= 'prenom'.$i;
				
				$value = $_POST[$prenom];


	       


               
				echo 'nom'.$i.'  : '.$value.''; echo 'prenom'.$i.' : '.$value.'' ; echo 'email'.$i.' : '.$value.'<br />';


		}
}

// sinon on affiche le formulaire avec la possibilité d'ajout des champs au formulaire
else{
		// on défini le nombre initial de champs
		if (!isset($_POST['nb_champs'])){
				$_POST['nb_champs'] = $nb_de_places_restantes;
		}
		// si la personne clic sur "un champs en +", on ajoute un champs
		if (isset($_POST['ajouter_champs']) && $_POST['ajouter_champs'] == "Un champs en +"){
				$_POST['nb_champs']++;
		}

		// on affiche le formulaire
		echo '<FORM METHOD="post">';
		// on place un champ caché contenant un entier ayant comme valeur le nombre de champs du formulaire
		echo '<INPUT TYPE="hidden" NAME="nb_champs" VALUE="'.$_POST['nb_champs'].'">';

		// on affiche tous les champs du formulaire
		
		
		for ($i=1; $i<=$_POST['nb_champs']; $i++){
			
			
			
  echo ' Nom*/prénom    <input name="nom[]' , $i , '" type="text" id="nom' , $i , '" value="' , isset($_POST['nom'.$i]) ?  $_POST['nom'.$i] :  '' , '">   
  
  <input name="prenom[]' , $i , '" type="text" id="prenom' , $i , '" value="' , isset($_POST['prenom'.$i]) ?  $_POST['prenom'.$i] :  '' , '"><br/>';



 
}

}

?>
    </span></td>
</tr>
<tr valign="middle">
  <td height="42" colspan="5" align="center" style="vertical-align: center;"><strong><font color="#000000">Email *</font></strong>    <input name="email" type="text" maxlength="40"></td>
</tr>
<tr valign="middle">
  <td height="42" colspan="5" align="center" style="vertical-align: center;">
    <div align="center">Afin d’empêcher les inscriptions automatisées, nous vous demandons de taper la ou les lettres affichées dans le champ texte ci-dessous.<br><br>
      
      Code de confirmation:
      <> <font
face="Verdana, Arial, Helvetica, sans-serif" size="2">
  </font>  
      <input name="captcha" size="6" maxlength="6" type="text"> <br>
      </div>
    <p> </p>
    </td>
</tr>
<tr>
  <td colspan="5" rowspan="1" align="center" style="vertical-align: top;">
  <div style="text-align: center;"><input type="submit" name="valider_form" value="Valider" />
    </form>
  <br>
  </div>
    
  </td>
</tr>
<tr>
<td colspan="5" rowspan="1" align="center" style="vertical-align: center;"><br>

<?
while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations de l'enregistrement en cours 
    echo' '.$data['bas'].''; 
   
    }
	?>
</td>
</tr>
</tbody>
</table>

<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
<p><span style="color: red;">*</span> : saisie obligatoire.
Nous nous engageons à préserver la confidentialité de ces informations.
</p>
</body>
</html>
 <?

echo'<br>';
echo'<br>';
echo'<br>';



?>


baxterbax
Invité n'ayant pas de compte PHPfrance

01 oct. 2011, 18:29

c'est le gros bazar mon script !!! ça me compte une ligne en trop à chaque enregistrement et au dela de 2 enregistrements il ne veut plus inserer de ligne...dans la table . je suis vraiment largué . gros besoin de conseils..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 oct. 2011, 01:40

Peut tu nous montrer un formulaire génèrer complet histoire de mieux comprendre la chose (ce qu'il y a quand tu fait voir la source html avec ton navigateur ;) ) ?

Je regarderais demain avec un ordo ^^

@+
Il en faut peu pour être heureux ......