Pobléme pour récuper des info dans un formulaire

Bon voila se que je suis arrivé a faire mais qui ne me plais pas:

un petit lien: blog.homelinux.org…
et voila les scripts:
formulaire.php

[cpp]

   <?php
   //inclure le fichier
   include('config.php'); 
   // connection à la BDD
   mysql_connect("$host", "$user", "$pass"); // Connexion au serveur MySQL
   mysql_select_db("$db"); // Sélection de la base lcg
   //recuperation des info
   $produits = mysql_query("SELECT reference,designation,prix FROM produits");
   //boucle pour récuperer les info
   while ($donnees = mysql_fetch_array($produits) )
   
   {

?>

<?php } mysql_close(); ?>
Référence Désignation Prix Quantité
<?php echo $donnees['reference']; ?> <?php echo $donnees['designation']; ?> <?php echo $donnees['prix']; ?>

Avant de valider votre Commande merci de bien verifier vos quantité car un retour en arriére n'est pas possible a moins de tous recommencer


[/cpp]

test.php:
[cpp]<?php

foreach ($_POST['quantite'] as $prix => $quantite)
{

$prix2 = $prix;
$quantite2 = $quantite;

foreach ($_POST['reference'] as $designation => $reference)
{

$designation2 = $designation;
$reference2 = $reference;

	?>

Reference :<?php echo $reference2; ?>

Designation :<?php echo $designation2; ?>

Prix :<?php echo $prix2; ?>

Quantité :<?php echo $quantite2 ?>

<?php } } ?>[/cpp] Déjà il fait plusieurs boucles et apres il y aura pas un autre moyen de faire plus propre, et puis je veux aprés afficher uniquement les produits qui on une quantité 0< et aprés additionner leurs prix, donc comment faire une boucle comme ça? merci de votre aide A++ Edité le 22/06/2007 à 08:08

un if($_POST[‘quantite’]>0) suffirait dans la boucle principale pour éliminer les produits dont la quantité vaut zéro non?

oui je pense aussi, mais aprés il y aura pas un autre moyen plus propre de transféré les variables? ou les $_POST?

tu n’aurais pas une base de donnée par hasard qui te permettrait de récupérer, autrement qu’en passant un tas de données en POST les nom, désignations et prix de tes articles?

Ton formulaire ne ferait que récupérer les réferences et quantités, et ensuite tu n’a plus qu’a retrouver ces réferences dans le tableau que te renvoie la requete sql sur la base.

En gros chaque ligne de ton formulaire contiendrait un champ

et à ce moment là tu n’aurais plus qu’a parcourir l’ensemble de ces champs via la belle boucle foreach que tu as faite:

fichier test.php


$total=0;
foreach ($_POST['quantite'] as $reference => $quantite)
{
if ($quantité >0)
{
$prix=//regarder le prix de $reference dans la base
// ou ramener toutes les réferences de la base dans un tableau php
$sous_total=$prix*$quantite;
$total=$total+$sous_total;
}
}

voilà j’espere que ça te guidera :wink:
Edité le 22/06/2007 à 11:20

merci je vais regarder se que tu me propose mais comme ça fait trés peut de temps que je me suis mi au php je risque de te redemander des conseils, merci

n’hésite pas; si c’est pas moi ce sera un autre :wink:
je ne suis pas sûr que ce serait la meilleure solution aussi, mais c’est ce que je ferais…

En fait je prefere toujours éviter de passer trop d’infos en POST, c’est toujours mieux de vérifier en local avec sa base (surtout pour des prix)

Bon voila le code que j’ai fait avec ton aide:
test.php


<center>
	   <table>
   <tr>
       <th>Référence</th>
       <th>Désignation</th>
       <th>Prix</th>
	   <th>Quantité</th>
	   <th>Total</th>
   </tr>
<?php
$total = 0;

foreach ($_POST['quantite'] as $reference => $quantite)
{
if ($quantite >0) 
{

//inclure le fichier
	   include('config.php'); 
	   // connection à la BDD
	   mysql_connect("$host", "$user", "$pass"); // Connexion au serveur MySQL
       mysql_select_db("$db"); // Sélection de la base lcg
	   //recuperation des info
	   $produits = mysql_query("SELECT reference,designation,prix FROM produits WHERE reference='$reference'") or die(mysql_error());

	   //boucle pour récuperer les info
	   while ($donnees = mysql_fetch_array($produits) )
	   {
$prix = $donnees['prix'];
$designation = $donnees['designation'];

$total_produit=$prix*$quantite; 
$total=$total+$total_produit;
	   
?>

   <tr> 
       <td><?php echo $reference; ?></td> 
       <td><?php echo $designation; ?></td> 
       <td><?php echo $prix; ?></td> 
	   <td><?php echo $quantite; ?></td>
       <td><?php echo $total_produit; ?></td> 
   </tr>


<?php
mysql_close();
?>
   </table>
      </center>
	  <?php
}
}
}

?>

Mais le probléme c’est que la premier ligne est bien centré mais alors les autres vont sur le gauche (Lien: blog.homelinux.org… ) et je n’arrive pas a savoir pourquoi, pour temps j’ai eu se probléme il y a pas longtemps et j’étais arrivé à la résoudre. merci encore de ton aide
Edité le 22/06/2007 à 13:19

et si je veux aprés enregistrer la commande dans une BDD il faut que je reface une boucle?

ton proble vient du fait que tu ferme ta table (regarde le source de ta page html pour savoir!)

il suffit juste que tu ferme le bloc du while AVANT de fermer ta base:


<center>
	   <table>
   <tr>
       <th>Référence</th>
       <th>Désignation</th>
       <th>Prix</th>
	   <th>Quantité</th>
	   <th>Total</th>
   </tr>

<?php

$total = 0;

foreach ($_POST['quantite'] as $reference => $quantite)
{
  if ($quantite >0) 
  {

  //inclure le fichier
	   include('config.php'); 
	   // connection à la BDD
	   mysql_connect("$host", "$user", "$pass"); // Connexion au serveur MySQL
       mysql_select_db("$db"); // Sélection de la base lcg
	   //recuperation des info
	   $produits = mysql_query("SELECT reference,designation,prix FROM produits WHERE reference='$reference'") or die(mysql_error());

	   //boucle pour récuperer les info
	   while ($donnees = mysql_fetch_array($produits) )
	   {
		$prix = $donnees['prix'];
		$designation = $donnees['designation'];
	
		$total_produit=$prix*$quantite; 
		$total=$total+$total_produit;
	
		echo("   <tr> 			");
		echo("   <td>$reference</td> 	");
		echo("   <td>$designation</td> 	");
		echo("   <td>$prix</td> 	");
		echo("   <td>$quantite</td>	");
		echo("   <td>$total_produit</td>"); 
		echo("   </tr>
	    }

  }
}
mysql_close();
?>

 </table>
 </center>


Edité le 22/06/2007 à 14:02

ok merci ça marche, et pour tout enregistrer dans une BDD il faut que je le met ou le code? il faut pas que je face une boucle aussi pour tous récupérer? merci

voila se que j’ai esseye de faire dans une 3eme page pour enregistrer tous dans la BDD mais qui semble pas marche.

<?php
<h2>Commande Bien enregistré</h2>
       <center>
	   <table>
   <tr>
       <th>Référence</th>
       <th>Désignation</th>
       <th>Prix</th>
	   <th>Quantité</th>
	   <th>Total</th>
   </tr>
<?php
$total = 0;

foreach ($_POST['quantite'] as $reference => $quantite)
{
if ($quantite >0) 
{

//inclure le fichier
	   include('config.php'); 
	   // connection à la BDD
	   mysql_connect("$host", "$user", "$pass"); // Connexion au serveur MySQL
       mysql_select_db("$db"); // Sélection de la base lcg
	   //recuperation des info
	   
	   $produits = mysql_query("SELECT id,reference,designation,prix FROM produits WHERE reference='$reference'") or die(mysql_error());
       $client = mysql_query('SELECT * FROM clients WHERE id='.$_SESSION['id_client']);
	   
	   
	   
	   //boucle pour récuperer les info
	   while ($donnees_produits = mysql_fetch_array($produits) )
	   while ($donnees_clients = mysql_fetch_array($client) )
	   {
	   {

       // BDD commandes
       $date = date('d-m-Y H:i:s');
	   $client_id = $_SESSION['id_client'];
	   $statut = 0;
	   $livraison_nom = $donnees_clients['nom'];
	   $livraison_adr1 = $donnees_clients['adresse'];
	   $livraison_cp = $donnees_clients['code_postal'];
	   $livraison_ville = $donnees_clients['ville'];
	   $livraison_code_pays = $donnees_clients['code_pays'];
	   $livraison_etat = $donnees_clients['etat'];
	   $livraison_pays = $donnees_clients['pays'];
	   
	   
	   // BDD commandes_produits
	   $produits_id = $donnees_produits['id'];
	   $designation = $donnees_produits['designation'];
	   $prix = $donnees_produits['prix'];
	   $quantite = $quantite;
	   $reference = $reference;
	   $total_produit=$prix*$quantite; 
	   $total = $total+$total_produit;
	   
	   // Ecriture dans la BDD lcg_pro_commande
	   $result_commande = mysql_query("INSERT INTO commandes VALUES ('','" . $date . "','" . $client_id . "','" . $total. "','','','','','".$statut."','".$livraison_nom."','".$livraison_adr1."','".$livraison_cp."','".$livraison_ville."','".$livraison_code_pays."','".$livraison_etat."','".$livraison_pays."')") or die(mysql_error());
          // récupérer l'id de la commande
	   $commande= mysql_query("SELECT * FROM commandes WHERE dt_commande='$date'");
	   while ($donnees_commande = mysql_fetch_array($commande) )
	   {
	   $commande_id = $donnees_commande['id'];
	   }
// ecriture des produits dans la BDD
$result_commande_produits = mysql_query("INSERT INTO lcg_pro_commandes_produits VALUES('','" . $commande_id . "','" . $produits_id . "','" . $designation. "','".$prix."','','".$quantite."','".$reference."','')");
	   
?>

   <tr> 
       <td><?php echo $reference; ?></td> 
       <td><?php echo $designation; ?></td> 
       <td><?php echo $prix; ?> €</td> 
	   <td><?php echo $quantite; ?></td>
       <td><?php echo $total_produit; ?> €</td> 
   </tr>
<?php
}
}
}
}
mysql_close();
?>
   </table>
      </center>
<p><center>Total de votre commande : <?php echo $total;?> € + Prix du Transport.<?php echo $date; ?></center></p
<p><a href='../index.php'>Retour</a></p>

Edité le 22/06/2007 à 15:45

c’est bon j’y suis arrivé! Merci encore a toi!

Salut a tous

Je viens de faire un script pour supprimer des messages, il marche bien mais j’ai quand même une erreur, voila le script:

<?php
// connection à la DB
include ('config.php');

if(isset($_GET['supprimer']) AND $_GET['confirmation'] == NULL)
{
?>
<center><p>Voulez réellement suprimer se Message?</p>

<p><a href="message_pro.php?supprimer=<?php echo $_GET['supprimer']?>&confirmation=oui">Oui</a>

<a href="../les_messages_pro.php">Annuler</a></p></center>
<?php
}

    //=======================
    // EN CAS DE CONFIRMATION
    //=======================
elseif(isset($_GET['supprimer']) AND $_GET['confirmation'] == 'oui')
{
	   mysql_connect("$db_host", "$db_user", "$db_pass"); // Connexion au serveur MySQL
       mysql_select_db("$db"); // Sélection de la base lcg
       mysql_query('DELETE FROM messages WHERE id=' . $_GET['supprimer'])
?>
<center><p>Le Message a bien été supprimé</p>
<p><a href="../les_messages_pro.php">Retour la liste des Messages</a></p></center>
<?php
}

    //============================
    // SI IL N'Y A RIEN DE TOUT CA
    //============================

else
mysql_close(); 
 ?> 

et voila l’erreur: Notice: Undefined index: confirmation in c:\easyphp1-8\www\admin_pro\supprimer\message_pro.php on line 5
il a donc un problème avec la variable confirmation mais je ne sais pas quelles valeur lui donné sans posser de problème au script. merci A++

Essaie ça :


<?php // connection à la DB include ('config.php'); 
if(isset($_GET['supprimer']) AND !isset($_GET['confirmation'])) 
{ 
?> 
<center><p>Voulez réellement suprimer se Message?</p> 
........

Par contre il ne faut pas que dans l’adresse il y est de &confirmation=…
:wink:
Edité le 23/06/2007 à 18:34