[PHP] Formulaire dynamique recuperation var
Résolu
tkz
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
tkz Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
tkz Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Bonjour, j'ai crée un formulaire dynamique qui remplit un tableau dont le nombre de lignes depend du nombres d'occurences dans ma BDD mysql. Chaque case du tableau contient plusieurs inputs remplis des valeurs. Le but etant de modifier dans la BDD tout les champs en meme temps.
Voici mon tableau :
echo"<form method='POST' action='mod.php' enctype='multipart/form-data'>";
$total=requete('select chref from `references`;'); // total des enregistrements
$nb=mysql_num_rows($total);
$rows=round($nb/4); //nombre de lignes qui affichent 4 refs
$lim=0; //separation des resultats en lignes
echo "<table>";
for($i=0; $i< $rows+1; $i++) //pour i, i de 0 a x nombre de lignes
{
echo"<tr><td>";
$requete="select id_ref, chref, lienref, nomref, ordre from `references` order by ordre limit 4 offset ".$lim.";";
$req=requete($requete);
while($res=mysql_fetch_object($req))
{
for($j=0; $j< 3; $j++) //pour j,j de 1 a 4 enregistrements par ligne
{
$array[$j]=array(
'0'=> $res->chref,
'1'=> $res->nomref,
'2'=> $res->lienref,
'3'=> $res->ordre,
'4' => $res->id_ref
);
$id=$array[1][4];
$case="<table><tr><td><img src='".$array[1][0]."' width='75' height='75'></img></td><tr>
<tr><td><a href='ajout.php?n=$name&u=$url&m=1&i=$id'>Modifier l'image</a></td></tr>
<tr><td><input size='25' maxlenght='50' name='".$array[1][1]."' value='".$array[1][1]."'></td></tr>
<tr><td><input size='25' maxlenght='50' name='".$array[1][2]."' value='".$array[1][2]."'></td></tr>
<tr><td>Position :<input size='1' maxlenght='3' name='".$array[1][3]."' value='".$array[1][3]."'></td></tr>
<tr height='10'><td></td></tr></table>";
}
echo "<td>".$case."</td>";
}
$lim=$lim+4; // on incremente pour la requete suivante
}
echo"</tr></table>";
echo"<table><tr><td width='727'><input type='submit' value='Modifier'></td></tr></table>";
Lorsque je veux recuperer la valeur des inputs :
foreach ( $array as $var )
{
echo $array[1][1];
}
m'affiche seulement la valeur du dernier input, autant de fois qu'il ya de cases remplies sur la derniere ligne du tableau... pas convaincant...
Dois je utiliser une autre boucle ? Ou bien ajouter un attribut dans mes inputs ( id ou un hidden) et laisser 'name' statique ?
Je continue a chercher des solutions, mais je vous remercie beaucoup si vous pouvez m'aider un peu !!!
Voici mon tableau :
echo"<form method='POST' action='mod.php' enctype='multipart/form-data'>";
$total=requete('select chref from `references`;'); // total des enregistrements
$nb=mysql_num_rows($total);
$rows=round($nb/4); //nombre de lignes qui affichent 4 refs
$lim=0; //separation des resultats en lignes
echo "<table>";
for($i=0; $i< $rows+1; $i++) //pour i, i de 0 a x nombre de lignes
{
echo"<tr><td>";
$requete="select id_ref, chref, lienref, nomref, ordre from `references` order by ordre limit 4 offset ".$lim.";";
$req=requete($requete);
while($res=mysql_fetch_object($req))
{
for($j=0; $j< 3; $j++) //pour j,j de 1 a 4 enregistrements par ligne
{
$array[$j]=array(
'0'=> $res->chref,
'1'=> $res->nomref,
'2'=> $res->lienref,
'3'=> $res->ordre,
'4' => $res->id_ref
);
$id=$array[1][4];
$case="<table><tr><td><img src='".$array[1][0]."' width='75' height='75'></img></td><tr>
<tr><td><a href='ajout.php?n=$name&u=$url&m=1&i=$id'>Modifier l'image</a></td></tr>
<tr><td><input size='25' maxlenght='50' name='".$array[1][1]."' value='".$array[1][1]."'></td></tr>
<tr><td><input size='25' maxlenght='50' name='".$array[1][2]."' value='".$array[1][2]."'></td></tr>
<tr><td>Position :<input size='1' maxlenght='3' name='".$array[1][3]."' value='".$array[1][3]."'></td></tr>
<tr height='10'><td></td></tr></table>";
}
echo "<td>".$case."</td>";
}
$lim=$lim+4; // on incremente pour la requete suivante
}
echo"</tr></table>";
echo"<table><tr><td width='727'><input type='submit' value='Modifier'></td></tr></table>";
Lorsque je veux recuperer la valeur des inputs :
foreach ( $array as $var )
{
echo $array[1][1];
}
m'affiche seulement la valeur du dernier input, autant de fois qu'il ya de cases remplies sur la derniere ligne du tableau... pas convaincant...
Dois je utiliser une autre boucle ? Ou bien ajouter un attribut dans mes inputs ( id ou un hidden) et laisser 'name' statique ?
Je continue a chercher des solutions, mais je vous remercie beaucoup si vous pouvez m'aider un peu !!!
A voir également:
- [PHP] Formulaire dynamique recuperation var
- Récupération de déchets - Guide
- Whatsapp formulaire opposition - Guide
- Tableau croisé dynamique - Guide
- Formulaire de réclamation facebook compte désactivé - Guide
- Formulaire de reclamation instagram - Guide
4 réponses
salut,
à première vue, ça vient de la variable que tu utilises pour l'affichage dans ton foreach : c'est pas $array qui change mais $var. c'est donc elle qu'il te faut utiliser pour ton echo. Essaye ça et dis moi si ça ne fonctionne toujours pas correctement
à première vue, ça vient de la variable que tu utilises pour l'affichage dans ton foreach : c'est pas $array qui change mais $var. c'est donc elle qu'il te faut utiliser pour ton echo. Essaye ça et dis moi si ça ne fonctionne toujours pas correctement
Salut, merci pour ta reponse, j'ai reussi finalement a recuperer mes post en contournant le probleme. J'ai ajouté un bouton modifier dans chaque case, meme si c'est pas top au niveau graphique.
//reprise du code du premier message
$id=$array[1][4];
$case="<form method='POST' action='mod.php?c=$id'><table>
<tr><td><img src='".$array[1][0]."' width='75' height='75'></img></td><tr>
<tr><td><a href=ajout.php?m=1&i=$id'>Modifier l'image</a></td></tr>
<tr><td><input size='25' maxlenght='50' name='name".$id."' value=".stripslashes($array[1][1])."></td></tr>
<tr><td><input size='25' maxlenght='50' name='url".$id."' value='".$array[1][2]."'></td></tr>
<tr><td>Position :<input size='1' maxlenght='3' name='ordre".$id."' value='".$array[1][3]."'></td></tr>
<tr><td><input type='submit' value='Modifier'></td></tr></table></form>";
Pour recuperer les post je procede comme ceci :
if(!empty($_GET))
{
$url="url".$_GET['c'];
$name="name".$_GET['c'];
$ordre="ordre".$_GET['c'];
eval('$url = $_POST["'.$url.'"];'); //ici
eval('$name = $_POST["'.$name.'"];');
eval('$ordre = $_POST["'.$ordre.'"];');
if(!empty($name))
{
if(!empty($url))
{
if(!empty($ordre)|| $ordre==0)
{
$ok=requete('select count(*)as `total` from `references` where ac="1";');
$nor=mysql_fetch_object($ok);
if(($ordre <= $nor->total) && $ordre != 0)
{
$namef=str_replace(" ", " ", $name);
$namef=str_replace("'", "'", $namef);
$g=requete('select nomref, lienref, ordre from `references` where id_ref="'.$_GET['c'].'" ;');
$go=mysql_fetch_object($g);
$ref=$go->nomref;
if(strpos($go,$namef) === true)
{
$message="Pas de modification ?";
$urlf="mod.php";
$att="";
}
//echanger l'ordre
Par contre, quand je veux afficher "pas de modification", aucune fonction de comparaison ne fonctionne. Quand j'echo le type de $namef ou $name et de $go->nomref, il s'affiche string, mais impossible de les comparer.
Du coup, meme si aucune modification n'est faite, ca affiche modification reussie. Ce n'est pas vraiment genant, mais si on ne fait pas attention, on peut modifier une case sans savoir...
Si tu as une petite idee pour comparer ces deux valeurs, ca serait genial, j'ai deja presque utilisé toutes les fonctions str*.
En tout cas, merci encore!
//reprise du code du premier message
$id=$array[1][4];
$case="<form method='POST' action='mod.php?c=$id'><table>
<tr><td><img src='".$array[1][0]."' width='75' height='75'></img></td><tr>
<tr><td><a href=ajout.php?m=1&i=$id'>Modifier l'image</a></td></tr>
<tr><td><input size='25' maxlenght='50' name='name".$id."' value=".stripslashes($array[1][1])."></td></tr>
<tr><td><input size='25' maxlenght='50' name='url".$id."' value='".$array[1][2]."'></td></tr>
<tr><td>Position :<input size='1' maxlenght='3' name='ordre".$id."' value='".$array[1][3]."'></td></tr>
<tr><td><input type='submit' value='Modifier'></td></tr></table></form>";
Pour recuperer les post je procede comme ceci :
if(!empty($_GET))
{
$url="url".$_GET['c'];
$name="name".$_GET['c'];
$ordre="ordre".$_GET['c'];
eval('$url = $_POST["'.$url.'"];'); //ici
eval('$name = $_POST["'.$name.'"];');
eval('$ordre = $_POST["'.$ordre.'"];');
if(!empty($name))
{
if(!empty($url))
{
if(!empty($ordre)|| $ordre==0)
{
$ok=requete('select count(*)as `total` from `references` where ac="1";');
$nor=mysql_fetch_object($ok);
if(($ordre <= $nor->total) && $ordre != 0)
{
$namef=str_replace(" ", " ", $name);
$namef=str_replace("'", "'", $namef);
$g=requete('select nomref, lienref, ordre from `references` where id_ref="'.$_GET['c'].'" ;');
$go=mysql_fetch_object($g);
$ref=$go->nomref;
if(strpos($go,$namef) === true)
{
$message="Pas de modification ?";
$urlf="mod.php";
$att="";
}
//echanger l'ordre
Par contre, quand je veux afficher "pas de modification", aucune fonction de comparaison ne fonctionne. Quand j'echo le type de $namef ou $name et de $go->nomref, il s'affiche string, mais impossible de les comparer.
Du coup, meme si aucune modification n'est faite, ca affiche modification reussie. Ce n'est pas vraiment genant, mais si on ne fait pas attention, on peut modifier une case sans savoir...
Si tu as une petite idee pour comparer ces deux valeurs, ca serait genial, j'ai deja presque utilisé toutes les fonctions str*.
En tout cas, merci encore!
Ah, j'oubliais aussi, qd je defini la taille du tableau, il ne faut pas utiliser la fonction round, mais ceil comme ca:
$rows=ceil($nb/4); //nombre de lignes qui affichent 4 refs
round renvoie l'entier le plus proche, alors que ceil renverra toujours celui au dessus.
$rows=ceil($nb/4); //nombre de lignes qui affichent 4 refs
round renvoie l'entier le plus proche, alors que ceil renverra toujours celui au dessus.
Resalut ! En fait, la comparaison fonctionne nickel, meme pas besoin de fonction particuliere. C'etait juste mon if/else qui etait mal construit , voila le code :
if(($ordre <= $nor->total) && $ordre != 0)
{
$namef=str_replace(" ", " ", $name);
$namef=str_replace("'", "'", $namef);
$g=requete('select nomref, lienref, ordre from `references` where id_ref="'.$_GET['c'].'" ;');
$go=mysql_fetch_object($g);
if($name!=$go->nomref || $url!=$go->lienref || $ordre!=$go->ordre) //ici
{
//echanger l'ordre
$i=requete('select ordre from `references` where id_ref="'.$_GET['c'].'";');
$id=mysql_fetch_object($i);
$ech=requete('update `references` set ordre="'.$id->ordre.'" where ordre="'.$ordre.'";');
//modifier l'enregistrement
$ech2=requete('update `references` set ordre="'.$ordre.'" where id_ref="'.$_GET['c'].'";');
$modif=requete('update `references` set nomref="'.addslashes($namef).'", lienref="'.$url.'" where id_ref="'.$_GET['c'].'";');
if($ech2)
{
$message=" Modification effectuée !";
$urlf="mod.php";
$att="";
}
}
else
{
$message="Pas de modification ?";
$urlf="mod.php";
$att="";
}
}
Voila ! Bonne soirée !!
if(($ordre <= $nor->total) && $ordre != 0)
{
$namef=str_replace(" ", " ", $name);
$namef=str_replace("'", "'", $namef);
$g=requete('select nomref, lienref, ordre from `references` where id_ref="'.$_GET['c'].'" ;');
$go=mysql_fetch_object($g);
if($name!=$go->nomref || $url!=$go->lienref || $ordre!=$go->ordre) //ici
{
//echanger l'ordre
$i=requete('select ordre from `references` where id_ref="'.$_GET['c'].'";');
$id=mysql_fetch_object($i);
$ech=requete('update `references` set ordre="'.$id->ordre.'" where ordre="'.$ordre.'";');
//modifier l'enregistrement
$ech2=requete('update `references` set ordre="'.$ordre.'" where id_ref="'.$_GET['c'].'";');
$modif=requete('update `references` set nomref="'.addslashes($namef).'", lienref="'.$url.'" where id_ref="'.$_GET['c'].'";');
if($ech2)
{
$message=" Modification effectuée !";
$urlf="mod.php";
$att="";
}
}
else
{
$message="Pas de modification ?";
$urlf="mod.php";
$att="";
}
}
Voila ! Bonne soirée !!