Récupérer lé valeur de champs dynamiques
Résolu
maguidi
-
maguidi -
maguidi -
Bonjour,
J'ai besoin d'aide je sais plus quoi faire.
j'ai un formulaire sortie de stock qui permet de saisir un article sa quantité, l'utilsateur peut sortir autant d'article qu'il veut et pur cele il lui suffit juste de cliquer sur un bouton ajout qu ajoute deux champ dynamique à chaque clic. Jusque là tout marche mais le probléme est que quand je n'arrive pas à récupérer toutes les données je récupére seulement les valeurs des champs par défaut et le dernier champs ajoutés. C'est comme ci les valeurs du dernier champ ajouté écrasait ceux d'avant.
Voici le code sur deux pages
sortie_stock.php
<?php
include("connexionbd.php");
$numero_article = $_GET['num_article'];
$select_article = mysql_query("SELECT Designations, Stock FROM articles WHERE KArticles='$numero_article'");
$res_article = mysql_fetch_array($select_article);
$article = $res_article['Designations'];
$stock = $res_article['Stock'];
$select_activite = mysql_query("SELECT KActivites, NomActivite FROM activites");
?>
<html>
<head>
<STYLE>
A:LINK { color: #000050; text-decoration: none }
A:VISITED { color: #000050; text-decoration: none }
A:HOVER { background-color: #FFFFFF; text-transform: uppercase; font-weight:bold; color:#000050; text-decoration: none }
A:ACTIVE {color: #000050; text-decoration: none}
</STYLE>
<script type="text/javascript">
<!--
//VERIFICATION DEFORMULLAIRE
function verif_formulaire()
{
// Control sur la saisie de la quantité d'article en entrée pour envoi de message d'erreur si le champ est vide
if(document.sortie_stock.quantite.value == "")
{
alert("Veuillez entrer la quantité de l'article!");
document.sortie_stock.quantite.focus();
return false;
}
// Control sur la selection de l'activite pour envoi de message d'erreur si le champ est vide
if(document.sortie_stock.activite.value == "")
{
alert("Veuillez choisir une activite!");
document.sortie_stock.activite.focus();
return false;
}
var chkZ = 1;
// Control sur la saisie de la quantité de l'article à sortir pour envoi de message d'erreur si la quantité est < 0
for(i=0;i<document.soortie_stock.quantite.value.length;++i)
{
if(document.sortie_stock.quantite.value.charAt(i) < "0" || document.sortie_stock.quantite.value.charAt(i) > "9")
{
chkZ = -1;
}
}
if(chkZ == -1)
{
alert("La quantite de l'article à sortir ne pas être négative, ni égale à 0!");
document.sortie_stock.quantite.focus();
return false;
}
}
var d, d2, design, f, f2,qest, g, g2, qast, i=0;
// AJOUT DE CHAMPS DYNAMIQUES
function plus()
{
//ajouter un champ avec son "name" propre;
d=document.getElementById('cadre2');
f=document.getElementById('cadre3');
g=document.getElementById('cadre4');
d2=d.getElementsByTagName('nom2');
f2=f.getElementsByTagName('nom3');
g2=f.getElementsByTagName('nom4');
design=document.createElement('input');
qest=document.createElement('input');
qast=document.createElement('input');
design.setAttribute('type','text');
qest.setAttribute('type','decimal');
qast.setAttribute('type','decimal');
design.setAttribute('name','design'+d2.length);
qest.setAttribute('name','qest'+f2.length);
qast.setAttribute('name',' qast'+g2.length);
d.appendChild(design);
f.appendChild(qest);
g.appendChild( qast);
}
//-->
</script>
</head>
<BODY>
<table border=1>
<tr>
<td width=250 height=15> <B> <center> <a href="modif_article.php?num_article=<?php echo $numero_article;?>"> Modifier </a> </B> </center></td>
<td width=250 height=15> <B> <center> <a href="entree_stock.php?num_article=<?php echo $numero_article;?>"> Entrée de stock </a> </center> </B> </center> </td>
<td width=250 height=15> <B> <center> <font size=3 color=000000> Sortie de stock </font> </B> </center> </td>
<td width=250 height=15> <B> <center> <center> <font size=3 color=000000> Supprimer </font> </a> </B> </center> </td>
</tr>
</table> <br> <br> <br>
<div align=right>
<table>
<tr>
<td width=300>
<fieldset color=#000050>
<legend> <font size=5 color=#000050> Rechercher Articles </font> </legend> <br>
<center><input type="text" id="cherch" name="cherch">
<input type="submit" value="OK"> </center>
<fieldset
</td>
<tr>
</table>
</div>
<form name="sortie_stock" action="sortie_stock_bd.php" method="post" enctype='multipart/form-data' onSubmit="return verif_formulaire()">
<input type="hidden" id="num" name="num" value="<?php echo $numero_article;?>">
<fieldset style="border: 3px double" color=#000050 >
<legend> <font size=5 color=#000050> Sortie de stock </font> </legend> <br> <br>
<center>
<table border bordercolor=#000000>
<tr>
<td width=200 height=15> <center> <B> Désignations </center> </B> </td>
<td width=200 height=15> <center> <B> Quantité en stock </center> </B> </td>
<td width=200 height=15> <center> <B> Quantité à sortir </center> </B> </td>
<td width=200 height=15> <center> <B> Activité </center> </B> </td>
</tr>
<tr>
<td width=200 height=100> <input type="text" id="article" name="article" value="<?php echo $article;?>">
<div id="cadre2" name="cadre2" name="nom2">
</div>
</td>
<td width=15 height=15> <input type="decimal" id="stock" name="stock" value="<?php echo $stock;?>">
<div id="cadre3" name="nom3">
</div>
</td>
<td width=200 height=100> <input type="decimal" id="quantite" name="quantite">
<div id="cadre4" name="nom4">
</div>
</td>
<td width=200 height=100>
<select id="activite" name="activite" >
<option value="" selected="selected"> Choisir une activité </option> <?php
while($res_activite = mysql_fetch_array($select_activite))
{?>
<option value="<?php echo $res_activite['NomActivite'] ?>"> <?php echo $res_activite['NomActivite'] ?> </option> <?php
}?>
</select>
</td>
</tr>
</table> <br>
<input type="button" value="Ajouter" onclick="plus()" />
<input type="submit" value="Valider">
<center>
<fieldset> <br> <br>
</form>
</BODY>
sotie_stock_bd
<?php
include("connexionbd.php");
//$num_article = $_POST['num'];
//$article = $_POST['article'];
//$stock = $_POST['stock'];
//$stock = $_POST['quantite'];
//$activite = $_POST['activite'];
//le formulaire poste les valeurs de tous les champs dans un array $_POST avec comme cle le nom du champ
$array_design = array();
$array_qenst = array();
$array_qast = array();
foreach($_POST as $cle=>$value)
{
//on recupere les valeurs des champs cadre2 et on les stoke dans un array
if(substr($cle,0,6)=="design")
{
$array_design[]=$value;
}
//on recupere les valeurs des cadre4 et on les stoke dans un array
if(substr($cle,0,4)=="qest")
{
//$array_cadre3[]=$value;
}
//on recupere les valeurs des champs cadre4 et on les stoke dans un array
if(substr($cle,0,4)=="qast")
{
$array_qast[]=$value;
}
}
print_r($_POST);
//print_r($array_cadre2);
//echo $array_cadre[0];
for ($i=0; $i<sizeof($array_design); $i++)
{
$select_sortie = mysql_query("INSERT INTO sorties (FKArticles) VALUES('$array_design[$i]')");
if($select_sortie>0)
{echo "yes";}else{echo"no";}
}
?>
J'ai besoin d'aide je sais plus quoi faire.
j'ai un formulaire sortie de stock qui permet de saisir un article sa quantité, l'utilsateur peut sortir autant d'article qu'il veut et pur cele il lui suffit juste de cliquer sur un bouton ajout qu ajoute deux champ dynamique à chaque clic. Jusque là tout marche mais le probléme est que quand je n'arrive pas à récupérer toutes les données je récupére seulement les valeurs des champs par défaut et le dernier champs ajoutés. C'est comme ci les valeurs du dernier champ ajouté écrasait ceux d'avant.
Voici le code sur deux pages
sortie_stock.php
<?php
include("connexionbd.php");
$numero_article = $_GET['num_article'];
$select_article = mysql_query("SELECT Designations, Stock FROM articles WHERE KArticles='$numero_article'");
$res_article = mysql_fetch_array($select_article);
$article = $res_article['Designations'];
$stock = $res_article['Stock'];
$select_activite = mysql_query("SELECT KActivites, NomActivite FROM activites");
?>
<html>
<head>
<STYLE>
A:LINK { color: #000050; text-decoration: none }
A:VISITED { color: #000050; text-decoration: none }
A:HOVER { background-color: #FFFFFF; text-transform: uppercase; font-weight:bold; color:#000050; text-decoration: none }
A:ACTIVE {color: #000050; text-decoration: none}
</STYLE>
<script type="text/javascript">
<!--
//VERIFICATION DEFORMULLAIRE
function verif_formulaire()
{
// Control sur la saisie de la quantité d'article en entrée pour envoi de message d'erreur si le champ est vide
if(document.sortie_stock.quantite.value == "")
{
alert("Veuillez entrer la quantité de l'article!");
document.sortie_stock.quantite.focus();
return false;
}
// Control sur la selection de l'activite pour envoi de message d'erreur si le champ est vide
if(document.sortie_stock.activite.value == "")
{
alert("Veuillez choisir une activite!");
document.sortie_stock.activite.focus();
return false;
}
var chkZ = 1;
// Control sur la saisie de la quantité de l'article à sortir pour envoi de message d'erreur si la quantité est < 0
for(i=0;i<document.soortie_stock.quantite.value.length;++i)
{
if(document.sortie_stock.quantite.value.charAt(i) < "0" || document.sortie_stock.quantite.value.charAt(i) > "9")
{
chkZ = -1;
}
}
if(chkZ == -1)
{
alert("La quantite de l'article à sortir ne pas être négative, ni égale à 0!");
document.sortie_stock.quantite.focus();
return false;
}
}
var d, d2, design, f, f2,qest, g, g2, qast, i=0;
// AJOUT DE CHAMPS DYNAMIQUES
function plus()
{
//ajouter un champ avec son "name" propre;
d=document.getElementById('cadre2');
f=document.getElementById('cadre3');
g=document.getElementById('cadre4');
d2=d.getElementsByTagName('nom2');
f2=f.getElementsByTagName('nom3');
g2=f.getElementsByTagName('nom4');
design=document.createElement('input');
qest=document.createElement('input');
qast=document.createElement('input');
design.setAttribute('type','text');
qest.setAttribute('type','decimal');
qast.setAttribute('type','decimal');
design.setAttribute('name','design'+d2.length);
qest.setAttribute('name','qest'+f2.length);
qast.setAttribute('name',' qast'+g2.length);
d.appendChild(design);
f.appendChild(qest);
g.appendChild( qast);
}
//-->
</script>
</head>
<BODY>
<table border=1>
<tr>
<td width=250 height=15> <B> <center> <a href="modif_article.php?num_article=<?php echo $numero_article;?>"> Modifier </a> </B> </center></td>
<td width=250 height=15> <B> <center> <a href="entree_stock.php?num_article=<?php echo $numero_article;?>"> Entrée de stock </a> </center> </B> </center> </td>
<td width=250 height=15> <B> <center> <font size=3 color=000000> Sortie de stock </font> </B> </center> </td>
<td width=250 height=15> <B> <center> <center> <font size=3 color=000000> Supprimer </font> </a> </B> </center> </td>
</tr>
</table> <br> <br> <br>
<div align=right>
<table>
<tr>
<td width=300>
<fieldset color=#000050>
<legend> <font size=5 color=#000050> Rechercher Articles </font> </legend> <br>
<center><input type="text" id="cherch" name="cherch">
<input type="submit" value="OK"> </center>
<fieldset
</td>
<tr>
</table>
</div>
<form name="sortie_stock" action="sortie_stock_bd.php" method="post" enctype='multipart/form-data' onSubmit="return verif_formulaire()">
<input type="hidden" id="num" name="num" value="<?php echo $numero_article;?>">
<fieldset style="border: 3px double" color=#000050 >
<legend> <font size=5 color=#000050> Sortie de stock </font> </legend> <br> <br>
<center>
<table border bordercolor=#000000>
<tr>
<td width=200 height=15> <center> <B> Désignations </center> </B> </td>
<td width=200 height=15> <center> <B> Quantité en stock </center> </B> </td>
<td width=200 height=15> <center> <B> Quantité à sortir </center> </B> </td>
<td width=200 height=15> <center> <B> Activité </center> </B> </td>
</tr>
<tr>
<td width=200 height=100> <input type="text" id="article" name="article" value="<?php echo $article;?>">
<div id="cadre2" name="cadre2" name="nom2">
</div>
</td>
<td width=15 height=15> <input type="decimal" id="stock" name="stock" value="<?php echo $stock;?>">
<div id="cadre3" name="nom3">
</div>
</td>
<td width=200 height=100> <input type="decimal" id="quantite" name="quantite">
<div id="cadre4" name="nom4">
</div>
</td>
<td width=200 height=100>
<select id="activite" name="activite" >
<option value="" selected="selected"> Choisir une activité </option> <?php
while($res_activite = mysql_fetch_array($select_activite))
{?>
<option value="<?php echo $res_activite['NomActivite'] ?>"> <?php echo $res_activite['NomActivite'] ?> </option> <?php
}?>
</select>
</td>
</tr>
</table> <br>
<input type="button" value="Ajouter" onclick="plus()" />
<input type="submit" value="Valider">
<center>
<fieldset> <br> <br>
</form>
</BODY>
sotie_stock_bd
<?php
include("connexionbd.php");
//$num_article = $_POST['num'];
//$article = $_POST['article'];
//$stock = $_POST['stock'];
//$stock = $_POST['quantite'];
//$activite = $_POST['activite'];
//le formulaire poste les valeurs de tous les champs dans un array $_POST avec comme cle le nom du champ
$array_design = array();
$array_qenst = array();
$array_qast = array();
foreach($_POST as $cle=>$value)
{
//on recupere les valeurs des champs cadre2 et on les stoke dans un array
if(substr($cle,0,6)=="design")
{
$array_design[]=$value;
}
//on recupere les valeurs des cadre4 et on les stoke dans un array
if(substr($cle,0,4)=="qest")
{
//$array_cadre3[]=$value;
}
//on recupere les valeurs des champs cadre4 et on les stoke dans un array
if(substr($cle,0,4)=="qast")
{
$array_qast[]=$value;
}
}
print_r($_POST);
//print_r($array_cadre2);
//echo $array_cadre[0];
for ($i=0; $i<sizeof($array_design); $i++)
{
$select_sortie = mysql_query("INSERT INTO sorties (FKArticles) VALUES('$array_design[$i]')");
if($select_sortie>0)
{echo "yes";}else{echo"no";}
}
?>
A voir également:
- Récupérer lé valeur de champs dynamiques
- Recuperer message whatsapp supprimé - Guide
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment récupérer un document dans le presse-papier samsung - Guide
- Tableaux croisés dynamiques - Guide
8 réponses
Bonjour
As-tu fait un print_r($_POST) au début de ton traitement ? tu verrais que tu ne récupères que la dernière ligne ajoutée.
Tu donnes le même nom à toutes tes nouvelles lignes.
Dans ta fonction plus, tu récupères le nombre de lignes existante par le nombre d'éléments de d2
d2=d.getElementsByTagName('nom2'); (je ne m'intéresse qu'à un seul champ)
Mais tu ne crées pas de nouvel élément qui s'appelle 'nom2', d2.length reste à 0 et les nouveaux champs que tu crées s'appellent tous design0,quest0 et qast0
Comme tes champs s'appellent en fait article, stock et quantite, il serait beaucoup plus simple (j'ai fait l'essai) de les renommer article[], stock[] et quantite[]
Dans la fonction plus, tu laisses tomber d2,f2,g2 qui ne servent à rien et tu modifies :
design.setAttribute('name','article[]');
qest.setAttribute('name','stock[]');
qast.setAttribute('name','quantite[]');
Comme ça tu vas récupérer tous les champs saisis, pas seulement la dernière ligne ajoutée. Bien sûr il faut modifier le traitement aussi, mais ça devrait plutôt le simplifier
As-tu fait un print_r($_POST) au début de ton traitement ? tu verrais que tu ne récupères que la dernière ligne ajoutée.
Tu donnes le même nom à toutes tes nouvelles lignes.
Dans ta fonction plus, tu récupères le nombre de lignes existante par le nombre d'éléments de d2
d2=d.getElementsByTagName('nom2'); (je ne m'intéresse qu'à un seul champ)
Mais tu ne crées pas de nouvel élément qui s'appelle 'nom2', d2.length reste à 0 et les nouveaux champs que tu crées s'appellent tous design0,quest0 et qast0
Comme tes champs s'appellent en fait article, stock et quantite, il serait beaucoup plus simple (j'ai fait l'essai) de les renommer article[], stock[] et quantite[]
Dans la fonction plus, tu laisses tomber d2,f2,g2 qui ne servent à rien et tu modifies :
design.setAttribute('name','article[]');
qest.setAttribute('name','stock[]');
qast.setAttribute('name','quantite[]');
Comme ça tu vas récupérer tous les champs saisis, pas seulement la dernière ligne ajoutée. Bien sûr il faut modifier le traitement aussi, mais ça devrait plutôt le simplifier
ça marche à moitié j'ai juste mis ça
design.setAttribute('name','article[]');
qest.setAttribute('name','stock[]');
qast.setAttribute('name','quantite[]');
et j'ai supprimé d2,f2,g2 comme u m la di é la j'arrive à récupérer les champs que j'ai ajouté mais je récupére pas le champs par défaut qu existe
quand j fais un print_r($_POST) j'obtient ceci
Array ( [num] => 46 [article] => Array ( [0] => A1 [1] => A2 ) [stock] => Array ( [0] => 1 [1] => 2 ) [quantite] => Array ( [0] => 1 [1] => 2 ) [activite] => ACT1 )
Sur mon formulaire j'ai fais ceci
Désignations Quantité en stock Quantité à sortir Activité
A3 0 0 ACT1 (ligne par défaut)
A1 1 1 (ligne ajouté)
A2 2 2 (ligne ajouté)
mais le [num] => 46 c'est le id de l'article du champ par défaut ce ki manque c'est le nom la quantité et l stock
design.setAttribute('name','article[]');
qest.setAttribute('name','stock[]');
qast.setAttribute('name','quantite[]');
et j'ai supprimé d2,f2,g2 comme u m la di é la j'arrive à récupérer les champs que j'ai ajouté mais je récupére pas le champs par défaut qu existe
quand j fais un print_r($_POST) j'obtient ceci
Array ( [num] => 46 [article] => Array ( [0] => A1 [1] => A2 ) [stock] => Array ( [0] => 1 [1] => 2 ) [quantite] => Array ( [0] => 1 [1] => 2 ) [activite] => ACT1 )
Sur mon formulaire j'ai fais ceci
Désignations Quantité en stock Quantité à sortir Activité
A3 0 0 ACT1 (ligne par défaut)
A1 1 1 (ligne ajouté)
A2 2 2 (ligne ajouté)
mais le [num] => 46 c'est le id de l'article du champ par défaut ce ki manque c'est le nom la quantité et l stock
c bon ça marche en fait le truc c que j'avais déjà nommé mes champs par défaut par le mem nom article, quantité et stock. Donc j'ai changé leur nom en ajoutant juste 1 à chak nom pour les différencier article1,
quantité 1et stock1 et là ça marche jarrive à récupérer toutes les valeurs.
Merci pour ton aide j sais pas c que j'aurai fais sans toi
quantité 1et stock1 et là ça marche jarrive à récupérer toutes les valeurs.
Merci pour ton aide j sais pas c que j'aurai fais sans toi
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
As-tu bien renommé AUSSI les champs par défaut article[] au lieu de article, idem pour stock et quantite
wé j l'ai fais tout marche.
Mais j'ai un autre problème qui n'a rien a voir avec ça c sur les listes déroulantes liées
j'ai des articles qui appartiennent à des familles et des sous familles. Avant d'arriver à l'article on a une familles et 4 sous familles, par exemple l'article A1 appartient a la sous famille3 qui appartient à la sous famille2 qui appartient à la sous famille1 qui appartient à la familles1. lorsque l'utilisateur veut créer un article il doit d'abord choisir la famille sur la liste1 et et sur la liste 2 il n'y aura que les sous familles1 appartenant à la famille qu'il a choisi, ensuite il fait son choix sur la liiste2 et sur la liste 3 il n'y aura que les sous familles2 appartenant à la sous famille1 qu'il a choisi et ainsi de suite.
Dans ma base de données j'ai une table famille, une table sous famille1, une table sous famille2, une table sous familles3 et une table articles.
J'ai réussi à l faire avec duex liste mais le truc c que j'arrive pas à l faire avc 4 liste.
J peux poster mon code si tu y connais kelk choz
Mais j'ai un autre problème qui n'a rien a voir avec ça c sur les listes déroulantes liées
j'ai des articles qui appartiennent à des familles et des sous familles. Avant d'arriver à l'article on a une familles et 4 sous familles, par exemple l'article A1 appartient a la sous famille3 qui appartient à la sous famille2 qui appartient à la sous famille1 qui appartient à la familles1. lorsque l'utilisateur veut créer un article il doit d'abord choisir la famille sur la liste1 et et sur la liste 2 il n'y aura que les sous familles1 appartenant à la famille qu'il a choisi, ensuite il fait son choix sur la liiste2 et sur la liste 3 il n'y aura que les sous familles2 appartenant à la sous famille1 qu'il a choisi et ainsi de suite.
Dans ma base de données j'ai une table famille, une table sous famille1, une table sous famille2, une table sous familles3 et une table articles.
J'ai réussi à l faire avec duex liste mais le truc c que j'arrive pas à l faire avc 4 liste.
J peux poster mon code si tu y connais kelk choz