[php/mysql pb] site vente en ligne

Fermé
fleur2 - 2 juin 2006 à 21:54
 Zoromar - 30 janv. 2008 à 11:59
Bonsoir

voila je fais actuellement un site de vente en ligne sous php et mysql et j'aimerai qu'on m'aide à trouver : voilà je ne sais pas comment faire pour ajouter des produits que les gens auront selectionné dans ma base de donnée et donc sur le panier d'achat (qui affiche selon la base de donnée les fiches sélectionné par l'acheteur).

les gens pour selectionnés mettent la quantité pour chaque produit que les gens veulent .. et en fait sa ajout zéro pour toutes mes variables dans ma base.

Voila si vous avez des conseils, Merci de me faire partager.
A voir également:

51 réponses

PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
6 juin 2006 à 21:56
Bsr


Oui le phénomène que tu me décris est normal ... car tu as commi une petite erreur.

Explication :

echo"<td>$ref_art<input name='cde[art][ref_art]' type='hidden' value=$ref_art></td>"; 


Dans ta boucle tu donnes le même nom à tous tes champs ici pour la référence article "cde[art][ref_art]" .
Donc au final même si PHP recoit plusieurs variables comme elles portent le même nom , la dernière gagne (les autres sont écrasées) !


Voici le code corrigé :

echo"<td>$ref_art<input name='cde[".$ref_art."][ref_art]' type='hidden' value=$ref_art></td>"; 


Fait de même avec tes autres champs.

j'espère que dans $ref_art tu n'as pas de caractères "bizarre" du type espace, "%" etc ... on ne sait jamais mais ca pourrait éventuellement gêner PHP



Pour les informations, je pensais plus à ce genre de chose (LOL) :

un export de la structure des tables que tu utilises réalisé à partir de PhpMyAdmin.

D'ailleurs je ne serais trop te conseiller de faire au moins un export des structures de ta base afin d'avoir une sauvegarde ! En effet si pour une raison quelconque le serveur MySQL connaissait une défaillance tu devrais recréer ta base avec toutes ses tables et tous ses champs de A à Z ! Autant t'éviter cette corvée ingrate ...

Ex d'export :

Base de données test - Table essai sur le serveur localhost 
# phpMyAdmin SQL Dump
# version 2.5.3
# https://www.phpmyadmin.net/
#
# Serveur: localhost
# Généré le : Mardi 06 Juin 2006 à 21:50
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
# 
# Base de données: `test`
# 

# --------------------------------------------------------

#
# Structure de la table `essai`
#

CREATE TABLE `essai` (
  `fld_int` int(11) NOT NULL default '0',
  `fld_date` date NOT NULL default '0000-00-00',
  `fld_time` time NOT NULL default '00:00:00',
  `fld_datetime` datetime NOT NULL default '0000-00-00 00:00:00',
  `fld_text` varchar(100) NOT NULL default ''
) TYPE=MyISAM;


2
ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 342
2 juin 2006 à 22:00
Bonjour,

Essaie d'apprendre des notions php sur les "sessions" (c'est assez facile).

Tchuss
0
non je ne veux pas faire de session !!!

j'ai déja une requete en php de fait s'est juste la passerelle entre la selection, l'ajout vers le panier d'achat qu'il me faut trouver.

Toutes idées pertinentes sont les biens venues.

Merci d'avance.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
3 juin 2006 à 11:14
salut

il serait interessant de voir un peu le code que tu utilise pour stocker les données dans le panier
0
voila mon code pour AJOUTER DANS MA base de donnée, mes sa me rajoute dans celle-ci une ligne blanche avec rien dedans, en fait j'ai un pb pour séléctionner mes articles :
<?

$ref_art=$_POST['ref_art'];
$qtite_com=$_POST['qtite_com'];
$prix=$_POST['prix'];

{
//ligne de connection a ma base
include("vars.inc");

$req="INSERT INTO article_com(ref_art,qtite_com,prix) VALUES('$ref_art','$qtite_com','$prix')";

mysql_query($req) or die('erreur');
echo"<br>ajout effectuer";
}

?>


ET C'est celui la que j'arrive pas : je selectionne un article a ajouter en fonction de la quantité que les gens vont prendre mais sa n'ajoute qu'un ligne blanche ..
echo'<form action="ajout_annuler1.php" method="POST">';
echo '<table bgcolor=#CCCCFF border="1">';
//entêtes des colonnes

echo'<td>'.'reférence de article'.'</td>'.'<td>'.'nom'.'</td>'.'<td>'.'type maison '.'</td>'.'<td>'.'description'.'</td>'.'<td>'.'prix'.'</td>'.'<td>'.'photo'.'</td>'.'<td>'.'quantité'.'</td>'.'<tr>';

while($resultat=mysql_fetch_array($req)){

echo'<td>'.$resultat['ref_art'].'</td>';
echo'<td>'.$resultat['nom'].'</td>';
//echo'<td>'.$resultat['code_catego'].'</td>';
echo'<td>'.$resultat['type_maison'].'</td>';
echo'<td>'.$resultat['description'].'</td>';
echo'<td>'.$resultat['prix'].'</td>';
echo'<td>'.$resultat['fichier_photo'].'</td>';
echo'<td><select name="qtite_com">
	    <option value="0">0</option>
	    <option value="1">1</option>
	    <option value="2">2</option></select></td></tr>';

//<input type='text' name='qtite_com' value='0'></td></tr>';
//echo"<td><input type='checkbox' name='select' value='1'></td></tr>";

echo'</center>';
}
echo'</table>';
echo'<br>';
echo'<br>';
echo '<table align=left><tr><td>
<div align=left><a href="pageprincipale4.php">retour page principale</a></div></td>

<td align=right><input type="submit" value="Annuler"></td></tr></form>

<td align=right><form action="ajout_test_panier1.php"  method="POST"><input type="submit" value="Ajouter articles dans le panier"></td></tr></form>

<td align=right><form action="voire_panier.php"  method="POST"><input type="submit" value="Voire panier"></td></tr></form>

</table>';
?>


Merci d'avance.
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
3 juin 2006 à 12:54
ben deja je remarque une chose. tu recupere avant ta requete la reference de l'article , la quantité et le prix avec ca

$ref_art=$_POST['ref_art'];
$qtite_com=$_POST['qtite_com'];
$prix=$_POST['prix'];

deja pour ca il est interessant de faire un test pour savoir si la valeur existe sinon la remplacer comme ca

if(isset($_POST['ref_art'];$ref_art=$_POST['ref_art'];
else $ref_art="";

mais ce morceau de code ne peux rien t'apporter car dans ton formulaire rien ne te permet de transferer la reference de l'article et le prix car tu ne fais que les affichés dans la page

je vais te donner un exemple

<form name="formulaire" method="post" action"verif.php">

< input type="text" name="nom">

<input type="submit" value="Envoyer">

</form>

dans le cas ci dessus quand tu va envoyer le formulaire la methode post va te permettre de recuperer la valeur saisie dans "nom" grace a cette ligne

$nom=$_POST['nom'];

mais dans ton cas tu ne fais qu'afficher la reference article et non la mettre dans un élément qui permet de l'envoyer

voila j'espere avoir été clair sinon n'hesite pas a revenir
0
Merci, mais alors comment je fais ... si c'est pas bon .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
3 juin 2006 à 13:15
deja a ce nivo

while($resultat=mysql_fetch_array($req)){

echo'<td>'.$resultat['ref_art'].'</td>';
echo'<td>'.$resultat['nom'].'</td>';
echo'<td>'.$resultat['code_catego'].'</td>';
echo'<td>'.$resultat['type_maison'].'</td>';
echo'<td>'.$resultat['description'].'</td>';
echo'<td>'.$resultat['prix'].'</td>';
echo'<td>'.$resultat['fichier_photo'].'</td>';
echo'<td><select name="qtite_com">
	    <option value="0">0</option>
	    <option value="1">1</option>
	    <option value="2">2</option></select></td></tr>';

//<input type='text' name='qtite_com' value='0'></td></tr>';
//echo"<td><input type='checkbox' name='select' value='1'></td></tr>";

echo'</center>';
}



je mettrais

while($resultat=mysql_fetch_array($req)){
$ref_art=$resultat['ref_art']
$nom=$resultat['nom']

etc....

echo'<td>'.$ref_art.'<input name="Cref_art" type='hidden' value=$Ref_art></td>';
echo'<td>'.$Nom.'<input name='Nom' type='hidden' value=$Nom></td>';

etc....




deja voir avec ca

je te conseille aussi en dessous de ca

$req="INSERT INTO article_com(ref_art,qtite_com,prix) VALUES('$ref_art','$qtite_com','$prix')";


de mettre

echo $req;

ca t'affichera sur ta page d'envoi la requete. si tu vois que après VALUES les données entre parenthèse ne sont pas celle que tu souhaite c qu'il y a un soucis

voila si tu as encore besoin d'aide n'hesite pas
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
3 juin 2006 à 13:23
Bjr,

Non, tu t'y prends mal !

D'abord sache que lorsque tu utilises plusieurs fois la balise <form></form> PHP ne reçoit que les données incluses dans cette balise et pas dans les autres

Ex 1 :

<html>
<title>panier</title>
<body>
<form action="enregistrer.php" method="post">
Valeur 1<input name="valeur1" type="text" value="1"><br/>
Valeur 2<input name="valeur2" type="text" value="2"><br/>
</form>
<form action="enregistrer.php" method="post">
Valeur 3<input name="valeur3" type="text" value="3"><br/>
Valeur 4<input name="valeur4" type="text" value="4"> <br/>
<input type="submit" name="save" value="Enregistrer"> 
</form>
</body>
</html>


et la page enregistrer.php (juste un dump des variables reçues par la méthode POST ) :

<html>
<title>panier enregistrer</title>
<body>
<pre>
<?php
echo var_dump($_POST);
?>
</pre>
</body>
</html>


Quoi que tu puisses renseigner dans "Valeur 1" et "Valeur 2" PHP récupèrera ceci :

array(3) {
  ["valeur3"]=>
  string(1) "3"
  ["valeur4"]=>
  string(1) "4"
  ["save"]=>
  string(11) "Enregistrer"
}



Bref pas de $_POST["valeur1"] ni $_POST ["valeur2"] !

Maintenant on corrige en ex 2 :

<html>
<title>panier</title>
<body>
<form action="enregistrer.php" method="post">
Valeur 1<input name="valeur1" type="text" value="1"><br/>
Valeur 2<input name="valeur2" type="text" value="2"><br/>
Valeur 3<input name="valeur3" type="text" value="3"><br/>
Valeur 4<input name="valeur4" type="text" value="4"><br/>
<input type="submit" name="save" value="Enregistrer"> 
</form>
</body>
</html>


Résultat :
array(5) {
  ["valeur1"]=>
  string(1) "1"
  ["valeur2"]=>
  string(1) "2"
  ["valeur3"]=>
  string(1) "3"
  ["valeur4"]=>
  string(1) "4"
  ["save"]=>
  string(11) "Enregistrer"
}


ah là c'est mieux, bcp mieux


Mais imaginons que maintenant tu as 200 articles : pas facile de gérer 200 variables $_POST["valeur1"] .. $_POST["valeur200"]

Il doit bien exister un autre moyen ?
Hé bien oui ! Il suffit de ruser un peu pour générer un tableau en PHP

Ex 3 :

<html>
<title>panier</title>
<body>
<form action="enregistrer.php" method="post">
Valeur 1<input name="valeur[]" type="text" value="1"><br/>
Valeur 2<input name="valeur[]" type="text" value="2"><br/>
Valeur 3<input name="valeur[]" type="text" value="3"><br/>
Valeur 4<input name="valeur[]" type="text" value="4"><br/>
<input type="submit" name="save" value="Enregistrer"> 
</form>
</body>
</html>



Le résultat :

array(2) {
  ["valeur"]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
  }
  ["save"]=>
  string(11) "Enregistrer"
}



Parfait : maintenant on récupère $_POST["valeur"] qui est un tableau


Appliquons ce principe à ta commande :

<html>
<title>panier</title>
<body>
<form action="enregistrer.php" method="post">

<table border="1">
<tr>
<td>Réf</td>
<td>Qté</td>
</tr>

<tr>
<td>Article 1</td>
<td><input name="qte[]" type="text" value="1"></td>
</tr>

<tr>
<td>Article 2</td>
<td><input name="qte[]" type="text" value="2"></td>
</tr>

</table>
<input type="submit" name="save" value="Enregistrer"> 
</form>
</body>
</html>


Résultat :

array(2) {
  ["qte"]=>
  array(2) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
  }
  ["save"]=>
  string(11) "Enregistrer"
}



Hum pas mal mais il manque la référence ! En effet on ne sait pas ici que $_POST["qte"][0] correspond à l'article 1 ...

Comment faire ?

Simple : PHP gère les tableaux associatifs. Alors utilisons les ! ;-)

Et voilà :

<html>
<title>panier</title>
<body>
<form action="enregistrer.php" method="post">

<table border="1">
<tr>
<td>Réf</td>
<td>Qté</td>
</tr>

<tr>
<td>Article 1</td>
<td><input name="cde[Article 1]qte[]" type="text" value="1"></td>
</tr>

<tr>
<td>Article 2</td>
<td><input name="cde[Article 2]qte[]" type="text" value="2"></td>
</tr>

</table>
<input type="submit" name="save" value="Enregistrer"> 
</form>
</body>
</html>



le résultat :

array(2) {
  ["cde"]=>
  array(2) {
    ["Article 1"]=>
    string(1) "1"
    ["Article 2"]=>
    string(1) "2"
  }
  ["save"]=>
  string(11) "Enregistrer"
}


Le top : cette fois-ci dans le tableau $_POST["cde"] on récupère un tableau associatif : les clés sont les références et les valeurs les qtés.

Exemple d'utilisation en modifiant enregistrer.php :

<html>
<title>panier enregistrer</title>
<body>
Vous avez commandé les articles suivants : <br/>
<?php

$cde=$_POST["cde"];
foreach ($cde as $art => $qte)
{
	echo "Article : ".$art."    Qte : ".$qte."<br/>";
}
?>


</body>
</html>




Voilà

Maintenant pour ce qui est d'identifier l'utilisateur tu devrais utiliser les sessions
0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159
3 juin 2006 à 13:26
donc ce que j'avais indiqué n'était pas bon du tout ??
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606 > antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009
3 juin 2006 à 13:37
Bjr antic80,

En fait je m'adressais à fleur2 ;-)

sinon ton idée de mettre les références dans un champ caché est bien mais si tu nommes tous tes champs "Cref_art" par ex, PHP ne récupérera qu'une seule valeur.
Or ici on veut récupérer autant de lignes que d'articles choisis par le client.

Pour les tests des valeurs postées avec isset() tu as raison : c'est bien plus sûr de tester



0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159 > PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009
3 juin 2006 à 14:22
merci ca me rassure et je vais étudié ton code ca pourrais m'aider
0
fleur2 > antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009
3 juin 2006 à 15:26
Merci, maintenant je vais tester et voir si sa marche.

et je vous dirai sa.
Bonne aprés-midi à vous.
0
fleur2 > antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009
3 juin 2006 à 20:51
Voila, j'ai testé ton code sur le mien et il est bien sauf que moi j'aimerai rajouté dans le panier : prix, nom article et j'ai essayé en fait sa me remet la meme valeur que la quantité..

Fichier
<html> 
<title>panier enregistrer</title> 
<body> 
Vous avez commandé les articles suivants : <br/> 
<?
$prix=$_POST["prix"];
$cde=$_POST["cde"]; 
foreach ($cde as $art => $qte) 

{ 
echo "Article : ".$art." Qte : ".$qte." Prix : ".$prix."<br/>"; 
} 
?> 


</body> 
</html> 





td>Référence</td> 
<td>Prix</td>
<td>Quantité</td> 
</tr> 

<tr> 
<td>Article 1</td> 
<td><input name="Prix1" value="12" ></td>
<td><input name="cde[Article 1]qte[]" type="text" value="1"></td> 
 
</tr> 

<tr> 
<td>Article 2</td> 
<td><input name="Prix2" type="text" value="9" ></td>
<td><input name="cde[Article 2]qte[]" type="text" value="2"></td> 

</tr> 



Merci de continuer à m'aider..lol

GB et Bnuit
0
Bonjour, voilà ma demande : lol

Comment faire sous php : la traduction suivante :
bouton ="quand les clients vont appuyer sur ajouter au panier achat"
soit ->
balayer un tableau d'article (afficher grace à une requete sql)
pour vérifier si - quantité=0 alors ne rien faire

-Autrement ajouter a la base de donnée (soit le panier d'achat) avec un { include("ajout_bd.php");}

Merci de me traduire sa, cela serait trés simpa, et j'essaye depuis quelques jours mais j'ai pas réussi a trouver toute seule.. donc un coup de main serait avec Grand plaisir .

Merci d'avance.
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
6 juin 2006 à 17:48
Bjr

Ben ca dépend de ce que tu as dans ta page au départ

Faudrait que tu donnes les sources ou éventuellement une adresse sur le web

Quelles tables MySQL utilises-tu ? Structure, champs etc ...



Si je reprends mon code voici comment tester uniquement les articles avec une qté :

<html>
<title>panier enregistrer</title>
<body>
<?php
$cde=$_POST["cde"];

// Test si au moins 1 article est commandé
$ok = false;
foreach ($cde as $art=>$donnees)
{
	$qte = $donnees["qte"];
	if ($qte)
        {
		$ok = true; // on a au moins 1 article en cde
		break; // on sort de la boucle : pas la peine de continuer les tests
	} 
}

if ($ok) // Si au moins 1 article en cde
{
	echo "Contenu de votre panier : <br />";
	foreach ($cde as $art=>$donnees)
	{
		$prix = $donnees["prix"];
		$qte = $donnees["qte"];
		if ($qte)
		{
                	// Place ici le code pour sauver dans MySQL

			echo "Article : ".$art."    Qte : ".$qte."  Prix unitaire : ".$prix."<br />";
                } 
	}
}
else
{

	echo "Votre panier est vide !<br />";
}

?>


</body>
</html>
0
Merci, c'est presque sa, sauf qu'il reste un tit souci, en fait le code ne teste
que la derniere ligne de mon tableau d'articles.


Et c'est mysql avec easy php1.7 (Bienvenue à phpMyAdmin 2.5.3), si c'est sa que tu demandais.

Voila fetes1.php : affiche les produits correspondant au type " fete"

<?
//permet de me connecter a ma base de donnees
include("vars.inc");

$sql="SELECT * FROM article Where article.spécialité = 'fêtes' ";

$req=mysql_query($sql)or die ("error de connexion");
echo'<center>';
echo'<font size=6>'.'Liste des articles pour les fêtes'.'</font>';
echo'<br>'.'<br>';
//creation cu tableau
include("article1.php");
?>

Article1.php: permet de lister  avec mysql à travers une requete les produits 

<?
//echo'<form action="ajout_annuler1.php" method="POST">';
echo'<form action="ajout_test_panier1.php" method="POST">';
echo '<table bgcolor=#CCCCFF border="1">';
//entêtes des colonnes

echo'<td>'.'reférence de article'.'</td>'.'<td>'.'nom'.'</td>'.'<td>'.'prix'.'</td>'.'<td>'.'photo'.'</td>'.'<td>'.'quantite'.'</td>'.'<tr>';

while($resultat=mysql_fetch_array($req))
{
$ref_art=$resultat['ref_art'];
$nom=$resultat['nom'];
$prix=$resultat['prix'];
//$type_maison=$resultat['type_maison']; 
//$description=$resultat['description']; 
$qtite_com=$resultat['qtite_com'];
$fichier_photo=$resultat['fichier_photo'];

echo"<td>$ref_art<input name='cde[art][ref_art]' type='hidden' value=$ref_art></td>"; 

echo"<td>$nom<input name='cde[art][nom]' type='hidden' value=$nom></td>"; 


echo"<td>$prix<input name='cde[art][prix]' type='hidden' value=$prix></td>";

echo"<td>$fichier_photo<input name='fichier_photo' type='hidden' value=$fichier_photo></td>"; 

echo"<td>$qtite_com<input name='cde[art][qtite_com]' type='text' value=$qtite_com></td></tr>";


echo'</center>';
}
echo'</table>';
echo'<br>';
echo'<br>';
echo '<table align=left><tr><td>


<td align=right><input type="submit" name="save" value="Ajouter articles dans le panier"></td></tr></form>


<div align=left><a href="pageprincipale4.php">retour page principale</a></div></td>
</table>';
?>


Ajout_test_panier1.php : tester la quantité , et le panier d'achat
<pre>
<?php
echo var_dump($_POST);
?>
</pre>
<?
//foreach ($com as $ref_art => $qtite_com) 
//{ echo "Article : ".$ref_art." Nom : ".$nom." Prix : ".$prix." quantité : ".$qtite_com."<br/>"; } 

//$info = array ("ref_art" =>"ref_art","qtit_com" =>"qtite_com","prix" => "prix","nom" => "nom");
$cde=$_POST["cde"]; 

// Test si au moins 1 article est commandé 
$ok = false; 
foreach ($cde as $art=>$donnees) 
{ 
$qtite_com = $donnees["qtite_com"]; 
if ($qtite_com) 
{ 
$ok = true; // on a au moins 1 article en cde 
break; // on sort de la boucle : pas la peine de continuer les tests 
} 
} 

if ($ok) // Si au moins 1 article en cde 
{ 
echo "Contenu de votre panier : <br />"; 
foreach ($cde as $art=>$donnees) 
{ 
$ref_art=$donnees["ref_art"];
$nom=$donnees["nom"];
$prix = $donnees["prix"]; 
$qtite_com = $donnees["qtite_com"]; 
if ($qtite_com) 
{ 
// Place ici le code pour sauver dans MySQL 

echo "<table><tr><td>Article : ".$ref_art."</tr><tr><td> 
Nom : ".$nom."</tr><tr><td>   Quantité : ".$qtite_com." 
</tr><tr> <td>Prix : ".$prix." </tr></table><br/>"; 

//echo "Article : ".$ref_art." Quantite : ".$qtite_com." Prix unitaire : ".$prix."<br />"; 
} 
} 
} 
else 
{ 
echo "Votre panier est vide !<br />"; 
} 
?>

Merci, de continuer à m'aider, c'est trés trés Gentil !
0
ok, mais il faut faire :
SA->
echo"<td>$nom<input name='cde[".$nom."][nom]' type='hidden' value=$nom></td>";

ou sa
echo"<td>$nom<input name='cde[".$ref_art."][nom]' type='hidden' value=$nom></td>";

..par ex
0
OUI sa y es , c'est la 2eme solution, j'ai trouvé, c'est comme je veux, merci BEAUCOUP !


par contre il me met pour ma page article1.php :

Notice: Undefined index: qtite_com in c:\program files\easyphp1-7\www\arom_arts\article1.php on line 16

et L16=$qtite_com=$resultat['qtite_com'];

et si je l'a supprime sa me met pb de variable, je vois pas on est le soucis, car les autres sont déclarées pareils..
0
AH ba j'ai répondu a ma question, dsl de vous avoir embéter, j'ai réussi en trichant, bidouillant, mais sa marche bien donc.. je vais pas me plaindre , maintenant je vais améliorer tout sa et tester.


MERCI BEAUCOUP , de m'avoir aider !!

Baprés midi
0
Mon probléme maintenant, c'est qu'une fois que je vois mon panier avec les articles je voudrais valider mon achat en appuyant sur le bouton ajouter articles dans bd mais il y a une erreur : en fait la requete ne reconnait pas les articles de mon panier,elle ne les prend pas et donc ne les ajoute pas, en fait elle fait comme si il n'y avait aucun article sélectionné ..

voila le code pour l'afficher le panier d'achat auquel j'ai rajouté un bouton pour enregistrer ls articles commandé dans la base de donnée...mais sa ne marche pas ..
<pre>
<?php
//echo var_dump($_POST);

?>
</pre>
<?
//foreach ($com as $ref_art => $qtite_com) 
//{ echo "Article : ".$ref_art." Nom : ".$nom." Prix : ".$prix." quantité : ".$qtite_com."<br/>"; } 

//$info = array ("ref_art" =>"ref_art","qtit_com" =>"qtite_com","prix" => "prix","nom" => "nom");
$cde=$_POST["cde"]; 

// Test si au moins 1 article est commandé 
$ok = false; 
foreach ($cde as $art=>$donnees) 
{ 
$qtite_com = $donnees["qtite_com"]; 
if ($qtite_com) 
{ 
$ok = true; // on a au moins 1 article en cde 
break; // on sort de la boucle : pas la peine de continuer les tests 
} 
} 

if ($ok) // Si au moins 1 article en cde 
{ echo'<form action="ajout_bd.php" method="POST">';
echo "Contenu de votre panier : <br />"; 
foreach ($cde as $art=>$donnees) 
{ 
$ref_art=$donnees["ref_art"];
$nom=$donnees["nom"];
$prix = $donnees["prix"]; 
$qtite_com = $donnees["qtite_com"]; 
if ($qtite_com) 
{ 
// Place ici le code pour sauver dans MySQL 

echo "<table><tr><td>Référence d'article : ".$ref_art."</td></tr><td> 
Nom : ".$nom."</td></tr><td>   Quantité : ".$qtite_com." </td></tr>
<td>Prix : ".$prix." </td></tr></tr></table><br/>"; 

//echo "Article : ".$ref_art." Quantite : ".$qtite_com." Prix unitaire : ".$prix."<br />"; 
} 
} 
} 
else 
{ 
echo "Votre panier est vide !<br />"; 
} 
echo'<td align=right><input type="submit" name="save" value="Ajouter articles dans bd"></td></tr></form>';
?>


et là c'est mon fichier qui devrait ajouter mes articles ds ma base de donnée ..
<code>
<?

$ref_art=$_POST['ref_art'];
$qtite_com=$_POST['qtite_com'];
$prix=$_POST['prix'];

{
include("vars.inc");

$req="INSERT INTO article_com(ref_art,qtite_com,prix) VALUES('$ref_art','$qtite_com','$prix') ";



mysql_query($req) or die('erreur');
echo"<br>ajout effectuer";
}
?>


Merci de continuer, a m'aider , c'est trés trés gentil, STP ... aide moi .



</code>
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
7 juin 2006 à 21:54
Bonsoir,

Ca fait longtemps que tu développes des sites web ? que tu programmes avec PHP ?

Ce n'est pas une critique mais juste pour connaître ton niveau : ca me permet d'adapter mes réponses.
Par ex je n'explique pas ce qu'est un foreach ni comment ça fonctionne car si tu fais un site marchant je suppose que tu as déjà de bonnes connaissances.

Cependant je croyais que tu avais compris comment fonctionnait les formulaires mais à l'évidence ... non :-(

Alors je reprends :
Dans une page web tu délimites un formulaire par les balises <form></form>

Dans la balise <form> tu indiques la page de destination une fois qu'on valide le formulaire avec l'attribut "action" et comment doivent être envoyées les données associées, lorsqu'elles existent, avec l'attribut "method"
Ce qui donne :
<form action="ajout_bd.php" method="POST">

Ok apparemment là tu sais faire. Cool !

Seulement ensuite seules les données placées dans une balise <INPUT> sont envoyées. Les balises INPUT définissent ce qu'on appelle des champs.
Tout autre code HTML (paragraphe, tableau, url, image, etc ...) que tu ajoutes en plus entre les balises <form></form> est ignoré !

Ici tu ne fais que générer un tableau HTML (<table> ... </table>) mais tu ne définis aucun champ !!!! Donc ta page ajout_bd.php ne reçoit rien puis que tu ne lui envoies rien. CQFD !

Tu dois faire exactement la même chose que dans la page où tu proposes le choix des articles sauf qu'ici tu utilises uniquement des champs cachés (hidden)

Donc à la place de:


echo "<table><tr><td>Référence d'article : ".$ref_art."</td></tr><td> 
Nom : ".$nom."</td></tr><td>   Quantité : ".$qtite_com." </td></tr>
<td>Prix : ".$prix." </td></tr></tr></table><br/>"; 



Ecris :

echo "<table><tr><td>Référence d'article : ".$ref_art.
"<input name='cde[".$ref_art."][ref_art]' type='hidden' value=".$ref_art."></td></tr><td> 
Nom : ".$nom."</td></tr><td>   Quantité : ".$qtite_com. 
"<input name='cde[".$ref_art."][qtite_com]' type='hidden' value=".$qtite_com."></td></tr>
<td>Prix : ".$prix." <input name='cde[".$ref_art."][prix]' type='hidden' value=".$prix."</td></tr></tr></table><br/>"; 



Sauf erreur ca devrait fonctionner.



Bon maintenant ta page ajout_bd.php

Tu ne fais aucune boucle : pas de foreach , ni de while ni rien ....

Certe PHP est un langage puissant mais là il va qd même falloir que tu l'aides un peu ! LOL Il ne peut pas deviner que tu souhaites enregistrer une liste d'articles donc exécuter plusieurs fois ta requête


Note que tu ne peux pas appeller un formulaire en boucle : tu dois donc appeller un seul formulaire, transmettre toutes les données à l'intérieur et effectuer la boucle par programmation avec PHP

Comment faire la boucle en PHP ? Ben tu as déjà la réponse : avec un foreach comme pour l'affichage du panier naturellement !

Ce qui peut donner :

<?php
include("vars.inc");
$cde=$_POST["cde"]; 

foreach ($cde as $art=>$donnees) 
{ 
	$ref_art=$donnees["ref_art"];
	$prix = $donnees["prix"]; 
	$qtite_com = $donnees["qtite_com"]; 
	if ($qtite_com) // si qté différente de zéro
	{ 
	
		// Exécute une requête pour chaque article
		$req="INSERT INTO article_com(ref_art,qtite_com,prix) VALUES('".$ref_art."',".$qtite_com.",".$prix.") ";
		mysql_query($req) or die('erreur');
	}
}		

echo"<br>ajout effectuer";
?>



Sous toute réserve ! Surtout que j'ignore ce que contient vars.inc
La connexion à ta base de données je suppose ...

Mais c'est l'idée.

Cependant il y a un truc qui ne colle pas : nulle part je ne vois de numéro de commande ?

0
OUI, c'est la premiere fois que je fais un site de vente en ligne, et durant l'année j'avais fait surtout DELPHI et vaguement, basiquement PHP, donc c'est pour sa .. que j'ai un peu de mal ..dsl de te paraitre bete..

donc sa ne marche pas il me met erreur pour qd je clique sur ajout ds bd et j'ai remplacer ce que tu m'as donné dans ajout_test1.

Mais non il ne veut pas, et en ce qui concerne mon numéro de commande c'est auto incrémente donc a chaque produit acheté un numéro de comande est crée automatiquement ds la base.

Voila, j'espère que tu continura a m'aider , stp , une tite débutante comme moi, qui ne demande qu'à apprendre ...

Merci d'avance
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
7 juin 2006 à 23:23
Oui mais si tu ne dis pas quelle erreur je peux pas deviner ...

Quel msg affiche exactement PHP ?
0
fleur2 > PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009
8 juin 2006 à 20:33
Non, c'est bon j'ai réglé les 2 problémes précédents, la en fait j'ai casi fini mais c'est pas encore tout à fait ça..


je voudrais maintenant, afficher tous les produits commandés par la meme personne.

PB : c'est que je voulais afficher tous les articles commandés de la commande en ligne.

et cette requete :

$sql="SELECT article_com.num_com, article_com.ref_art, article_com.qtite_com, article_com.prix
FROM article_com,com_online
Where article_com.num_com=com_online.num_com";

Affiche tous les articles correspondant au meme numéro de commande soit n1 a la fois dans article_com et com_online et n2... mais moi je veux juste la commande avec les articles commandés par le client .. et donc je pense la solution c'est faire une session = un login et donc afficher tous les produits de ce login= utilisateur afin d'éviter les erreurs .. mais je sais pas comment faire ...

Voilà.

A moins que ma requete soit pas la bonne ..
Je sais faire une ouverture de session mais aprés pour les pages de commande d'article c'est un truc comme $session[login]...

Donc voila je sais pas trop comment mis prendre...
J'espère que j'ai réussi a etre claire..

Merci d'avance.
Bonne soirée
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606 > PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009
9 juin 2006 à 09:24
Bonjour,

Ha tu vois que tu finis par y revenir aux sessions ! LOL

Non ta requête n'est pas fausse ...

Bien que personnellement je préfère écrire

$sql="SELECT article_com.num_com, article_com.ref_art, article_com.qtite_com, article_com.prix 
FROM article_com inner join com_online 
on article_com.num_com=com_online.num_com";


On voit ainsi nettement mieux la jointure

Ce que tu veux faire c'est un truc du genre :

$sql="SELECT article_com.num_com, article_com.ref_art, article_com.qtite_com, article_com.prix 
FROM article_com inner join  com_online 
on article_com.num_com=com_online.num_com
where article_com.num_com='".$num_com+"'";


$num_cde étant un paramètre que tu envoies à PHP via un formulaire

Mais ce qui m'intringue c'est que j'ai cru comprendre que article_com.num_com est un auto-incrément ! Si c'est le cas ça pose un problème ...

Pourrais-tu poster les structures de tes tables article_com et com_online STP ?

Tu lances PhpMyAdmin tu sélectionnes ta base de données puis ta table.

Ensuite tu fais [Exporter] : tu choisis "SQL", tu coches "Structures" , tu décoches "Données" puis [Exécuter]
Ta structure doit apparaître : il ne te reste plus qu'à faire un copier-coller.




0
antic80 Messages postés 4751 Date d'inscription lundi 30 mai 2005 Statut Contributeur Dernière intervention 9 septembre 2009 1 159 > PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009
9 juin 2006 à 09:55
salut PHP

désolé de m'incruster dans la discussion mais comme tu maitrise php j'aimerai savoir si tu pouvais me venir en aide pour un message que j'ai mis dans la section programmation

javascript php aider moi a completer ce cod

ca concerne javascript et php donc je sais pas si tu pourra m'aider ?
0
Bonjour, PHP

et oui, mon numéro de commande est en auto incrémente


Structure de la table `article_com`
#

CREATE TABLE `article_com` (
`ref_art` int(5) NOT NULL default '0',
`num_com` int(6) NOT NULL auto_increment,
`qtite_com` int(7) NOT NULL default '0',
`prix` decimal(9,2) NOT NULL default '0.00',
PRIMARY KEY (`ref_art`,`num_com`)


Structure de la table `com_online`
#

CREATE TABLE `com_online` (
`num_com` int(6) NOT NULL auto_increment,
`date_com` date NOT NULL default '0000-00-00',
`Ct_liv` decimal(9,2) default NULL,
`Total_tva` decimal(9,2) default NULL,
`statut_com` enum('yes','no') default NULL,
`statut` varchar(5) NOT NULL default '',
`nom` varchar(50) NOT NULL default '',
`rue` varchar(50) NOT NULL default '',
`ville` varchar(50) NOT NULL default '',
`codepostal` varchar(10) NOT NULL default '',
`email` varchar(50) NOT NULL default '',
`telephone` varchar(20) NOT NULL default '',
PRIMARY KEY (`num_com`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;


Voila. merci...
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
9 juin 2006 à 15:21
Dans la table com_online, le champ num_com en auto incrément c'est OK

Par contre dans la table article_com NON ! Tu ne dois pas mettre d'auto-incrément ici (en tout cas pas sur le nr de commande)
Supprime moi cette notion d'auto-incrément !

A la place tu dois ajouter le nr de commande manuellement lors de chaque INSERT dans la table article_com : on est bien d'accord que tous les articles sélectionnés dans le panier du client tombent dans la même commande.

Donc lorsque l'utilisateur sauvegarde son panier :
1) Tu créés une nouvelle commande en faisant un INSERT dans la table com_online
2) Tu récupères le dernier nr de commande (dernier nr d'auto-incrément généré par MYSQL)
3) Tu fais les INSERT dans la table article_com insèrant EXPLICITEMENT le nr de commande.

De plus dans ta table com_online il manque un nr de client (où un identifiant unique d'utilisateur c'est la même chose appelle ca comme tu veux). Sinon tu ne peux pas savoir à qui appartient telle ou telle commande.


Donc la première chose à faire est d'enregistrer tout nouvel utilisateur (acheteur) en tant que client et lui attribuer un identifiant : je suppose que dans ta base tu as déjà une table des clients non ?

Si l'internaute est déjà client tu dois lui demander d'entrer son nr de client afin de pouvoir l'identifier.

Et c'est là que les sessions PHP vont servir.

0
Oui, j'ai une table utilisateur, et client mais donc c'est avec le login de l'utilisateur que je pense faire la session et la reconnaissance.

Merci, je vais faire les petits changements qu'il faut et je te tiens au courant.lol

Bonne soirée.
0
Bonsoir,

Je vois pas trop comment et ou faire ton 1) Tu créés une nouvelle commande en faisant un INSERT dans la table com_online
ou dois je la mettre : en 2eme requete avec l'autre insert de la table_com, donc dans l'ajout de ma base ?

et pour identifier les gens je vais faire sa par un login de client/utilisateur, mais aprés sur les autres pages pour cette session et la tester je fais comment ...

Merci, bon week end et soirée.
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
12 juin 2006 à 12:53
Bonjour,

D'abord tu créées une nouvelle commande en faisant un INSERT dans ta table com_online : cette requête est dans la page ajout_bd.php bien sûr !

Ensuite tu récupères le dernier auto-incrément grâce à la fct php
mysql_insert_id()


Voici un ex (Attention tu dois complèter la requête d'insertion dans com_online : je ne connais pas les noms de tes variables )

<?php

include("vars.inc");

// Création de la cde
// ATTENTION : à toi de complèter le code !
$req = "INSERT INTO com_online (date_com, ... , telephone) VALUES(";
$req .= date('Ymd',time()).",";
...
$req .= "'".$telephone."'";
$req .= ")";



mysql_query($req) or die('erreur');

// On récupère le dernier nr de commande = lastinsert id   LAST_INSERT_ID() syntaxe MySQL
$num_com = mysql_insert_id(); 
echo"<br>Cde ".$num_cde." créée";


$cde=$_POST["cde"]; 

foreach ($cde as $art=>$donnees) 
{ 
	$ref_art=$donnees["ref_art"];
	$prix = $donnees["prix"]; 
	$qtite_com = $donnees["qtite_com"]; 
	if ($qtite_com) // si qté différente de zéro
	{ 	
		// Exécute une requête pour chaque article
		$req="INSERT INTO article_com(ref_art,num_cde,qtite_com,prix) VALUES('".$ref_art."',".$num_com.",".$qtite_com.",".$prix.") ";
		mysql_query($req) or die('erreur');
	}
}		

echo"<br>Ajout effectué";
?>


Bien évidemment tu dois récupérer les champs, "nom","rue", "ville" depuis la table client ou à défaut demander à l'utilisateur de les resaisir dans un formulaire


Tu noteras le $num_cde lors de l'INSERT dans article_com

0
Bonsoir, PHP
Problème : avec ma session, j'arrive pas à faire reconnaitre ma session, lorsque un utilisateur l'ouvre en inscrivant login et mdp.

Dans ajout_bd.php :
<?php 

session_start();

if(@$_SESSION['autorise']!="oui")

{include("mdp_oublier.html");
exit();
}
else
{

include("vars.inc"); 

$cde=$_POST["cde"]; 

foreach ($cde as $art=>$donnees) 
{ 
$ref_art=$donnees["ref_art"]; 
$prix = $donnees["prix"]; 
$qtite_com = $donnees["qtite_com"]; 
 
if ($qtite_com) // si qté différente de zéro 
{ 

// Exécute une requête pour chaque article 

$req="INSERT INTO article_com(ref_art,qtite_com,prix) VALUES(".$ref_art.",".$qtite_com.",".$prix.") "; 

mysql_query($req) or die('erreur'); 
} 
} 
include("pageprincipale4.php");
//include("formulaire_commande.html");
echo"<br>ajout effectuer"; 

}

?> 


Autre soucis moi, mon n° de commande est d'abord créer dans article_com puis je le récupère pour la com_online (avec les coordonnées du destinateur et son login), donc l'auto_incremente, je pense qu'il fautle faire dans article_com.Car je veux récupére donc ce n° de commande de la table article_com et qu'il soit identique a celui de n°commande dans la com_online.

ET donc pour qu'il y est d'afficher qu'un seul n°de commande avec les articles correspondant, je voulais ouvrir une session mais, elle ne marche pas:
ou il me demande de m'identifier,
ou il m'affiche tout dans mon panier, soit tous les n°de commande avec leur articles...DOnc pas bon ..

Et je veux demander une vérification que lorsque les gens cliquent sur ajouter à la bd, afin qu'ils puissent qd meme voir les artciles et que sa leur donne envie de s'inscrire, s'identifier avec : login, mdp et email(s'il oublie leur mot de passe).

Donc mes 2pb :

1_reconnaitre une session ouverte :si oui, ajouter article dans panier d'achat(soit table article_com) et donc créer un n°com pr cette session d'ouverte appartenant a un login(que je n'ai pas rajouté dans la table article_com)
Si non afficher la page d'inscription.

2_Dans le panier d'achat (qui liste grace a une req ce qu'il y a dans article_com) pouvoir avoir qu'un n°commande avec les articles correspondant Vraiment à ce que l'utilisateur a choisis.


ET donc ce que tu m'as donné je vais le tester plutot a la fin, lorsque les gens vont visualiser le récapitulatif de la commande avec tous leurs articles sélectionnés .Pour obtenir article_com.num_com=com_online.num_com et donc tous les articles correspondant a un numéro de commande unique et identique entre les 2 tables.


Voila, Merci d'avance de bien vouloir m'aider, et j'espère avoir été clair.

Merci.
Bonne soirée
0