Création panier avec suppression article

Eléphanteau du PHP | 49 Messages

12 sept. 2011, 21:27

Bonjour à vous développeurs,

Dans la M.... #-o depuis quelques temps car je cherche à réaliser un panier d'achat....
En fait mon panier fonctionne bien, mais !
J'aimerais ajouter une ligne pour supprimer un article avant une commande éventuelle.
Voici le code, sans css pour l'instant, ce n'est pas le but :
<?php
session_start();
//Recuperation des saisies
$id_article=$_SESSION["id_article"]."//".$_POST["id_article"];
$_SESSION["id_article"]=$id_article;
//**********************************
//echo "<br /> ID =", $id_article,"</>";
$quantite=$_SESSION["quantite"]."//".$_POST["quantite"];
$_SESSION["quantite"]=$quantite;
//**********************************
$prix_unit=$_SESSION["prix_unit"]."//".$_POST["prix_unit"];
$_SESSION["prix_unit"]=$prix_unit;
//**********************************
$design=$_SESSION["designation"]."//".$_POST["designation"];
$_SESSION['designation']=$design;
unset($_POST);
$_POST=array();
include_once('entete.htm');
include_once("connex.inc.php");
?>
<h3>
<h3>Votre panier</h3>
<table border="1" >

<tr>
<th></th>
<th>Code Article</th>
<th>Désignation</th>
<th>Quantité</th>
<th>Prix unitaire</th>
<th>Prix total</th>

<?php
//Connexion
$idcom=connex("rucheapiculture_gestion","myparam");
//Affichage du panier
$total=0;
$tabid_art=explode("//",$_SESSION["id_article"]);
$tabquantite=explode("//",$_SESSION["quantite"]);
$tabprix_unit=explode("//",$_SESSION["prix_unit"]);
$tabdesign=explode("//",$_SESSION["designation"]);
//***********************************
for($i=0;$i<count($tabid_art);$i++)
{
$requete = "SELECT id_article,designation,prix FROM rucheapiculture_gestion.article WHERE article.id_article='".$tabid_art[$i]."'";
$result=mysql_query($requete,$idcom);
while($tab = mysql_fetch_assoc($result))
{

// ici j'ai ajouté une corbeille en image avec le lien vers le fichier delete.php

echo "<tr><td>","<a href=\"delete.php\"><img alt=\"corbeille\" style=\"height:25px; width:20px; border:0px\" src=\"corbeille.jpg\"></a>","</td><td>",$tab['id_article'],"</td><td>",$tab['designation'],"</td><td style=\"text-align:center\">",$tabquantite[$i],"</td><td style=\"text-align:right\">",$tab['prix'],"</td><td style=\"text-align:right\"> ", round($tab['prix']*$tabquantite[$i],2),"</td></tr>";
$total+=$tab['prix']*$tabquantite[$i];
}
}
echo "<tr><td colspan=\"5\"><b>Prix total T.T.C</b></td><td style=\"text-align:right\"><b>$total</b></td></tr>";
echo "</table>";
?>

<a href="saisieclient.php" onclick="window.location='saisieclient.php'"><button type="button"> Terminer la commande </button></a>
</table>


<?php
include_once('pied.htm');
?>
Et le fichier delete.php récupéré au hasard sur le web..
<?php
   function supprim_article($ref_article, $reindex = true) 
{ 
    $suppression = false; 
    $aCleSuppr = array_keys($_SESSION['article']['id_article'], $ref_article); 

    /* sortie la clé a été trouvée */ 
    if (!empty ($aCleSuppr)) 
    { 
        /* on traverse le panier pour supprimer ce qui doit l'être */ 
        foreach ($_SESSION['article'] as $k=>$v) 
        { 
            foreach($aCleSuppr as $v1) 
            { 
                unset($_SESSION['article'][$k][$v1]);    // remplace la ligne foireuse 
            } 
            /* si la réindexation est indispensable pour la suite de l'appli, faire ici: */ 
            if($reindex == true) 
            { 
                $_SESSION['article'][$k] = array_values($_SESSION['article'][$k]); 
            } 
            $suppression = true; 
        } 
    } 
    else 
    { 
        $suppression = "absent"; 
    } 
    return $suppression; 
} 

     //redirection vers la page pour rafraichir la liste 
     header('Location: panier.php');
     
?>

Je pensait qu'avec ce fichier et le lien delete.php, ça allait fonctionner..... Mais :non:

Qui peut me donner un coup de main, pour la suppression d'un article éventuel avec la corbeille !

Merci bien
Modifié en dernier par brother le 14 sept. 2011, 21:56, modifié 1 fois.

Mammouth du PHP | 672 Messages

13 sept. 2011, 09:02

Bonjour.

1. Ton fichier delete.php est constitué d'un renvoi vers la page index.php et d'une fonction supprim_article()...Que tu n'utilises pas #-o

2. Si tu veux que delete.php supprime un article précis, il vaut mieux lui indiquer la référence de cet article :mrgreen:
echo '<tr><td><a href="delete.php?id='.$tab['id_article'].'"><img alt='corbeille' style='height:25px; width:20px; border:0px' src='corbeille.jpg'></a>";

Mammouth du PHP | 19672 Messages

13 sept. 2011, 11:49

Juste au cas où, ça peut toujours servir : un tuto sur les paniers.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

14 sept. 2011, 07:53

Bonjour macgawel et Cyrano,

Merci de prendre le temps d'étudier mon cas.
Cyrano, mon fichier delete.php vient de ce tuto....merci.
En fait macgawel ça ne fonctionne pas..
Voici le message d'erreur :

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /web/
Qui correspond à la ligne :
echo '<tr><td><a href="delete.php?id='.$tab['id_article'].'"><img alt='corbeille' style='height:25px; width:20px; border:0px' src='corbeille.jpg'></a>";
Et :
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /web
Si j'écris le code comme ceci :
echo "<tr><td>","<a href=\"'delete.php?' id='.$tab['id_article'].'\">","<img alt=\"corbeille\" style=\"height:25px; width:20px; border:0px\" src=\"corbeille.jpg\"></a>","</td><td>",$tab['id_article'],"</td><td>",$tab['designation'],"</td><td style=\"text-align:center\">",$tabquantite[$i],"</td><td style=\"text-align:right\">",$tab['prix'],"</td><td style=\"text-align:right\"> ", round($tab['prix']*$tabquantite[$i],2),"</td></tr>";
Comment faire ?
Celà provient peut-être du code sur le fichier delete.php que j'ai recopié (peut-être sans réfléchir 8-| ) ?

Merci
Modifié en dernier par brother le 14 sept. 2011, 21:57, modifié 1 fois.

Mammouth du PHP | 19672 Messages

14 sept. 2011, 08:04

Problème de concaténation et d'alternances entre « ' » et « " », du coup il y a des conflits de quotes dans le HTML et dans le PHP.

Pars du HTML en l'écrivant correctement et en utilisant des guillemets au lieu d'apostrophes pour encadrer les valeurs d'attribut; ensuite, insère le comme une chaine de caractère dans ton code PHP mais en oubliant pas que cette chaine devra être encadrée elle-même, soit d'apostrophes (quotes simples) soit de guillemets (doubles quotes) et qu'il faudra en conséquence échapper ces même caractères dans la chaine.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

14 sept. 2011, 20:57

Bonjour cyrano,
J'ai fait le point et voilà ce que j'ai écrit:
{
echo "<tr><td>","<a href=\"delete.php?id=".$tab['id_article']."\"><img alt=\"corbeille\" style=\"height:25px; width:20px; border:0px\" src=\"corbeille.jpg\"></a>","</td><td>",$tab['id_article'],"</td><td>",$tab['designation'],"</td><td>",$tabquantite[$i],"</td><td>",$tab['prix'],"</td><td> ", round($tab['prix']*$tabquantite[$i],2),"</td></tr>";
$total+=$tab['prix']*$tabquantite[$i];
}
Ca fonctionne à moitiè... c'est à dire que j'ai mes articles et ma corbeille =D>

Mais lorsque je supprime un article j'ai quatre lignes comme celle-ci :
Bien sur celà ne supprime pas l'article pour autant ... :(

Code : Tout sélectionner

Notice: Undefined index: id_article in /web/essai/www/panier.php on line 4 Notice: Undefined index: quantite in /web/essai/www/panier.php on line 8 Notice: Undefined index: prix_unit in /web/essai/www/panier.php on line 11 Notice: Undefined index: designation in /web/essai/www/panier.php on line 14
Correspondant aux lignes 4, 8, 11 et 14 qui sont :
1  <?php
2  session_start();
3  //Recuperation des saisies
4  $id_article=$_SESSION["id_article"]."//".$_POST["id_article"];
5  $_SESSION["id_article"]=$id_article;
6  //**********************************
7  //echo "<br /> ID =", $id_article,"</>";
8  $quantite=$_SESSION["quantite"]."//".$_POST["quantite"];
9  $_SESSION["quantite"]=$quantite;
10 //**********************************
11 $prix_unit=$_SESSION["prix_unit"]."//".$_POST["prix_unit"];
12 $_SESSION["prix_unit"]=$prix_unit;
13//**********************************
14 $design=$_SESSION["designation"]."//".$_POST["designation"];
15 $_SESSION['designation']=$design;
16 unset($_POST);
17 $_POST=array();
18 include_once('entete.htm');
19 include_once("connex.inc.php");
20 ?>
Est-ce encore des problèmes de concaténation et d'alternances ou est-ce mon code du fichier delete.php ?

Merci
Modifié en dernier par brother le 14 sept. 2011, 21:55, modifié 1 fois.

Mammouth du PHP | 19672 Messages

14 sept. 2011, 21:41

Hé, pour du code PHP, utilise donc le bouton PHP au lieu du bouton CODE quand tu poste, on aura une coloration syntaxique et ce sera largement moins pénible à lire.

Édite ton message et change ça s'il te plait, là je suis pas en état de décortiquer ça en faisant le truc moi-même en copiant collant en local.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

15 sept. 2011, 08:51

#-o ,
C'est fait...
:oops:

Mammouth du PHP | 19672 Messages

15 sept. 2011, 09:14

Le message « undefined index etc..» fait référence à un tableau dont tu tentes d'utiliser la valeur d'un index inexistant.

Là, c'est soit l'index de $_SESSION soit celui de $_POST qui n'existe pas. Je serais tenté de penser qu'il s'agit du second et que l'erreur se produit lors du chargement de la page, et comme tu n'as rien posté à ce moment là, la super-globale $_POST est vide.

[Edit] Édité par erreur et en partie supprimé, désolé[/Edit]
Modifié en dernier par Cyrano le 15 sept. 2011, 23:04, modifié 2 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

15 sept. 2011, 21:37

Bonjour,
J'ai retapé le code et j'ai toujours la même erreur :(
<?php
session_start(); 
//Recuperation des saisies
$id_article=$_SESSION["id_article"]."//".$_POST["id_article"];
$_SESSION["id_article"]=$id_article;
//**********************************
$quantite=$_SESSION["quantite"]."//".$_POST["quantite"];
$_SESSION["quantite"]=$quantite;
//**********************************
$prix_unit=$_SESSION["prix_unit"]."//".$_POST["prix_unit"];
$_SESSION["prix_unit"]=$prix_unit;
//**********************************
$design=$_SESSION["designation"]."//".$_POST["designation"];
$_SESSION['designation']=$design;
unset($_POST);
$_POST=array();
include_once('entete.php');

include_once("connex.inc.php");
?>
<?php
echo <<<CODE_HTML
<h3>
<h3>Votre panier</h3>
<table border="1" >


<tr>
<th>x</th>
<th>Code Article</th>
<th>Désignation</th>
<th>Quantité</th>
<th>Prix unitaire</th>
<th>Prix total</th>
CODE_HTML;
?>

<?php
//Connexion
$idcom=connex("rucheapiculture_gestion","myparam");
//Affichage du panier
$total=0;
$tabid_art=explode("//",$_SESSION["id_article"]);
$tabquantite=explode("//",$_SESSION["quantite"]);
$tabprix_unit=explode("//",$_SESSION["prix_unit"]);
$tabdesign=explode("//",$_SESSION["designation"]);
//***********************************
for($i=0;$i<count($tabid_art);$i++)
{
$requete = "SELECT id_article,designation,prix FROM rucheapiculture_gestion.article WHERE article.id_article='".$tabid_art[$i]."'";
$result=mysql_query($requete,$idcom);
while($tab = mysql_fetch_assoc($result))

{
    $prix = round($tab['prix'] * $tabquantite[$i], 2);
    $sLigne = <<<CODE_HTML
<tr>
   <td> 
 
<a href="delete.php?id={$tab['id_article']}"><img alt="corbeille" style="height:25px; width:20px; border:0px" src="corbeille.jpg"></a>
    </td>
  <td>
            {$tab['id_article']}
  </td>
  <td>
            {$tab['designation']}
   </td>
   <td>
  {$tabquantite[$i]}
 </td>
   <td>
    {$tab['prix']}
      </td>
          <td>
            {$prix}
          </td>
        </tr>

CODE_HTML;
    echo $sLigne;
    $total += $tab['prix'] * $tabquantite[$i];
}
}
echo <<<CODE_HTML
<tr><td colspan="5"><b>Prix total T.T.C</b></td><td style="text-align:right"><b>$total</b></td></tr>
</table>
  
CODE_HTML;
?>
<?php
echo <<<CODE_HTML

<a href="saisieclient.php" onclick="window.location='saisieclient.php'"><button type="button"> Terminer la commande </button></a>
</table>

CODE_HTML;
?>

<?php
include_once('pied.php');
?>
J'appliquerai dorénavant ce style de code, il faut que je m'y mette :priere: :
<<<CODE_HTML   

CODE_HTML;
Toujour les mêmes lignes d'erreurs ! :?
Je ne sais pas quoi faire..
Modifié en dernier par brother le 16 sept. 2011, 10:15, modifié 1 fois.

Mammouth du PHP | 19672 Messages

15 sept. 2011, 23:04

Est-ce que tu as lu ceci de mon précédent message ou juste la fin ?
Le message « undefined index etc..» fait référence à un tableau dont tu tentes d'utiliser la valeur d'un index inexistant.

Là, c'est soit l'index de $_SESSION soit celui de $_POST qui n'existe pas. Je serais tenté de penser qu'il s'agit du second et que l'erreur se produit lors du chargement de la page, et comme tu n'as rien posté à ce moment là, la super-globale $_POST est vide.
Ton fichier commence en utilisant des variable qui n'existent pas, donc le problème doit être résolu et donc... Est-ce que tu sais à quoi je fais référence ou pas du tout ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 49 Messages

16 sept. 2011, 14:41

Bonjour Cyrano,

Je vois que tu travail tard.
Ton fichier commence en utilisant des variable qui n'existent pas, donc le problème doit être résolu et donc... Est-ce que tu sais à quoi je fais référence ou pas du tout ?
Hummm :| , je crois que j'aurais du poster dans, hyper débutant !
Effectivement je ne vois du tout à quoi du fait référence....parce que je suis... :x

Ceci dit, depuis ce matin j'ai tenté de supprimer les ($_POST) en tête de ma page... Ensuite les ($_SESSION).... de réinventer et remplacer etc, mais rien ne va.
Je travail sur les travaux personnels TP n°3 Commerce en ligne, du livre PHP5 de chez Eyrolles (Jean Engels) ..... :lol:
Sachant qu'il n'avait pas prévu une corbeille pour la suppression des articles, je me suis lancé 8-| .

Merci de ton aide.

Mammouth du PHP | 19672 Messages

16 sept. 2011, 14:47

Ok, mais dans ce cas, as-tu lu attentivement mon tuto sur les paniers et vu la partie concernant la suppression des articles du panier ?

Là, tu mélanges deux choses : les données postées et les données en session : il faut bien distinguer les unes des autres et ne modifier les données de session qu'à partir de données clairement identifiées et existantes dans celles qui sont ou non postées. Les codes de mon tuto sont habituellement largement commentées et chaque commentaire a son importance, je te suggère d'y replonger et de revenir avec les questionnements sur ce que tu n'y aurais pas compris.

Le bouquin dont tu parles n'est pas dans ma bibliothèque et je n'en connais pas le contenu, mais les principes doivent être sensiblement les mêmes sur le reste.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 672 Messages

16 sept. 2011, 14:57

Ceci dit, depuis ce matin j'ai tenté de supprimer les ($_POST) en tête de ma page... Ensuite les ($_SESSION).... de réinventer et remplacer etc, mais rien ne va.
En fait, tu y vas complètement au hasard, quoi #-o

Arrête tout, pose-toi.
Et pose toi les bonnes questions :
- Que veux-tu faire ?
- Comment vas-tu le faire ?
- Où récupérer quelles variables ?
- A quoi sont censés correspondre les variables $_POST et $_SESSION ?


Et apprends à lire les messages d'erreur de PHP.
Notice: Undefined index: id_article in /web/essai/www/panier.php on line 4.
- L'erreur provient a priori de la ligne 4 du fichier panier.php.
- Tu demandes à PHP d'utiliser l'index id_article alors qu'il n'est pas défini.
$id_article=$_SESSION["id_article"]."//".$_POST["id_article"];
=> Soit $_SESSION['id_article'] n'est pas défini, soit c'est $_POST["id_article"].

La première chose à faire, c'est regarder ce qu'il y a dans tes variables. Exemple pour SESSION :
echo "Contenu de SESSION :<br />";
print_r($_SESSION);
A partir de là, essaye de comprendre pourquoi l'index id_article n'est pas défini...

Eléphanteau du PHP | 49 Messages

16 sept. 2011, 17:03

Bonjour,
Notice: Undefined index: id_article in /web/essai/www/panier.php on line 4.
- L'erreur provient a priori de la ligne 4 du fichier panier.php.
Merci de ton aide, j'ai bien compris que les erreurs venaient de la 4, 7, 10 et 13.
Mais voilà .... que faire :?:
Voici une image de l'écran après avoir fait :
echo "Contenu de SESSION :<br />";
print_r($_SESSION);
J'ai laissé les article du livre pour les essais....
Je ne sais pas quoi faire...
Même en regardant le livre, puisque le code vient de là .. #-o
Je me noie 8-|.....
Amicalement
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.