IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Panier qui ne se remplit pas


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Panier qui ne se remplit pas
    Bonjour,

    Je cherche à créer un panier qui se remplit à chaque clic sur une référence. Mais il semblerait que je n'arrive pas à générer ma variable $_GET['id'] .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    	$mysqli = new mysqli('localhost','root','','achat');
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<meta name="TITLE" content="Mon wiki-villes :)"/>
    	<title>Mon Panier en ligne ...</title>
    	<link href="styles.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
    	<div id="wrapper">
    		<header>
    			<h1>Accueil</h1>
    			<p>Bienvenue sur mon mini-site de vente en ligne</p>
    			<nav>	
    				<a href="panier.php">Votre Panier ...</a>
    			</nav>
    		</header>
    		<main>
    			<p class="entete">Choisissez, vos produits parmis les références de notre catalogue :</p>
    		<div class="catalogue">
    			<?php
    			$produits = array();
    			$panier = array();
    			$result = $mysqli->query('SELECT id_produit, produit, prix FROM catalogue');
    			while ( $row=$result->fetch_array() )
    			{
    				$produits[] = $row;
    			}
    			foreach ($produits as $key => $produit) 
    			{
    			?>
    			<div class="carre">
    				<a href=#?id=<?php echo $produit['id_produit'] ?>"><?php echo $produit['produit']; ?></a><?php echo '<br> - ' .$produit['prix']. ' € -'; ?>
     
    			</div>
     
    			<?php
     
    			}
    			?>
    			<div class="clear"></div>
    			<?php
    			if ( isset($_GET['id']) AND !empty($_GET['id']) ) 
    				{
    					echo '<p>produit ajouté !</p>';
    					$panier[]= $_GET['id'];
    				}
    			?>
    		</div>
    		</main>
    	</div>
    </body>
    </html>
    Pourtant, dans la barre de navigation, j'ai bien un retour sur cette variable

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour

    Le # (ancre) comme lien veut dire aller à l'élément qui a l'id du valeur qui le suit.
    Ensuite, inutile de faire deux boucles si ce n'est pour générer l'affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    			$result = $mysqli->query('SELECT id_produit, produit, prix FROM catalogue');
    while ( $row=$result->fetch_array() )
    			{
    ?>
    			<div class="carre">
    				<a href=lapagePHP.php?id=<?php echo $row['id_produit'] ?>"><?php echo $row['produit']; ?></a><?php echo '<br> - ' .$row['prix']. ' € -'; ?>
     
    			</div>
     
    			<?php
     
    			}
    			?>
    A+.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il manque un " après <a href=

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="lapagePHP.php?id=.......">
    Cela dit, si on va sur la même page, on peut écrire :


  4. #4
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut evidement, toujours un caractère qui passe inaperçu
    Merci

    Cependant, la valeur du tableau ne s'incrémente pas et chaque id produit ajouté remplace le précédent

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    C'est normal, tu réinitialises le tableau à chaque chargement de la page à cette ligne: $panier = array();. Stocke le dans la session.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon.

    Tu ne peux pas partir à l'aventure sans un minimum de bagages, et de recherche préalable.

    Sinon, tu vas te retrouver à réinventer la roue à couper le beurre tiède....


  7. #7
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Oui, je m'en doutais un peu
    Du coup je commence mon code comme ca :

    session_start();
    $_SESSION['panier']=$panier; ? pour le faire coïncider avec ma variable $panier

  8. #8
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Ce cours a l'air bien complet
    Malheureusement ca dépasse encore de loin mon niveau atteint .... je dois faire sans javascript et avec des cookies ...

    Donc je reprends, il faut que j'initialise par une session $_SESSION['panier']=array();
    ensuite j'initialise $panier=$_SESSION['panier'];

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Au début du script, tu intialises le panier si il n'existe pas en session, ensuite tu l'utilises.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (!isset($_SESSION['panier'])) {
        $_SESSION['panier'] = array();
    }
    $panier = $_SESSION['panier'];
    A noter que si tu travailles avec une variable intermédiaire, il faut penser à la mémoriser à la fin du script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['panier'] = $panier;
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je t'ai mis un lien vers un tuto complet et fonctionnel.
    TOUT est clairement expliqué, pas à pas.

    Si ton niveau est insuffisant, il faut l'élever. Pas le contraire.
    Ça s'appelle l'apprentissage.
    Dernière modification par Invité ; 22/06/2018 à 18h40.

  11. #11
    Membre du Club
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Points : 63
    Points
    63
    Par défaut Tout à fait d'accord mais je ne pense pas que devancer autant le cours me soit permis
    Aussi simple que cela puisse paraître, on ne nous donne pas toutes les clés mais il faut composer avec ce que l'on sait. Il est évident que la formation en ligne à des limites, l'absence de professeur en direct nuit. Même si votre aide m'a souvent été précieuse et je vous en remercie. Cependant, étant obligé de continuer mon job original mais souhaitant me reconvertir, je suis une formation patiemment en m'appuyant sur votre communauté pour vos conseils et votre aide.

    En suivant tes conseils Celira, j'arrive à ce code mais qui ne me donne pas le résultat escompté je pense ne pas mémoriser la variable intermédiaire au bon endroit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <?php
    	session_start();
    	$mysqli = new mysqli('localhost','root','','achat');
    	if (!isset($_SESSION['panier'])) 
    	{
        	$_SESSION['panier'] = array();
    	}
    $panier = $_SESSION['panier'];
    ?>
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    	<meta name="TITLE" content="Mon wiki-villes :)"/>
    	<title>Mon Panier en ligne ...</title>
    	<link href="styles.css" rel="stylesheet" type="text/css"/>
    </head>
    <body>
    	<div id="wrapper">
    		<header>
    			<h1>Accueil</h1>
    			<p>Bienvenue sur mon mini-site de vente en ligne</p>
    			<nav>	
    				<a href="panier.php">Votre Panier ...</a>
    			</nav>
    		</header>
    		<main>
    			<p class="entete">Choisissez, vos produits parmis les références de notre catalogue :</p>
    		<div class="catalogue">
    			<?php
    			$produits = array();
    			$panier = array();
    			$result = $mysqli->query('SELECT id_produit, produit, prix FROM catalogue');
    			while ( $row=$result->fetch_array() )
    			{
    				$produits[] = $row;
    			}
    			foreach ($produits as $key => $produit) 
    			{
    			?>
    			<div class="carre">
    				<a href="?id=<?php echo $produit['id_produit'] ?>"><?php echo $produit['produit']; ?></a><?php echo '<br> - ' .$produit['prix']. ' € -'; ?>
    			</div>
    			<?php
    			}
    			?>
    			<div class="clear"></div>
    			<?php
    			if ( isset($_GET['id']) AND !empty($_GET['id']) ) 
    				{
    					echo '<p>produit ajouté !</p>';
    					$panier[]= $_GET['id'];
    				}
    				$_SESSION['panier'] = $panier;
    			?>
    		</div>
    		</main>
    	</div>
    </body>
    </html>
    La valeur du panier reste le dernier produit sélectionné.
    Mais la journée a été dure, je regarderai le tuto demain ou la semaine prochaine ...

    Merci à tous

  12. #12
    Invité
    Invité(e)
    Par défaut
    Non.
    On n'est pas ce qu'on sait, mais ce qu'on apprend.

  13. #13
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu as laissé la réinitialisation de $panier à la ligne 32 Donc là ce que tu fais, c'est prendre le contenu de la session pour le mettre dans $panier, puis vider $panier, puis ensuite mettre ton dernier produit dedans

    Quelques remarques sur le code proprement dit
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while ( $row=$result->fetch_array() )
    {
    	$produits[] = $row;
    }
    foreach ($produits as $key => $produit) 
    {
    Si tu n'utilises $produits comme pour faire la boucle, autant faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ( $produit=$result->fetch_array() )
    {
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( isset($_GET['id']) AND !empty($_GET['id']) )
    empty inclut le test d'existence de la variable. Donc on peut simplifier en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!empty($_GET['id']) )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. combox en cascade qui ne se remplit pas
    Par arthur83fr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/12/2011, 16h43
  2. Bouton et background-image qui ne le remplit pas
    Par cyrano_de_bergerac dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 08/04/2011, 10h32
  3. [AC-2007] champ dans formulaire qui ne se remplit pas
    Par pepsister dans le forum IHM
    Réponses: 4
    Dernier message: 05/09/2010, 12h51
  4. Panier qui ne se met pas à jour avec IE 8
    Par annwone dans le forum Langage
    Réponses: 9
    Dernier message: 26/03/2009, 14h01
  5. Réponses: 23
    Dernier message: 20/02/2007, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo