[RESOLU] problème de récupération de variable d'un tableau foreach as key

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] problème de récupération de variable d'un tableau foreach as key

Re: problème de récupération de variable d'un tableau foreach as key

par juvamine » 21 oct. 2015, 09:14

Bonjour,

Il ne faut pas utiliser une boucle foreach() qui ne parcours les éléments que d'un seul de tes tableaux sans faire bouger les autres, mais une boucle for() qui te donnera un index commun à l'ensemble de tes tableaux :
for ($i = 0; $i < count($_POST['ref_Produit']); $i++) 
{
  $num_devis = $_POST['num_devis'][$i];
  $ref_Produit = $_POST['ref_Produit'][$i];
  $nom_produit = $_POST['nom_produit'][$i];
  $prix_produit = $_POST['prix_produit'][$i];
  $quantite = $_POST['quantite'][$i];
  $t = $_POST['t'][$i]; 
...
}
A noter par ailleurs que la constitution de ta requête SQL $sql2 est très étrange et ne donnera à priori pas du tout le résultat escompté à moins d'être corrigée :)
salut à toi
merci à toi de m'avoir aidé dans ce problème, ton code m'a grandement servi et comprend un peu mieux mon erreur.
oui, en effet, ma requette n'est pas bonne dutout "Et les guillemets des variables, ils sont où?"LOL
trop de temps passé sur cette page pour ce problème que je ne voyais même plus les autres erreurs.
encore merci.
je le met en résolu

Re: problème de récupération de variable d'un tableau foreach as key

par Ryle » 20 oct. 2015, 10:49

Bonjour,

Il ne faut pas utiliser une boucle foreach() qui ne parcours les éléments que d'un seul de tes tableaux sans faire bouger les autres, mais une boucle for() qui te donnera un index commun à l'ensemble de tes tableaux :
for ($i = 0; $i < count($_POST['ref_Produit']); $i++) 
{
  $num_devis = $_POST['num_devis'][$i];
  $ref_Produit = $_POST['ref_Produit'][$i];
  $nom_produit = $_POST['nom_produit'][$i];
  $prix_produit = $_POST['prix_produit'][$i];
  $quantite = $_POST['quantite'][$i];
  $t = $_POST['t'][$i]; 
...
}
A noter par ailleurs que la constitution de ta requête SQL $sql2 est très étrange et ne donnera à priori pas du tout le résultat escompté à moins d'être corrigée :)

problème de récupération de variable d'un tableau foreach as key

par juvamine » 20 oct. 2015, 09:59

bonjour à tous.
j'ai des soucis sur l'enregistrement de devis.
il se pose sous 3 étapes:
page devis.php (tableau avec choix des produits , prix, etc...)

Code : Tout sélectionner

$sql="SELECT * FROM registre_client WHERE id='$_GET[id]'"; $req = mysql_query($sql)or die(mysql_error()); $data = mysql_fetch_assoc($req); echo '<section><h2>Devis client pour '.$data['client_nom'].' '.$data['client_prenom'].'</h2>'; echo '<form method="POST" action="f2.php?id='.$_GET['id'].'&action=generer">'; $date=date("d-m-Y"); echo'<center><table id="devis"> <thead> <tr> <th colspan=5>'; $sql1 = 'SELECT COUNT(*) AS nb FROM devis WHERE id'; $retour1 = mysql_query($sql1); $donnees1 = mysql_fetch_array($retour1); $num_devis = date('y').'-'.$donnees1['nb'].'-'.$data['id']; echo '<input name="num_devis" type="name" value="'.$num_devis.'" id="num_devis" /></br> <input name="date" type="name" value="'.$date.'" id="date" /></br> <input name="client_id" type="text" value="'.$data['client_id'].'"/></br> <input name="client_nom" type="text" value="'.$data['client_nom'].'"/></br> <input name="client_prenom" type="text" value="'.$data['client_prenom'].'"/></br> <select name="choix"> <option value="FACTURE">FACTURE</option> <option value="DEVIS">DEVIS</option> </select> </th> </tr></thead> <tbody> <tr><td></td><td> Description </td><td> Prix en euros </td><td> Quantitée </td></tr>'; $sql = "SELECT * FROM produit"; $req = mysql_query($sql)or die(mysql_error()); while($data = mysql_fetch_assoc($req)) { $prod = array( array('ref_produit'=>$data['ref_produit'], 'nom_produit'=>$data['nom_produit'], 'prix_produit'=>$data['prix_produit'])); //echo '<form method="post" action="photo1.php">'; foreach($prod as $key =>$data) { echo'<tr><td></td><td>'.$data['nom_produit'].'</td> <td>'.$data['prix_produit'].'</td> <input type="hidden" name="produit['.$data['ref_produit'].'][prix_produit]" value="'.$data['prix_produit'].'"> <input type="hidden" name="produit['.$data['ref_produit'].'][nom_produit]" value="'.$data['nom_produit'].'"> <td><select name="produit['.$data['ref_produit'].'][quantite]"> <option value="0">0</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> </select><br /></td></tr></tbody>'; } } echo '<thead><tr><th colspan=5><a href="./fpdf/pdf4.php"target="_blank"><img src="./images/pdf.png" alt="pdf"></a><input type="submit" value="générer le devis"> </th></tr></thead></table></center></form></br></section></br>
page f2.php (récupération des choix)

Code : Tout sélectionner

$sql="SELECT * FROM registre_client WHERE id=$_GET[id]"; echo $sql; $req = mysql_query($sql)or die(mysql_error()); $data = mysql_fetch_assoc($req); echo '<form method="POST" name="insertion" action="enregistrement-devis.php"> <section><h2>Devis/Facture pour '.$data['client_nom'].' '.$data['client_prenom'].'</h2>'; $mail = $data['client_email']; $client=array($data['client_nom'], $data['client_prenom'], $data['client_adresse'], $data['client_cp'], $data['client_ville'], $data['client_telephone']); $id_personne = $data['client_id']; $type = $_POST['choix']; echo'<table><tr><td width="400">'; echo $_POST['choix']; echo' n°'; $num_devis = $_POST['num_devis']; echo '<input name="num_devis" size=9 type="text" value="'.$num_devis.'">'; $date=date("d-m-Y"); echo'</td><td><input name="date" size=9 type="text" value="'.$date.'"></td> <td><input name="client_id" size=9 type="text" value="'.$data['client_id'].'"/></td></tr></table> <center><table id="devis"> <tr><th> Ref </th><th width=200> Titre </th><th width=100> Prix unitaire </th><th width=100> Quantitée </th><th width=100> Prix </th></tr>'; if(isset($_POST['produit'])) { foreach($_POST['produit'] as $key =>$data) { if(!empty($data['quantite'])) { echo '<tr><td><input size=6 name="ref_produit[]" type="text" value="'.$key.'"></td> <td><input name="nom_produit[]" type="text" value="'.$data['nom_produit'].'"></td> <td><input size=9 name="prix_produit[]" type="text" value="'.$data['prix_produit'].'"></td> <td><input size=9 name="quantite[]" type="text" value="'.$data['quantite'].'"></td> <td><input size=9 name="t[]" type="text" value="'.($data['prix_produit']*$data['quantite']).'"></td></tr></tbody>'; $_SESSION['panier']['produit'][$key]=$data; $t=($data['prix_produit']*$data['quantite']); $total += $t; } } } echo'<tr><td colspan=3></td><td><b>TOTAL:</b></td><td name="total" id="total"><input name="total" size=9 type="text" value="'.$total.'"> </td></tr></table>
page enregistrement-devis.php (insertion dans mes tables devis et detail_devis)

Code : Tout sélectionner

echo'<section><h2>Résultat</h2>'; $num_devis = $_POST['num_devis']; $id_client = $_POST['client_id']; $date = $_POST['date']; $total = $_POST['total']; $sql = "INSERT INTO devis (id, num_devis, client_id, date, total) VALUES ('', '$num_devis', '$id_client', '$date', '$total')"; $requete=mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); /*foreach ($_POST['ref_Produit'] as $key => $value) { $num_devis = $_POST['num_devis']; $ref_Produit = $_POST['ref_Produit']; $nom_produit = $_POST['nom_produit']; $prix_produit = $_POST['prix_produit']; $quantite = $_POST['quantite']; $t = $_POST['t']; $sql2 = "INSERT INTO detail_devis (id, num_devis, ref_Produit, nom_produit, prix_produit, quantite, t) VALUES ('', $num_devis'.$key.', '.$key.', $nom_produit'.$key.', $prix_produit'.$key.', $quantite'.$key.', $t'.$key.')"; $requete2=mysql_query($sql2) or die('Erreur SQL !'.$sql2.'<br>'.mysql_error()); }*/ if($requete) { echo'<h1>Enregistrement du devis éfectué</h1>'; } else { echo("L'insertion à échouée") ; } echo'</section></br>';
mon problème est le suivant:
comment alimenter ma table detail_devis.
j'ai essayé plusieurs truc mais rien y fait....
du coup j'ai effacé cette partie