Tester 2 conditions

Résolu/Fermé
mike - 24 sept. 2012 à 21:56
 mike - 25 sept. 2012 à 10:07
Bonjour à tous,
Voilà j'ai un souci sur un test de contition php :
if($data['taille'] != $taille && $data['modele'] != $modele_article) {
requete sql;
}
else
{
retour au panier
}

En gros mon souci est que je n'arrive pas à lui faire valider les 2 conditions, si l'une des deux est "vrai", alors retour au panier.
EX : dans mon panier j'ai 1 article de taille 29 et modele pierrepauljack, si je veux ajouter un modele tarteenpion et de taille 29, je ne peux pas car les tailles sont identique or les modele sont différents donc l'ajout devrai se faire mais ça coince.
Un petit coup de pouce siou plait.Merci

4 réponses

arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
25 sept. 2012 à 00:06
Donc, si je comprends bien, ta condition était juste là pour vérifier si le produit est déjà dans le panier.
Je vois là un problème.
Ta requête tel que l'utilise ici:
$sql = "select * from panier where id='".$_SESSION['id']."'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_assoc($req);

Te retourne le dernier enregistrement de ta table. Uniquement le dernier.
Je suppose toutefois que ton panier peut comporter plusieurs produits.
Autrement dit, tu vérifie là seulement si celui que tu cherches à ajouter est (ou non) le dernier. Mais ce produit peut être l'avant dernier.

Je suppose également que tes produits sont également enregistré dans une autre table et qu'elle contient toutes les données concernant ces produits.
Partons de ce principe.

Ton panier doit comporter au minimum ces informations:
produit, taille, nombre, membre

Le champ identifie le produit (par son ID par exemple).
Le champ taille indique le taille souhaité.
Le nombre est la quantité de produit voulu.
Le champ membre identifie le membre afin de ne pas amalgamer la commande Jean avec celle de Paul.

Dans ton formulaire, je suppose que tu as une liste de produit, d'une manière qui ressemble à celle-ci.
<form method="post">
<input type="hidden" name="id_produit" value="1" />
<p>Produit 1</p>
<p>Nb: <input name="nb" /></p>
<p>Taille: <select name="taille">
	<option value="40">40</option>
	<option value="41">41</option>
	<option value="42">42</option>
	<option value="43">43</option>
</select></p>
<p><input type="submit" name="ajout_panier" value="Ajouter au panier" /></p>
</form>


Côté PHP, tu peux gérer l'ajout à la BDD de la manière suivante:
<?php
// Connecion BDD...

$sql='SELECT * FROM panier WHERE id_produit="'.mysql_real_escape_string($_POST['id_produit']).'" AND membre="'.mysql_real_escape_string($_SESSION['id_membre']).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$nb = mysql_num_rows($req);
id($nb>0)
	echo'Ce produit est déjà dans le panier';
else{
	$sql='INSERT INTO panier (id_produit,nb,taille,membre) VALUES ....';
	mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
	}
?>

Au lieu d'annoncer que le produit est déjà présent dans le panier, tu peux aussi ajouter le nouveau nombre à ceux déjà présent et les additionner.

J'espère t'avoir aidé.
1
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
24 sept. 2012 à 23:08
Je comprends ton problème mais j'ai du mal à te guider sur ton code car il est trp minimaliste et hors contexte.
Toujours est-il que pour résoudre ton problème tu ne peux pas gérer les deux conditions simultanément.
Pour t'aider d'avantage il me faudrait le code réelle de ta page. Je ne sais pas d'où proviennent ce variable et du coup comment tu procèdes pour gérer ton panier.
0
Voici le code complet
<?php
session_start();
if($_SESSION['id']==0) {
header("location:index.php");
}
else {
mysql_connect('xxx', 'xxxxx', 'xxxxx');
mysql_select_db('xxxxx');
mysql_set_charset ('UTF8'); 
  $sql = "select * from panier where id='".$_SESSION['id']."'";
  $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  $data = mysql_fetch_assoc($req);
  $modele_article = $_POST['modele_article'];
  $taille = $_POST['taille'];
  if($data['taille'] != $taille && $data['modele'] != $modele_article) {
  $sql1 ='INSERT INTO panier(id, id_article, nom, modele, composition, delavage, descriptif, taille, quantite, prix) VALUES ("'.$_SESSION['id'].'","'.$_POST['id_article'].'","'.$_POST['nom_article'].'","'.$_POST['modele_article'].'","'.$_POST['composition_article'].'","'.$_POST['delavage_article'].'","'.$_POST['descriptif_article'].'","'.$_POST['taille'].'","'.$_POST['qte'].'","'.$_POST['prix_total'].'")';
  $req1 = mysql_query($sql1) or die('Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
  header('location:panier.php');
	}
  else 
	{
    echo 'Cet article est déja présent dans votre panier<br/>';
    echo '<a href=panier.php>Retour au panier</a>';
	}}    

?>

Je veux juste que les 2 conditions soit vrai et non une seule. Merci
0
Cerveau vraiment brillant ^^, car ma table et mon formulaire ressemble a peu de chose près à cela ( en plus complet ^^ ).

Cependant ma requête ne me retourne pas que le dernier car si j'ajoute un article taille 29 puis un 30, je ne pourrais pas ajouter un autre 29 ( ou un autre 30), quoiqu'il en soit, je vais retenir l'idée d'ajouter la quantité quand l'article est identique, ce sera plus simple.

Merci à toi l'ami.
0