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

Eléphant du PHP | 63 Messages

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 63 Messages

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