Incrémentation variables php
Thomas
-
Fallentree Messages postés 2445 Statut Membre -
Fallentree Messages postés 2445 Statut Membre -
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:
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
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:
- Incrémentation variables php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php ✓ - Forum PHP
- Php alert ✓ - Forum PHP
- Alert PHP - Forum PHP
6 réponses
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 ....
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 ....
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 :
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++)
{
}
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:
Et je l'extrait comme ça:
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
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
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?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question<?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++;
}
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
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
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++;
}