J'ai un probleme de mise a jour de ma base de donnée

Résolu
greg3487 Messages postés 17 Date d'inscription dimanche 20 septembre 2015 Statut Membre Dernière intervention 11 février 2016 - Modifié par jordane45 le 11/12/2015 à 13:51
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 12 déc. 2015 à 03:05
Bonjour,

j'ai un petit problème de condition, a chaque fois que j'ajoute un produit, le produit passe en t'en que nouveau produit même s'il existe dans la base de donnée.

quelqu'un pourrais me dire se qui cloche et une incohérence entre le var_dump et la barre d'adresse.

barre d'adresse : http://localhost/devoirEMWEB/E_commerce/panier1.php?nom_id=2&prix_id=2&quantite_ajout=4&valide=Valider

resultat des var_dump :

string '3' (length=1)
array (size=6)
0 => string '5669e5c4db8d8' (length=13)
'user_id' => string '5669e5c4db8d8' (length=13)
1 => string '2' (length=1)
'produit_id' => string '2' (length=1)
2 => string '3' (length=1)
'quantite' => string '3' (length=1)
string 'bob' (length=3)




if(isset($_GET['valide']))
{

 $produit_id= intval($_GET['nom_id']);
 $produit_prix = intval($_GET['prix_id']);
 $quantite_ajoute = intval($_GET['quantite_ajout']);

 $result = $mysqli->query("SELECT `Article_ID` FROM boutique WHERE `Article_ID` = '$produit_id'");
 $row = $result->fetch_array();

 if($row[0] <= 0)
 {
  $message = '<p class="error">Le catalogue ne contient pas cette référence. Aucun produit n\'est ajouté a panier.</p>';
 }
 else
 {
  $verif = $mysqli->query("SELECT * FROM panier");
  $row = $verif->fetch_array();
  var_dump($row['quantite'],$row);
  $quantite_total = $quantite_ajoute + $row['quantite'];
  
  if ($produit_id == $row['produit_id']) {
   var_dump('bob');
   $mysqli->query("UPDATE panier
       SET quantite = '$quantite_total'");
  }
  
  else 
  {
   if ($produit_id != $row['produit_id']) {
   $mysqli->query("INSERT INTO panier (user_id, produit_id, quantite))
                              VALUES ('$web_user_id', '$produit_id', '$quantite_ajoute')");
   var_dump('bab');
   $message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>';
   }
   else
   {
    $message = '<p class="error">L\'ajout du produit dans le panier n\'est pas effectué.</p>';
   }
  }
 }
}
$result = $mysqli->query("SELECT produit_id, quantite FROM panier WHERE user_id = '$web_user_id'");

while ($row = $result->fetch_array())
{
 $produit_id = $row['produit_id'];
 $qantite = $row['quantite'];
}

//-----------------------------------------------------//

if(!empty($produit_id)) {
 $sql = "SELECT  produit_id, Article_nom, Article_prix, quantite
   
   FROM panier
         JOIN boutique
     ON panier.produit_id = boutique.Article_ID
         WHERE panier.user_id = '$web_user_id'";
 $result = $mysqli->query($sql);
 if (!$result) { //en cas d'erreur
  printf("Message d'erreur : %s\n", $mysqli->error);
 }

 //Initialisation des variables de retour
 $total = array();
 $produits = array();

 while ($row = $result->fetch_array()) {
  //-----------------------------------------------------//
  $produit_id = $row['produit_id'];
  $quantite = $row['quantite'];
  $produit_nom = $row['Article_nom'];
  $produit_prix = $row['Article_prix'];
  
  //-----------------------------------------------------//
  $produits[$produit_id]['id'] = $produit_id;
  $produits[$produit_id]['nom'] = $produit_nom;
  $produits[$produit_id]['prix'] = $produit_prix;
  $produits[$produit_id]['nombrecommand'] = $quantite;
  $produits[$produit_id]['sous_total'] = $qantite * $produit_prix;
  $total[] = $qantite * $produit_prix;
  //-----------------------------------------------------//
  $prix_total = array_sum($total);
 }
}
else
{
 echo '<p>Votre panier est vide</p>';
}


merci par avance de vos réponce.

2 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
11 déc. 2015 à 13:54
Bonjour,

Pour commencer... ton update... il n'y manquerait pas un WHERE ??
 $mysqli->query("UPDATE panier
       SET quantite = '$quantite_total'");

Par ce que là .. tu UPDATE toute ta table .... sans spécifier le panier en question


1
greg3487 Messages postés 17 Date d'inscription dimanche 20 septembre 2015 Statut Membre Dernière intervention 11 février 2016
11 déc. 2015 à 18:17
je vient de modifier le code, mais il met a jour que que un seul produit, les autre s'enregistre pas ou se mette pas a jour.

voici mon code modifié.

if(isset($_GET['valide']))
{
	$produit_id= intval($_GET['nom_id']);
	$produit_prix = intval($_GET['prix_id']);
	$quantite_ajoute = intval($_GET['quantite_ajout']);

	$result = $mysqli->query("SELECT * FROM boutique WHERE `Article_ID` = '$produit_id'");
	$row = $result->fetch_array();

	if($row[0] <= 0)
	{
		$message = '<p class="error">Le catalogue ne contient pas cette référence. Aucun produit n\'est ajouté a panier.</p>';
	}
	else
	{
		var_dump($row['Article_ID']);
		$verif = $mysqli->query("SELECT * FROM panier");
		$row = $verif->fetch_array();
		$quantite_total = $quantite_ajoute + $row['quantite'];
		var_dump($row);
		if ($row[] = '0')
		{
			$mysqli->query("INSERT INTO panier (user_id, produit_id, quantite)
            				VALUES ('$web_user_id', '$produit_id', '$quantite_ajoute')");
			
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>';
		}
		elseif ($row[] = '1') {
			$mysqli->query("UPDATE panier 
							SET quantite = '$quantite_total' 
							WHERE user_id = '$web_user_id' 
							AND produit_id = '$produit_id'");
			
			var_dump('bab');
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>';
		}
		else
		{
			$message = '<p class="error">L\'ajout du produit dans le panier n\'est pas effectué.</p>';
		}
	}
}
$result = $mysqli->query("SELECT produit_id, quantite FROM panier WHERE user_id = '$web_user_id'");

while ($row = $result->fetch_array())
{
	$produit_id = $row['produit_id'];
	$qantite = $row['quantite'];
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
11 déc. 2015 à 19:07
Que retournes... selon toi cette requête :
$verif = $mysqli->query("SELECT * FROM panier");
$row = $verif->fetch_array();
$quantite_total = $quantite_ajoute + $row['quantite'];


Là encore.... si c'est pour récupérer la quantité d' UN produit particulier.... il te manque un WHERE ... non ?


Ensuite quand tu dis :

mais il met a jour que que un seul produit

.... le code que tu nous montres est sensé mettre à jours plusieurs produits ??
Car visiblement... tu n'en passes qu'un seul via tes variables GET non ?

Au passage....Je t'invite également à passer par la méthode POST au lieu de GET ....


Et pour finir ...
Nous ne pourrons pas t'aider d'avantage tant que nous n'aurons pas:
- La structure de tes tables
- Le formulaire HTML attaché à ce code PHP
- Que tu nous éclaires sur le fonctionnement "souhaité" ... et à contrario.. le fonctionnement "constaté" qui te pose problème.
0
greg3487 Messages postés 17 Date d'inscription dimanche 20 septembre 2015 Statut Membre Dernière intervention 11 février 2016 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
11 déc. 2015 à 21:06
voici mon code, et quand je disais q'il y en a que 1 qui se met a jour, je voulais dire que il y a que les produit déjà enregistré dans la base de donnée du panier, qui se met a jour. Il passe tous par le elseif (le update) au lieu de passer par le if pour mettre un nouveau produit.

base de donnée : user_id => produit_id => quantite

formulaire :

 <?php
	$article = "SELECT Article_ID, Article_nom, Article_prix
				FROM boutique";
	$result = $mysqli->query($article);	
	while ($row = $result->fetch_array())
	{
		$produit_id = $row['Article_ID'];
		$produit_nom = $row['Article_nom'];
		$produit_prix = $row['Article_prix'];
		$produits[$produit_id]['nom'] = $produit_nom;
		$produits[$produit_id]['prix'] = $produit_prix;
	}
	?>
    <ul> 
    	<?php foreach($produits as $produit_id => $produit) 
		{ ?> 
        <li> 
        	<form action="panier5.php" method="GET">
                <div class="article"> 
                    <input type="hidden" name="nom_id" value="<?php echo $produit_id; ?>"><?php echo $produit['nom']; ?>
                    <br /> 
                    <input type="hidden" name="prix_id" value="<?php echo $produit_id; ?>"><?php echo $produit['prix']; ?> euros
                    <br/>
                    <img src="image/product_256.png" alt="<?php echo $produit['nom']; ?>"/> 
                    <br/>
                    <input type="number" name="quantite_ajout" value="0" min="0">
                    <br/>
                    <input type="submit" name="valide"> 
                </div> 
            </form>
        </li> 
    <?php } ?> 
    </ul>
<?php  ?>


code panier qui gere mon formulaire :

if(isset($_GET['valide']))
{

	$produit_id= intval($_GET['nom_id']);
	$produit_prix = intval($_GET['prix_id']);
	$quantite_ajoute = intval($_GET['quantite_ajout']);

	$result = $mysqli->query("SELECT * FROM boutique WHERE `Article_ID` = '$produit_id'");
	$rowtest = $result->fetch_array();
	//var_dump($rowtest);

	if($rowtest[0] <= 0)
	{
		$message = '<p class="error">Le catalogue ne contient pas cette référence. Aucun produit n\'est ajouté a panier.</p>';
	}
	else
	{
		//var_dump($row['Article_ID']);
		$verif = $mysqli->query("SELECT * FROM panier WHERE `produit_id` = '$produit_id'");
		$row = $verif->fetch_array();
		$quantite_total = $quantite_ajoute + $row['quantite'];
		//var_dump($row);
		if ($row[] = '0')
		{
			$mysqli->query("INSERT INTO panier (user_id, produit_id, quantite)
            				VALUES ('$web_user_id', '$produit_id', '$quantite_ajoute')");
			
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>';
		}
		elseif ($row[] = '1') {
			$mysqli->query("UPDATE panier 
						SET quantite = '$quantite_total' 
							WHERE user_id = '$web_user_id' 
							AND produit_id = '$produit_id'");
			
			var_dump('bab');
			$message = '<p class="message">L\'ajout du produit dans le panier est bien effectué.</p>';
		}
		else
		{
			$message = '<p class="error">L\'ajout du produit dans le panier n\'est pas effectué.</p>';
		}
	}
}
$result = $mysqli->query("SELECT produit_id, quantite FROM panier WHERE user_id = '$web_user_id'");

while ($row = $result->fetch_array())
{
	$produit_id = $row['produit_id'];
	$qantite = $row['quantite'];
}
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
12 déc. 2015 à 03:05
Alors :

Que donnes ton var_dump ?
//var_dump($row);


Ensuite... une comparaison ne se fait pas avec UN SEUL égale... mais avec DEUX ou TROIS selon les besoins !
Donc tes IF, tel que celui là :
if ($row[] = '0') 

Devraient êtres de la forme :
if ($row[] == '0') 


Ensuite.. $row[] .... ajoute un donnée dans l'array $row .....
A mon avis.. tu as oublié de mettre la "key" entre les crochets
un truc du genre
if ($row['quantite'] == '0') 
0
Rejoignez-nous