[RESOLU] problème insertion donnée php/javascript

Eléphanteau du PHP | 10 Messages

22 janv. 2014, 15:58

Bonjour à tous,

Mon problème est que je n'arrive rentrer des données d'un formulaire dans ma base de données car j'utilise une boucle do while afin de générer un nombre déterminé par l'utilisateur d'input.
<?php 
	$annee_debut=$_POST['annee_debut'];
	$annee_fin=$_POST['annee_fin'];	
	$aff_num_opportunite=aff_donnee_opportunite($num_opportunites);

	$nombre_formulaire = $_GET['annee_fin']-$_GET['annee_debut'];
	$indice=0;	

	} 	

	if($_GET['etape']==3)	
	{		

			do	{	 ?>
			<tr>
			
				<td>Q1 année <?php echo "$annee_debut" ?>  </td>
				<td><input type="text" name="q1" id="q1" value="<?php if ($aff_num_opportunite["q1"]) { echo  stripslashes($aff_num_opportunite["q1"]); }?>"/></td>
				<td>Q2 année <?php echo "$annee_debut" ?></td>
				<td><input type="text" name="q2" id="q2" value="<?php if ($aff_num_opportunite["q2"]) { echo  stripslashes($aff_num_opportunite["q2"]); }?> " /></td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
		 
			<tr>
				<td>Q3 année <?php echo "$annee_debut" ?></td>
				<td><input type="text" name="q3" id="q3" value="<?php if ($aff_num_opportunite["q3"]) { echo  stripslashes($aff_num_opportunite["q3"]); }?> " /></td>
				<td>Q4 année <?php echo "$annee_debut" ?></td>
				<td><input type="text" name="q4" id="q4" value="<?php if ($aff_num_opportunite["q4"]) { echo  stripslashes($aff_num_opportunite["q4"]); } ?>" /></td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			
			<tr>
				<td>Total année <?php echo "$annee_debut" ?></td>
				<td><input type="text" name="total_q" id="total_q" value="<?php if ($aff_num_opportunite["total_q"]) { echo  stripslashes($aff_num_opportunite["total_q"]); }?>" /></td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			
			<tr>
				<td><p>&nbsp;</p></td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
				

			<?php 
			$indice++;
			$annee_debut++;
			
			}while($indice <= $nombre_formulaire);	
		
	echo ' <tr><th colspan="9"><input type="submit" name="Validez" value="Enregistrer la fiche" ></th></tr>';
Dans ma table, les champs annee_debut et annee_fin sont bien enregistré mais q1,q2,q3,q4 et total_q restent vident. j'ai déjà essayé via le php mais je n'ai trouvé aucune solutions.

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

22 janv. 2014, 18:13

salut,


la solution passe par l'utilisation de la notation tableau dans les noms de champ html.
exemple
<input type="text" name="q1[]" />

Dans le même genre un id, ici dans le code html, est une chose unique tu ne peux pas avoir plusieurs champs avec le même id (enfin si mais coté js, ou ancre tu ne pourras t'en servir, c'est un peu comme si tu donnais le même N° de sécu à 40 type différents => c'est la merde ;) ).

avec cette notatin tu aura un tableau php dans l'index du tableau POST considéré (en clair avec mon exemple $_POST['q1'] est un tableau).

Donc tu nomme ainsi tout les champs qui se trouvent dans la boucle et coté validation tu boucle l'un d'entre eux et utilise l'index pour accéder aux autre.
<?php
foreach($_POST['q1'] as $index => $valeur) {
// q2 de la même itération => $_POST['q2'][$index];
}
ceci est possible parce que tu affiche le même nombre de fois chaque élément et dans le même ordre du coup tu sais que l'index est le même.

par contre si tu commence rendre le nombre de champ dans la boucle dynamique tu risque de devoir gérer toi même l'index (en utilisant une boucle for plutôt qu'un do while et en utilisant l’incrément de la boucle comme index du table (<input type="text" name="q1[$index]" />

Attention les champs checkbox n'existe que si le champs est coché du coup il faut bien penser à vérifier l’existante de l'index avant de l’utiliser ;)


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

Eléphanteau du PHP | 10 Messages

23 janv. 2014, 11:10

Encore une fois, merci pour ta réponse claire et précise, tu gères moogli :) !

Eléphanteau du PHP | 10 Messages

23 janv. 2014, 14:32

Bon ba rebonjour :p, voila j'ai encore un soucis avec mon codage, j'ai donc utilisé le foreach comme me l'a conseillé moogli mais malheureusement il y a encore un truc qui coince :( . Bref sur ce je vous montre mon code :
//ajouter_opportunites_prolival.php


if($_GET['etape']==3){
$index=0;

$q1 = array();
$q2 = array();
$q3 = array();
$q4 = array();
$total_q = array();

			foreach($_POST['q1'] as $index => $valeur) {
				$q1[]=$_POST['q1'][$index];		
}
return $q1;
			foreach($_POST['q2'] as $index => $valeur) {
				$q2[]=$_POST['q2'][$index];		
}
return $q2;
			foreach($_POST['q3'] as $index => $valeur) {
				$q3[]=$_POST['q2'][$index];		
}
return $q3;
			foreach($_POST['q4'] as $index => $valeur) {
				$q4[]=$_POST['q3'][$index];		
}
return $q4;
			foreach($_POST['total_q'] as $index => $valeur) {
				$total_q[]=$_POST['total_q'][$index];		
}
return $total_q;

recup_q($q1,$q2,$q3,$q4,$total_q,$_GET['num_opportunite_prol'],$_GET['annee_debut'],$_GET['annee_fin'],$_POST['num_client_prolival'],$nombre_formulaire);
	
	
	}

Dans cette partie je récupère donc mes valeurs de q1,q2,q3,q4 et total_q dans des tableaux. Ensuite je les envoies dans une fonction ainsi que d'autres données me permettant l'insertion dans ma table.

Voici la fonction en question :
//fonction.php


function recup_q($q1,$q2,$q3,$q4,$total_q,$num_opportunite_prol,$annee_debut,$annee_fin,$num_client_prolival,$nombre_formulaire){
$index=0;	
$conn = db_connect();
	while($index<=$nombre_formulaire){
$sql_estimation="INSERT INTO ".PROLIVAL_ESTIMATION_REVENUS." values (
'',
'$num_client_prolival',
'$num_opportunite_prol',
'$q1[$index]',
'$q2[$index]',
'$q3[$index]',
'$q4[$index]',
'$total_q[$index]',
'$annee_debut',
'$annee_fin'
)";
$result_estimation = @mysql_query($sql_estimation, $conn) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
$index++;
}
}

Mais sa marche toujours po :(.

Qui plus est j'ai une erreur qui s'affiche en bas de ma page pas très loin de mon formulaire :"Warning: Invalid argument supplied for foreach() in C:\wamp\www\CRM\ajouter_opportunites_prolival.php on line 729" ( c'est à dire ce bout de code foreach($_POST['q1'] as $index => $valeur) { )

Et pour finir, je ne sais pas si je dois mettre les foreach() dans le formulaire ou bien a l'exterieur ?

Bref voili voilou, si quelqu'un a une petite idée sur le comment du pourquoi je suis preneur ^^ !

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

23 janv. 2014, 16:42

$_POST['q1'] n'est pa un tableau.

pourquoi 4 foreach ?

un seul suffit pour construire tes 4 tableaux (plus rapide quand même que quatre fois la même chose ;) )

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

Eléphanteau du PHP | 10 Messages

24 janv. 2014, 10:38

Merci moogli je vais suivre tes conseils :)

Eléphanteau du PHP | 10 Messages

24 janv. 2014, 11:56

Juste si on peu me donner la bonne syntaxe du foreach pour le cas présent car la je commence a faire n'importe quoi et je ne suis pas sur que l'erreur provienne forcément du foreach :(. Bref je ne sais plus ou placer les $_POST ni si je dois faire un echo dans mon foreach ou bien un return , etc ... . Je suis au bord du gouffre :cry:

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

24 janv. 2014, 15:19

la syntaxe est bonne.

le problème c'est que te passe pas un tableau au foreach c'est tout (donc soit erreur de nom, soit erreur dans le html).

Il faut utiliser un debugguer (comme xdebug) si tu veux aller plus c'est largement plus simple que de tâtonner ;)

tu peux aussi ajouter un var_dump($_POST) avant le foreach histoire de voir ce qu'il a dans le ventre et le problème vient du html ou du traitement php.

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

Eléphanteau du PHP | 10 Messages

24 janv. 2014, 16:09

Après de multiples recherches , en effet j'ai constaté qu'il y avait un problème dans le php, le html, mais aussi dans le sql car il faut utiliser la fonction implode pour que les données se rajoutent correctement dans la bdd, bref c est la merde, en tout cas un grand merci pour tes réponses moogli sa m'a permis d'avancer.

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

24 janv. 2014, 16:43

de rien :)

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