problème dans le traitement de mon panier

MissUlie
Invité n'ayant pas de compte PHPfrance

24 avr. 2009, 21:01

Bonjour,
Je viens de créer un site marchand avec Dreamweaver en suivant les étapes d'un livre car je suis débutante en php, mais je coince sur la page de traitement du panier.

Dans ma page traitement_panier.php, il n'y a que la partie en html qui s'affiche. Quand j'insère des echo pour voir quelle est la valeur d'une variable rien ne s'affiche.

Est-ce que mon problème provient d'une erreur
- de session (la page de panier est en accès restreint alors que la page traitement panier ne l'est pas) ?
- de code php dans le body ?

J'ai fait pas mal d'essais, sans succès. (Pour le reste du site j'avais utilisé l'interface de dreamweaver et maintenant qu'il faut que je m'intéresse au code, je me sens complètement perdue.)

Le code qui se trouve avant le doctype :
<?php require_once('../Connections/xxx.php'); ?>

<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
    $theValue = (!get_magic_quotes_gpc()) ? stripslashes($theValue) : $theValue;
    switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" .  doubleval($theValue) ."'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
 	 }
  return $theValue;
  }
?>
Le code qui se trouve dans le body :
<?php		
//récupérer le dernier numéro de commande attribué au client actuel	
if (isset($_SESSION['MM_Username'])) {
mysql_select_db($database_xxx, $xxx);
$query_commande = sprintf("SELECT id
 FROM commande
 WHERE mail ='".$_SESSION['MM_Username']."'
ORDER BY id DESC");
$commande = mysql_query($query_commande, $xxx) or die(mysql_error());
$row_commande = mysql_fetch_assoc($commande);
$totalRows_commande = mysql_num_rows($commande);
		
//récupérer 1ere ligne du panier du client actuel	
mysql_select_db($database_xxx, $xxx);
$query_panier = sprintf("SELECT panier.*,
produit.prix,
produit.prix*panier.quantite
AS ss_ss_total_ttc
FROM panier
INNER JOIN produit
ON produit.id=panier.produit
WHERE client ='".$_SESSION['MM_Username']."'");
$panier = mysql_query($query_panier, $xxx) or die(mysql_error());
			
//nb d'enregistrements concerné par la requête
$totalRows_panier = mysql_num_rows($panier);
$compteur = 0;

/* Tant que la requête $panier renvoie une donnée et que le compteur n'a pas atteint le nb total d'enregistrements, on insère le contenu extrait de la table panier ds la table ligne_commande.
On efface ensuite la ligne panier que l'on a traité et on incrémente le compteur pr traiter le prochain enregistrement lors du prochain passage ds la boucle. */
			
while ($row_panier = mysql_fetch_assoc($panier) and $compteur < $totalRows_panier)
{
$query_ligne_commande = sprintf("INSERT INTO ligne_commande (commande, produit, prix, quantite, ss_ss_total_ttc) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($row_commande['id'], "int"),
GetSQLValueString($row_panier['produit'], "int"),
GetSQLValueString($row_panier['prix'], "double"),													
GetSQLValueString($row_panier['quantite'], "int"),
GetSQLValueString($row_panier['ss_ss_total_ttc'], "double"));
mysql_select_db($database_xxx, $xxx);
$Result1 = mysql_query($query_ligne_commande, $xxx) or die(mysql_error());
$query_suppr_panier = sprintf("DELETE FROM panier WHERE id=%s",
GetSQLValueString($row_panier['id'], "int"));
mysql_select_db($database_xxx, $xxx);
$Result1 = mysql_query($query_suppr_panier, $xxx) or die(mysql_error());
			
$compteur = $compteur+1;
}
}
?>
J'espère que quelqu'un pourra m'aider.
Merci

D4Y
Eléphant du PHP | 52 Messages

24 avr. 2009, 21:38

Je ne vois nul part :
session_start()
Regarde si tu as ça quelques part ;)

Invité
Invité n'ayant pas de compte PHPfrance

24 avr. 2009, 23:46

Merci pour ta réponse. :) Je viens de le rajouter.

Par contre, j'ai l'erreur suivante qui s'affiche :
"Column 'commande' cannot be null".

Je suis allée voir (dans phpmyadmin) si les champs de la table commande étaient bien renseignés après validation du panier : c'est bon ça fonctionne.
Si je comprends bien, cette erreur montre que la récupération des données de la table commande ne se fait pas ? Je ne sais pas pourquoi...

Invité
Invité n'ayant pas de compte PHPfrance

25 avr. 2009, 00:02

je viens de remplacer "commande" par "num_commande" dans cette ligne de code :

Code : Tout sélectionner

$query_ligne_commande = sprintf("INSERT INTO ligne_commande (num_commande, produit, prix, quantite, ss_ss_total_ttc) VALUES (%s, %s, %s, %s, %s)",
L'erreur est maintenant : "Column 'num_commande' cannot be null".

Donc je pense que l'INSERT ne se fait par correctement... Par contre, je n'ai pas l'impresion que mon code est différent de celui de mon livre.

Est-ce que quelqu'un sait ce qui ne va pas dans ce code ?

Code : Tout sélectionner

<?php if (isset($_SESSION['MM_Username'])) { mysql_select_db($database_xxx, $xxx); $query_commande = sprintf("SELECT id FROM commande WHERE mail ='".$_SESSION['MM_Username']."' ORDER BY id DESC"); $commande = mysql_query($query_commande, $xxx) or die(mysql_error()); $row_commande = mysql_fetch_assoc($commande); $totalRows_commande = mysql_num_rows($commande); echo $_SESSION['MM_Username']; mysql_select_db($database_xxx, $xxx); $query_panier = sprintf("SELECT panier.*, produit.prix, produit.prix*panier.quantite AS ss_ss_total_ttc FROM panier INNER JOIN produit ON produit.id=panier.produit WHERE client ='".$_SESSION['MM_Username']."'"); $panier = mysql_query($query_panier, $xxx) or die(mysql_error()); $totalRows_panier = mysql_num_rows($panier); $compteur = 0; while ($row_panier = mysql_fetch_assoc($panier) and $compteur < $totalRows_panier) { $query_ligne_commande = sprintf("INSERT INTO ligne_commande (num_commande, produit, prix, quantite, ss_ss_total_ttc) VALUES (%s, %s, %s, %s, %s)", GetSQLValueString($row_commande['id'], "int"), GetSQLValueString($row_panier['produit'], "int"), GetSQLValueString($row_panier['prix'], "double"), GetSQLValueString($row_panier['quantite'], "int"), GetSQLValueString($row_panier['ss_ss_total_ttc'], "double")); mysql_select_db($database_xxx, $xxx); $Result1 = mysql_query($query_ligne_commande, $xxx) or die(mysql_error()); $query_suppr_panier = sprintf("DELETE FROM panier WHERE id=%s", GetSQLValueString($row_panier['id'], "int")); mysql_select_db($database_xxx, $xxx); $Result1 = mysql_query($query_suppr_panier, $xxx) or die(mysql_error()); $compteur = $compteur+1; } } ?>

D4Y
Eléphant du PHP | 52 Messages

25 avr. 2009, 16:49

Vérifie les valeurs que tu veux insérer dans ta base de donnée.
Il se peut bien que la valeur est Null et donc comme dans ta base de donnée tu as définis le champ not null et bien voilà ...

MissUlie
Invité n'ayant pas de compte PHPfrance

26 avr. 2009, 16:33

Je viens de changer, dans phpmyadmin, "not null" en "null" pour la colonne "num_commande" et dans ce cas la table ligne_commande se remplit bien.

Ce "num_commande" doit être récupéré dans la table "commande", c'est l'id. Celui-ci existe.

Je ne sais pas si c'est la transmission de données entre ces 2 tables qui ne se fait pas correctement ou si c'est la valeur de l'"id" de "commande" qui ne correspond pas à la valeur attendu dans le champs "num commande" de "ligne_commande".

Qu'est-ce que je dois faire pour trouver d'où vient réellement le problème et comment le résoudre ?

Missulie
Invité n'ayant pas de compte PHPfrance

27 avr. 2009, 10:28

Ca y est mon problème est résolu.

Merci pour les réponses. :wink:

Eléphanteau du PHP | 10 Messages

15 juin 2009, 16:35

Bonjour,
J'ai laissé le nom de mon site dans un message précédent. Comment faire pour supprimer le nom (ou le message entier) ?
Merci

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

15 juin 2009, 17:29

Message édité :)

(Tu ne peux modifier que les posts dont tu es l'auteur, et comme tu avais posté les premiers messages en tant qu'invité, tu ne pouvais pas les éditer :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...