Panier de commande avec phpmyamin [Résolu]

cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 19 sept. 2005 à 20:00 - Dernière réponse : J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention
- 22 sept. 2005 à 19:26
Bonjour,

J'essaye de faire un panier d'achat, cependant, je n'arrive pas à
ajouter de produit dans mon panier. J'ai bien essayer d'ouvrir les
tutos existants, mais même en payant, je ne comprend spas comment on y
accède. Je pense toutefois que mon problème est différent puisqu'il se
situe au niveau de la boucle expliquée ce-dessous.



Il existe différentes catégories de produits. L'utilisateur en choisit
une dans une liste déroulante et un tableau des différents produits de
cette catégorie s'affiche.



Pour générer ce tableau, j'ai fait une boucle (colorée en bleu
dans le code)sur ma base de données phpmyamin où se trouve ma table
produits.



Le tableau comporte plusieurs colonnes, à savoir, une photo, un
descriptif, le prix et une case (checkbox) pour ajouter un produit dans
le panier de commande.

Mais comment afficher cette sélection? (en gras dans le code).



merci d'avance,

virginie

Afficher la suite 

25 réponses

Répondre au sujet
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 22 sept. 2005 à 18:59
+3
Utile
Salut,
Je suis super contente,LE SCRIPT FONCTIONNE!!
Merci pour ton aide précieuse JG!!
J'ai juste dû modifier une chose dans la ligne d'input du checkbox, à savoir:

echo "<td></td>";

et non pas :

echo "

on ne peut peu rien mettre entre les crochets.

Je me retrouve avec un autre problème, cette fois lié à ma base de données phpmyadmin. Je n'arrive pas à lier mes tables.
J'ai un message d'erreur à l'ouverture de ma BD qui est :

<LI>

Erreur
Certaines fonctionnalités ayant trait aux tables reliées sont désactivées. Pour une analyse du problème, cliquez fr-iso-8859-1&server=1&db=goldidental&goto=db_details_structure.php ici.
</LI>
J'ai cliqué mais c en anglais, et djà qu'en francais , c pas facil!!J'ai aussi été voir sur les forums mais on m'a proposé de cliquer sur un lien nommé "gestion des relations" qui n'apparait pas chez moi.
Voilà, je tape quand même mon code ci-dessous, car j'ai encore trouvé qq petites erreurs. Mais il n'est pas encore parfait.
Encore un grand merci JG et à bientôt!
ps: Interessant ton idée de mettre en remarque le nom de la fermeture des acolades, je suis partisanne, c bien plus clair pour les relectures!

<?php
//Ouverture de la session courante
session_start();
//connexion au serveur
include('connexion.php4');
//initialisation des variables
include('variables.php');
//$pageCourante="produits" ;
include('barre_de_progression.js');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>GOLDIDENTAL:Produits</title>
<link rel="stylesheet" href="goldi.css" type="text/css" >
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>



[index.htm ]





<li class="menuhautg">[accueil.php4 Accueil]</li>
<li class="menuhautg">[produits.php4 Produits]</li>
<li class="menuhautg">[fournisseurs.php4 Fournisseurs]</li>
<li class="menuhautg">[Sinscrire.php4 S'inscrire]</li>


<!--fin div "menuhautg"-->



<li class="menuhautd">[liens.php4 Liens]</li>
<li class="menuhautd">[contact.php4 Contact]</li>
<li class="menuhautd">[mailto:goldidental@edpnet.com">Mail</li>


<!--fin div "menuhautd"-->

<!--fin div "menuhaut"-->





<form name="form" method="post" >
<label>Sélectionner une catégorie </label>
<select name="requetes" id="liste_choix_categorie">
<option value="0">Toutes les catégories</option>
<option value="Amalgames">Amalgames</option>
<option value="Appareils">Appareils </option>
<option value="Blanchiment">Blanchiement</option>
<option value="Ciment">Ciment</option>
<option value="Composites">Composites</option>
<option value="Dents">Dents</option>
<option value="Désinfection">Désinfection</option>
<option value="Disposable">Disposable</option>
<option value="Empreintes">Empreintes</option>
<option value="Endo">Endo</option>
<option value="Fraises">Fraises</option>
<option value="Instruments">Instruments</option>
<option value="Polissage">Polissage</option>
<option value="Produits chirurgicaux">Produits chirurgicaux</option>
</select>

<select name="tri">
<option value="0">Trier par</option>
<option value="Nom_Produit">Trier par order alphabéthique</option>
<option value="Prix_Produit">Trier par prix</option>
</select>



<!--fin div "formulaire-->


<?php
// ne construire la requete que si il y'a lieu
if(isset($_POST["envoi"])){
// connexion, si échec... Boum dehors!
$bdd = mysql_select_db('goldidental', $link)
or die($message." Erreur: La BD n'existe pas!
\n");
$message. ="envoi";
// si une categorie est définie, selectionner uniquement celle-ci
if( isset($_POST['requetes']) and $_POST['requetes']!= =0 ) {
$categorie = "WHERE Categorie='".$_POST['requetes']."'";
} else {
$categorie = "";
}
// si une méthode de tri est définie, l'utiliser
if( isset($_POST['tri']) and $_POST['tri']!=0 ) {
$tri = "ORDER BY ".$_POST['tri']." ASC";
} else {
$tri = "";
}
// construction de la requete SQL
$q="SELECT * FROM Produits ".$categorie." ".$tri;
$query = mysql_query($q, $link);
if( ($donneespresentes=mysql_num_rows($query))>0){
// On analyse le resulat de la requète
echo" Photo |Nom |
Description |Prix |\";
if(isset($_SESSION['nom'])){
echo\"Ajouter \n au panier |\";
}//fin isset session1
$nbre_pdt =0;
while ($row = mysql_fetch_assoc($query)) {
$nbre_pdt++;
echo\"----
, \";
echo\" ".$row['Nom_Produit'];"<\td>";
echo", \".$row['Description_Produit'];\"<\td>\";
echo\" ".$row['Prix_Produit'];"<\td>";
if(isset($_SESSION['nom'])){
echo ", </td>\";
}//fin isset session2
echo\"\";
}//fin while $row
echo"
";
?>

</form>
<?php
}else echo "Aucun produit n'est disponible dans cette catégorie";// fin if query
} // fin if(isset($_POST["envoi"]))
if (isset($_POST['add'])){echo'add';
if (isset ($_POST['chk']) && is_array ($_POST['chk'])) {echo'rec';
foreach($_POST['chk'] as $id_produit => $num_produit) {echo $id_produit;echo'foreach'; echo $num_produit;
$marequete="INSERT INTO goldidental.Commandes (Num_Produit)
VALUES ('$num_produit')";
if(mysql_query($marequete,$link)){
echo 'ok';
}else echo 'merdoum';mysql_error();
} // fin foreach
} // fin isset(chk)
} // fin isset(add)
if( $donneespresentes >1){
echo'Haut';
}//fin if ancre
?>

<!--fin div "resultat"-->

<!--fin div "contenu_pdt"-->


<?php
include('login.php4');
echo $info_con;
mysql_close($link);
?>

<!--fin div "gauche"-->

Copyright@Goldidental 2005 Date
[mentionslegales Mentions légales]

<!--fin div "bas"-->

<!--fin div "tout_pdt"-->

</html>
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_girvin
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 22 sept. 2005 à 19:26
+3
Utile
Pas de quoi!



Bon courage, tu t'attaques à des scripts bien fastidieux là...

A+



PS : pose ton erreur écrite en anglais, je te la traduirais si tu veux
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de J_G
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 19 sept. 2005 à 21:14
0
Utile
Salut,



Merci d'avoir mis en relief les parties intéressantes de ton code... Vraiment appréciable.



Si je reprend ton code avec le même code de couleur pour t'indiquer quel partie je commente :





while ($row = mysql_fetch_assoc($query)) {

/* Ici tu vas dérouler tout ton résultat MySQL */

}



/* Tu est sorti de la boucle while */

/* Donc ça veus dire que $row==false */



foreach($row as $value){
/* Désolé, mais $row==false !!! */

/* Jamais tu ne rentreras dans le foreach ...*/




}

.
Commenter la réponse de J_G
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 19 sept. 2005 à 21:19
0
Utile
Conclusion :



Si tu veux redérouler ton résultat, rembobine le avec la fonction :

mysql_data_seek()



Et n'oubli pas de libérer la ressource à la fin de l'envoi avec :

mysql_free_result()



Voili, bonne chance!
Commenter la réponse de J_G
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 19 sept. 2005 à 21:36
0
Utile
Merci pour ta réponse rapide!!! Je ne connais pas ces fonctions mais j'vais essayer.
Encore merci
Commenter la réponse de cs_girvin
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 19 sept. 2005 à 21:40
0
Utile
Psst : si tu cliques sur les fonctions, t'arrives directe dans la documentation PHP...
Commenter la réponse de J_G
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 19 sept. 2005 à 23:21
0
Utile
bon, j'ai retourné le problème dans tous les sens , je ne vois pas.
je ne maîtrise pas assez le php.
Le problème vient du fait que $query n'est pas reconnu (au niveau du code en gras).
J'affiche la partie modifiée de mon code mais je pense que je m'égare.

J'espère qu'il n'est pas trop brouillon.

if (isset($_POST['add'])){ echo'add';

for ($i = mysql_num_rows ($query) - 1; $i >=0; $i--) {
if (!$seek=mysql_data_seek($query,$i)){
$rows=mysql_fetch_row($seek,$i);
continue;
}
if (!($rows = mysql_fetch_assoc($query))) {
continue;
}

if(isset($_POST['choix'])){
soit
$marequete ="INSERT INTO commandes (Nom_Produit) VALUES ('".$rows['nom_produit']."')";
if(mysql_query($marequete,$link)){
echo 'ok';
}else echo 'merdoum';

}continue;
}

ou
foreach ($rows as $value){echo $rows['Nom_Produit'];
if (isset($_POST['choix'])){echo 'choix';
$marequete="INSERT INTO commandes (Nom_Produit) VALUES ('".$rows['nom_produit']."')";
if(mysql_query($marequete,$link)){
echo 'ok';
}else echo 'merdoum';
}
}
} mysql_free_result($query);
?>

Merci
Commenter la réponse de cs_girvin
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 sept. 2005 à 08:16
0
Utile
Good Morning !



Non, tu recommences simplement ainsi :





mysql_seek_data($query,0);

while( $row = mysql_fetch_assoc($query) {

if (isset($_POST['choix'])){echo 'choix';
$marequete="INSERT INTO commandes (produit) VALUES ('".$row['nom_produit']."')";
if(mysql_query($marequete,$link)){
echo 'ok';
}else echo 'merdoum';
}

}

mysql_free_result($query);





Mais je n'arrive pas bien à cerner ce que doit faire ton code !!!
Commenter la réponse de J_G
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 20 sept. 2005 à 11:02
0
Utile
hello,

J'vais essayé d'être plus claire:
La boucle while en bleu affiche un tableau avec les produits(prix,photos...) de la catégorie choisie par l'utilisateur.

La dernière ligne de la boucle est un checkbox. A coté de chaque ligne produit, l'utilisateur peu cocher cette case, signifiant qu'il veut ajouter ce produit à son caddie.

Lorsque l'utilisateur a terminé, il clique sur le bouton "add"(partie en gras).
Je voulais qu'au clic,if (isset($_POST['add'])){ mon code php vérifie dans chaque ligne si l'utilisateur a choché la case.
if(isset($_POST['choix'])){

Le problème , c'est que $query n'est pas reconnu à ce niveau du code (en gras). Mais je ne peu quand même pas le mettre dans la boucle. voilà
ca fait des semaines que je suis dessus........
Commenter la réponse de cs_girvin
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 sept. 2005 à 13:01
0
Utile
Je vais te filer un serieux coup de pousse !

Nome tes checkboxes ainsi :

'] value="<?=$nom_produit?>" />



Après l'action submit, tu récupèrera la variable suivante :

$add = $_POST['chk']; // <= c'est un tableau qui comprend toutes les checkboxes cochées !!!

foreach($add as $id_produit => $nom_produit) {

/* Constriut ta requète SQL ici */

/* Tu as tout : l'id du produit et son nom */

/* C'est quasi magique !!! */



/* ATTENTION : */

/* si aucune checkbox n'est cochée */

/* la variable $_POST['chk'] n'existe pas !!! */

/* Dans ce cas utilise $add = isset($_POST['chk']) ? $_POST['chk'] : array(); */

}



A + ;)
Commenter la réponse de J_G
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 sept. 2005 à 13:03
0
Utile
Pouce, avec un 'c'

Nomme, avec deux 'm'

Récupèreras, avec un 's'



désol' pour l'othographe et la grammaire
Commenter la réponse de J_G
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 20 sept. 2005 à 13:29
0
Utile
Hello,



je peux modifier 1 ou 2 ptits trucs ? :-)



je vais te filer un serieux coup de pouce !

Nomme tes checkboxes ainsi :

'] value="<?php echo $nom_produit; ?>" />



Après l'action submit, tu récupèreras la variable suivante :

$_POST['chk']; // <= c'est un tableau qui comprend toutes les checkboxes cochées !!!

if (isset ($_POST['chk']) && is_array ($_POST['chk'])) {

foreach($_POST['chk'] as $id_produit => $nom_produit) {

/* Construis ta requète SQL ici */

/* Tu as tout : l'id du produit et son nom */

/* C'est quasi magique !!! */



/* ATTENTION : */

/* si aucune checkbox n'est cochée */

/* la variable $_POST['chk'] n'existe pas !!! */

/* Dans ce cas utilise $add = isset($_POST['chk']) ? $_POST['chk'] : array(); */

}

}



A + ;)
Commenter la réponse de malalam
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 sept. 2005 à 13:39
0
Utile
Salut malalam,



T'es un très bon conseillé PHP. Là dessus aucun doute !



Mais je vais profiter de ce post pou poser une gueulante :

<?php echo $nom_produit; ?>



Ca me les brises menues... !!!

<?=$nom_produit?> est tellement plus lisible



Et si tu tombe sur un serveur qui n'acepte pas le short-tag :



str_replace("<?=","<? echo ", $all_file);



J'ai appris pas mal de chose sur ce forum, mais
ça j'accroche pas. Alors si tu qq'un avait un argument "masssif" à me
fournir, j'en serai heureux!



A+ malalam
Commenter la réponse de J_G
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 20 sept. 2005 à 14:11
0
Utile
Merci JG pour le temps que tu prends pour m'aider!!
Je planche sur ta proposition mais j'en arrive toujours au même problème, il ne reconnaît pas ma variable du checkbox qui est dans ce dernier cas, ' chk'.

Pour l'input, comme il est déjà dans un echo, je concatène la variable comme ceci, je pense que c'est bon?
echo" <td><form name= 'quantite' action=".$_SERVER['PHP_SELF']." method='post'>

".$row['Num_Produit']."</gras>']' value=' ".$row['Nom_Produit']." ' />
</td></tr>";

Le code ci-dessus est dans la partie:
<?php
if(isset($_POST["envoi"])){

Mais le code ci-dessous, non.

Sinon, j'ai ajouté le script que tu m'as donné à la fin, hors du reste (sans quoi, cette partie du code ne serait pas exécutée)donc ceci:

if (isset($_POST['add'])){ echo'add';
//Après l'action submit, récupèreration de la variable
$_POST['chk'];

if (isset ($_POST['chk']) && is_array ($_POST['chk'])) {echo'rec';
foreach($_POST['chk'] as $id_produit => $nom_produit) {
$marequete="INSERT INTO commandes (produit)
VALUES ('".$row['nom_produit']."')";
if(mysql_query($marequete,$link)){
echo 'ok';
}else echo 'merdoum';
}
}
}

Mais comme il ne reconnaît pas 'chk', il n'exécute pas la requête.
Je suis désolée d'être aussi nulle.
Commenter la réponse de cs_girvin
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 20 sept. 2005 à 14:16
0
Utile
Mais je peu peut-être remplacer le check box par un lien, de facon à rajouter les produits au fur et à mesure, de cette facon, je pourrai incorporer le code de la requete au reste du code. bon, je vais tenter mais est-ce que ca ne risque pas d'être lent pour l'utilisateur d'attendre le rechargement de la page à chaque produit ajouté?
Commenter la réponse de cs_girvin
cs_girvin 15 Messages postés lundi 15 août 2005Date d'inscription 26 septembre 2005 Dernière intervention - 20 sept. 2005 à 14:17
0
Utile
peux
Commenter la réponse de cs_girvin
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 20 sept. 2005 à 14:35
0
Utile
J'ai... ;-) (du moins à mon sens)



Essaye de faire ça en xhtml, avec un en-tête xml... qui commence
par..<?xml donc...tu vas rire ;-) Une jolie parse error en
vue. (je parle des short_tags à on). xml... => xhtml, xsl, etc
etc...(qui a dit rss et soap ??)



<? echo ne marche pas sur un serveur qui n'accepte pas les short_tags.

C'est <?php echo, de ttes façons.

Et tu ne vas pas t'amuser à parser tes scripts selon le serveur sur lequel il va se retrouver, quand même?

Bref, plus lisible, c'est un avis...ça reste une question de goût.J'ai
rien contre le fait que tu trouves <?= plus lisible que <?php
echo, quoi. Mais moins portable, ça, ce n'est pas qu'un avis ni une
question de goût : c'est un fait. Et comme ça ne coûte pas
grandchose...je ne vois pas en quoi ça êne (donc, pas en quoi ça te les
brise menues, en fait, lol) (mais je compatis ;-) )
Commenter la réponse de malalam
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 20 sept. 2005 à 14:46
0
Utile
Girvin =>

reprenons du basique...parce que si ton tableau est indéfini, il y a
sans doute un problème de soumission de ton formulaire. Un exemple très
simple :



<form action="" method="post">







</fom>

<?php

if (isset ($_POST['soumission']) && $_POST['soumission'] === 'ok') {

if (isset ($_POST['test']) && is_array ($_POST['test'])) {

foreach ($_POST['test'] as $clef => $valeur) {

echo '
', $clef, ' => ', $valeur;

}

}

}

?>
Commenter la réponse de malalam
J_G 1406 Messages postés mercredi 17 août 2005Date d'inscription 28 août 2007 Dernière intervention - 20 sept. 2005 à 15:23
0
Utile
Entendu malalam, ... mais pas complètement convaincu! Essentiellement
parceque je n'ai pas encore croisé de serveur refusant le "<?= "...



Grivin :

echo" <td><form name ='quantite' action=".$_SERVER['PHP_SELF']." method='post'>"

Si $_SERVER['PHP_SELF'] contient des espaces... aie!

Encadre la valeur de l'attribut action : action="".$_SERVER['PHP_SELF'].""



idem ici les attributs doivent être encadrées par des guillemets doubles, sinon name='chk['unProduit']' va bugger... forcément!

=> ".$row['Num_Produit']."</gras>']' value='".$row['Nom_Produit']."' />



Re-fe-le avec ça et on verra ce que ça donne...

A+
Commenter la réponse de J_G
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 20 sept. 2005 à 15:47
0
Utile
Essentiellement parceque je n'ai pas encore croisé de serveur refusant le



"<?="...



Oui je sais, tu as raison. Mais ça viendra...ne serait-ce qu'avec
la démocratisation du xml (ça, ça a déjà bien commencé...) et donc du
xhtml : bref, du mélange des tags dans les pages. Disons que je préfère
être paré, plutôt que pris au dépourvu sur chaque de mes scripts, en
fait. Mais bon...



Je ne pige pas bien le problème de Girvin, perso. Un code plus complet seraitle bienvenu : formulaire + traitement.
Commenter la réponse de malalam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

panier de commande avec phpmyamin - page 2