Incrémentation variables php

Fermé
Thomas - Modifié par Thomas le 22/03/2012 à 10:17
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 - 29 mars 2012 à 14:00
Bonjour,

Je me permets de poser une question car malgré diverses recherches je n'arrive toujours pas à trouver mon bonheur.
Je conçois une base de données pour mon employeur et je bute sur un soucis de variables dans une page php.
Voici le code qui pose problème:

if(isset($_POST["i"]))      $i=$_POST["i"]; 
 else      $i=""; 

 $n = 1; 
 while ($n <= $i); { 

if ( isset($_POST["i_nom.$n"]))  $i_nom.$n = $_POST["i_nom.$n"]; 
else 
 $i_nom.$n = ""; 
  
if ( isset($_POST["i_adresse.$n"]))  $i_adresse.$n = $_POST["i_adresse.$n"]; 
else 
 $i_adresse.$n = ""; 
   
if ( isset($_POST["i_mode_fctmt.$n"]))  $i_mode_fctmt.$n = $_POST["i_mode_fctmt.$n"]; 
else 
 $i_mode_fctmt.$n = ""; 
 $n++; 
}


En gros pour expliquer, j'ai un formulaire dynamique dans ma page html. J'incrémente la variable $i à chaque fois que je rajoute une ligne dans ce formulaire. Dans chaque ligne on
a donc 3 variables $i_nom, $i_adresse, $_mode_fctmt et ces variables s'incrémentent de +1 à chaque nouvelle lignes ajoutées. Tout ceci marche correctement, j'ai essayer d'importer dans mon code php i_nom1 i_nom2 par exemple et c'est ok. Donc mon soucis se situe dans la boucle while, qui justement ne s'arrête pas de boucler et me revoit une erreur au bout de 30s. Le but est que dans tous les cas, que je n'ai qu'une ligne ou 100, cela fonctionne avec une boucle while.

C'est surement une erreur bête, mais là je commence à tourner en rond lol

En vous remerciant par avance de votre aide

Thomas


A voir également:

6 réponses

Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
Modifié par Fallentree le 22/03/2012 à 10:29
i="";
Tu compares peut etre des types incompatibles ???

En plus .isset($_POST["i_nom.$n"]))
essaie .. isset($_POST["i_nom.".$n]))

tu dois te retrouver dans le cas $i= "" et $n qui s incremente ....
0
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
22 mars 2012 à 10:28
Bonjour,

Tu devrais essayer de faire un echo de ta variable $n, avant de l'incrémenter, pour être sur qu'elle s'incrémente bien, justement.

Également, vu que ton but est de parcourir toutes les lignes, et dans l'ordre, privilégie plutôt la boucle "for" plutôt que while, pour être sur que tu ne tourne pas en rond.

Je ne me souviens plus de la syntaxe exact, mais ça doit être quelque chose du genre :

for ($n = 0; $n <= $i;$n++)
{

}
0
non je ne crois pas.
Je déclare $n comme une valeur integer au final et $i je le récupère du fichier html.
La voici dans ce fichier:

	<script type="text/javascript">
function create_champ(i) 
{
var i2 = i + 1;

document.getElementById('input_'+i).innerHTML = '<div id="champs_'+i+'">Nom '+i+' :<input type="text" name="i_nom'+i+'"> Adresse '+i+' :<input type="text" name="i_adresse'+i+'"> Fonctionnement '+i+' :<input name="i_mode_fctmt'+i+'" type="text"/><input value="'+i+'" name="i" type="hidden"/></div></span>';
document.getElementById('input_'+i).innerHTML += (i <= 10000) ? '<span id="input_'+i2+'"><input class="input2" type="button" onClick="javascript:create_champ('+i2+')" value="Ajouter"></span>' : '';
}
	</script>


Et je l'extrait comme ça:

<div id="champs_1">
<div align="center"> Nom 1 :
<input name="i_nom1" type="text"/>
Adresse 1 :
<input name="i_adresse1" type="text"/>
Fonctionnement 1 :
<input name="i_mode_fctmt1" type="text"/>
<input name="i" type="hidden"/>




Mopra-L, j'ai fait tous les echos possible, ma variable $i sort avec la bonne valeur.
Si je mets la boucle while en commentaire je ressors toutes mes variables en les déclarant manuellement, tout est bon.
J'ai pas penser au for, merci de me réveiller lol, je vais essayer ça le plus rapidement possible
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
22 mars 2012 à 10:38
A lieu de chercher toutes les modifs parcours tout les retour de ton _POST ...
foreach ($_POST AS $nom) {
0
d'accord, quand j'aurai le temps, j'essaie ça, cet après midi ou demain. Merci. Je vous tiens au courant.
0
en fait je ne vois pas trop comment utiliser le foreach dans ce cas là. J'ai, disons des bases très légères en php et je n'arrive pas encore à assimiler toute la puissance des itérations. Dans ce cas le foreach me permettrait de récupérer mes données contenu dans i_nom (i_nom1,i_nom2...) par exemple, mais après comment puis je les traiter pour les insérer dans ma commande sql pour ma bdd?
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
29 mars 2012 à 14:00
essaie de faire un print_r($_POST).
la structure doit etre un tableau.
Pour bien faire ton foreach c est sur que il faudra le reorganiser
un explode peut etre puis un regroupement par uplet ...
0
Fallentree Messages postés 2309 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 22 juillet 2019 209
Modifié par Fallentree le 22/03/2012 à 10:39
en gros $i=1 au lieu de $i=""; ca ne me derangerait pas ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
22 mars 2012 à 23:00
<?php
//tres mauvaise habitude de ne pas mettre systematiquement les {} dans les tests conditionnels if  else
if(isset($_POST["i"])) {
     $i=$_POST["i"]; 
 }else {
	$i=""; 
}

 $n = 1; 
 while ($n <= $i) { //un ; en trop sur cette ligne

	if ( isset($_POST["i_nom.$n"])){
		//$i_nom.$n c'est pas bon pour une variable dynamique c'est: ${'i_nom'.$n}
		$i_nom.$n = $_POST["i_nom.$n"]; 
		//attention en concatenant ainsi tu as par exemple avec n=5    $_POST["i_nom.5"]
		//si dans ton formulaire tu as i_nom5  il faut $_POST["i_nom".$n]
		//en résumé: ${'i_nom'.$n}= $_POST['i_nom'.$n];
		//idem pour les autres
	}else{ 
		$i_nom.$n = ""; 
	}  
	if ( isset($_POST["i_adresse.$n"])){
		$i_adresse.$n = $_POST["i_adresse.$n"]; 
	}else {
		$i_adresse.$n = ""; 
	}  
	if ( isset($_POST["i_mode_fctmt.$n"])){
		$i_mode_fctmt.$n = $_POST["i_mode_fctmt.$n"]; 
	}else {
		$i_mode_fctmt.$n = ""; 
	}
	//si tu as une boucle infénie, je pense que sans les {} le n++ ne devait être pris en compte dans la boucle que dans le cas du dernier else
	 $n++; 
}
0
Salut Alain.
Merci de tes conseils, il est vrai que je ne fais pas très attention avec mes boucles, j'ai appris comme cela en cours et j'ai gardé cette mauvaise habitude.
J'ai essayé ton code et j'ai toujours le même problème...
Ca boucle indéfiniment et ça me remet cycliquement qu'il ne connait pas les variables i_nom, i_adresse et i_mode_fctmt au niveau du else pour la valeur vide.
Là je commence à raboter le coin de la table à force de taper la tête dessus lol, je sens que je résultat n'est pas loin, mais ça commence à me secouer le cocotier cette affaire
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 23/03/2012 à 21:35
essayes comme ça, sinon avec le code du formulaire ce serait plus facile, sinon il y aune autre solution avec des array

<?php 
if(isset($_POST['i'])) { 
     $i=$_POST['i'];  
 }else { 
 $i=0; //si tu compare $n dans ta boucle il vaut mieux que i par defaut soit un nombre 
} 

 $n = 1;  
 while ($n <= $i) {  

 if ( isset($_POST['i_nom'.$n])){ 
   
  ${'i_nom'.$n}= $_POST['i_nom'.$n];  
   
 }else{  
  ${'i_nom'.$n} = "";  
 }   
 if ( isset($_POST["i_adresse.$n"])){ 
  ${'i_adresse'.$n} = $_POST['i_adresse'.$n];  
 }else { 
  ${'i_adresse'.$n}= "";  
 }   
 if ( isset($_POST["i_mode_fctmt.$n"])){ 
  ${'i_mode_fctmt'.$n} = $_POST['i_mode_fctmt'.$n];  
 }else { 
  ${'i_mode_fctmt'.$n} = "";  
 } 
  $n++;  
}
0