8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,

J'ai un panier, sous forme de formulaire.

Sur mon panier on peut modifier la quantité, supprimer, bref fonction classique de panier.

Le client achète 4 bananes, il se trompe en veux 8, ça calcul et hop j'ai le bon total. Là, ou je bloque, c'est qu'il veut acheter des citrons. Là, j'ai une bouton Ajouter des articles à mon panier. Le code est :

<a href="<?php echo $_SERVER['HTTP_REFERER']; ?>"><input type="button"  value="Ajouter d'autres articles à mon panier"></a>


Si le client ne modifie pas les quantités ça fonctionne très bien, mais si il modifie un article du panier, bah ça fonctionne plus. Avez-vous la solution à mon problème ?

On peut renvoyer direct à l'accueil, mais ça oblige à retourner sur la page des fruits et légumes.

Les valeurs de panier sont stocké en SESSION.

Je veux juste que le client appui sur le bouton ajouter, et hop il revienne sur la page 18 ou 24.

Merci de vos retours.
Modifié par Tintin75 (30 Oct 2017 - 19:46)
J'ai beau chercher, je trouve pas la solution.

Au pire, j'arrive à ma page d'accueil. Et il faut retourner sur la page produit pour continuer ses achats, la grosse galère !!!
Modifié par Tintin75 (30 Oct 2017 - 19:47)
Modérateur
Je ne comprends pas tout, mais tu devrais y parvenir en stockant l'information nécessaire au bon moment dans une variable de session.

Exemple 1:
Tu es sur une page /produits/fruits_et_legumes
Le bouton de ton panier est = /basket?redirect=produits/fruits_et_legumes
Sur la page du panier tu stocke l'information dans une variable de session que tu utilise pour le «back»

Exemple 2:
Sur chaque page de produits, tu stocke l'url actuelle dans une variable de session

Exemple 3:
Sur la page du panier tu vérifie le referer, si il correspond à une page de produits tu le stocke dans une variable de session.

Toutes ces solutions posent évidement problème lorsque l'utilisateur navigue avec plusieurs fenêtres ou onglets. Pour contourner cela il faudrait utiliser la solution 1 ou 3, et créer une nouvelle session de panier d'achat à chaque click sur le bouton du panier, mais je ne suis pas sûr que ce soit nécessaire d'aller si loin.
Merci pour la réponse kustolovic.

J'explique : j'ai un menu avec des pages :
-fruits
-légumes

Le client sélectionne fruits, il arrive donc sur la page : fruits.php
Dans la page fruits, il sélectionne 4 bananes. Les bananes vont dans la page panier. Une fois que le client est dans le panier et voit ses bananes, il faut qu'il puisse revenir à la page fruits.php pour acheter des fraises par exemple. Le hic, pour moi est de revenir à la page précédente dans ce cas là, c'est la page fruits.php

Si j'ai bien pigé, il faut que je créer une session par page qui mémorise l'url. Ce qui dans mon cas sera fruits.php Dans la page panier, il faut rappeler la dernière page mémoriser en session c'est à dire fruits.php ?
Deux étapes dans la création du code :
-mémoriser la session de l'url de la page (fruits.php)
- rappeler la dernière page avec l'aide de la dernière session qui sera (fruits.php)

Si me trompe pas on est dans ton exemple 3 ?

C'est bien ça ? As tu un exemple de code s'il te plait ? Pour moi, il faut faire simple car je suis pas pro Smiley decu

Merci d'avance.
La session il faut qu'elle soit globale à ton site.
$_SESSION['panier'] = array(); 

c'est un tableau. Un panier. tu peux faire tout ce que tu veux dedans, quand tu veux.

Donc dans ta session tu as les quantités, tu as le type de produit, tu as le produit, tu as l'user.

$_SESSION['panier']['qte'] = array(); 
$_SESSION['panier']['taille'] = array(); 
$_SESSION['panier']['prix'] = array(); 

Changer d'url ne devrait pas "modifier" la session. Donc si c'est le cas, il faut revoir la conception.


pour l'ajout

<?php 
/* Démarrage ou prolongation de la session */ 
session_start(); 
/* Article exemple */ 
$select = array(); 
$select['id'] = "test"; 
$select['qte'] = 2; 
$select['taille'] = "56"; 
$select['prix'] = 84.95; 

/* On vérifie l'existence du panier, sinon, on le crée */ 
if(!isset($_SESSION['panier'])) 
{ 
    /* Initialisation du panier */ 
    $_SESSION['panier'] = array(); 
    /* Subdivision du panier */ 
    $_SESSION['panier']['qte'] = array(); 
    $_SESSION['panier']['taille'] = array(); 
    $_SESSION['panier']['prix'] = array(); 
} 

/* Ici, on sait que le panier existe, donc on ajoute l'article dedans. */ 
array_push($_SESSION['panier']['id_article'],$select['id']); 
array_push($_SESSION['panier']['qte'],$select['qte']); 
array_push($_SESSION['panier']['taille'],$select['taille']); 
array_push($_SESSION['panier']['prix'],$select['prix']); 

/* Affichons maintenant le contenu du panier : */ 
?> 



et avant, tu vérifie si il existe :
/** 
 * Vérifie la présence d'un article dans le panier 
 * 
 * @param String $ref_article référence de l'article à vérifier 
 * @return Boolean Renvoie Vrai si l'article est trouvé dans le panier, Faux sinon 
 */ 
function verif_panier($ref_article) 
{ 
    /* On initialise la variable de retour */ 
    $present = false; 
    /* On vérifie les numéros de références des articles et on compare avec l'article à vérifier */ 
    if( count($_SESSION['panier']['id_article']) > 0 && array_search($ref_article,$_SESSION['panier']['id_article']) !== false) 
    { 
        $present = true; 
    } 
    return $present; 
}  

et si il est présent, tu incrémente la quantité, le prix, etc..
Modifié par JENCAL (31 Oct 2017 - 09:52)
Merci Jencal, je regarde. Smiley smile

Chef, je me gratte la tête pour voir le rapport avec le retour à ma page précédente de ma page panier Smiley confus

Et avec un $_SERVER["REQUEST_URI"] , un truc dans ce genre ...
Modifié par Tintin75 (31 Oct 2017 - 11:59)
<?php
if(!array_key_exists('hist', $_SESSION)) { // si la clef 'hist' n'existe pas dans la superglobale $_SESSION
$_SESSION['hist'] = array(); // on la crée (histoire d'être propre)
}
$_SESSION['hist'][] = $_SERVER['HTTP_REFERER']; // on stocke l'adresse de la page précédente, et on avance le pointeur du tableau
?>
Pour gérer les url, et les savoir d'où tu viens

$sur ta page accueil par exemple
<?php
    session_start(); 
    $_SESSION['previous_location'] = $_SESSION['referrer'];
?>


et sur ta page produit :
<?php
    $previous_location = $_SESSION['previous_location'];
?>

et du coup tu sais d'où tu viens.
Modifié par JENCAL (31 Oct 2017 - 13:28)
Page fruits :

<?php
session_start();
$_SESSION['previous_location'] = $_SESSION['referrer'];
?>
<!DOCTYPE html>


Page panier :
<a href="<?php echo $previous_location = $_SESSION['previous_location']; ?>"><input type="button" title="Ajouter d'autres articles &agrave; mon panier" value="Ajouter d'autres articles à mon panier"></a>


Ca fonctionne pas, c'est un truc dans ce genre que je pensai ... Smiley murf
Modifié par Tintin75 (31 Oct 2017 - 13:41)
mais je comprends pas pourquoi tu veux stocker l'url historique.. un simple lien vers la page fruit.php ne fonctionne pas ?
concernant session referer j'ai oublier ça :

if (!isset($_SESSION['referrer'])) {
    $_SESSION['referrer'] = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : 'n/a';
}
Oh j'ai mal à la tête.

Je veux que lorsque le client est sur panier.php, il puisse retourner vers fruits.php. Entre temps, si il modifie la quantité dans le panier, ça renvoi bien sur fruits.php.

En gros, je claque du code que sur ma page panier.php, pour récupérer la page précédente ?

On va y arriver, tu me connais j'ai la tête dure Smiley confused
Modifié par Tintin75 (31 Oct 2017 - 13:56)
j'ai vraiment du mal à comprendre ta problématique.

Tintin75 a écrit :

Je veux que lorsque le client est sur panier.php, il puisse retourner vers fruits.php.

pas compris pourquoi <a href="fruit.php">fruit</a> ne marcher pas.
Tintin75 a écrit :

Entre temps, si il modifie la quantité dans le panier, ça renvoi bien sur fruits.php.

toujours pas compris.
en temps normal, quand on modifie une quantité dans un panier, y'a pas de redirection.
J'explique. Le client met dans le panier 1 banane.

Il arrive dans son panier et se dit j'ai besoin de 5 bananes. Là dans le panier, il modifie la quantité.

Le panier calcul le prix pour 5 bananes. Après, il veut acheter des fraises. C'est là, ou je bloque avec mon bouton rajouter des articles au panier.

Il faut que le bouton, renvoi sur la page fruit !!!! pour qu'il puisse continuer ses achats dans la rubrique fruits. Smiley murf

J'explique, j'ai la page fruits.php, mais aussi la page légumes.php, cassettes.php .... Il faut qu'il retourne sur la page ou il a mis son article dans le panier.

Ca peut être la page fruits.php ou légumes.php Smiley rolleyes
Modifié par Tintin75 (31 Oct 2017 - 14:07)
D'où ma question
pourquoi <a href="fruit.php">fruit</a> ne marche pas
Modifié par JENCAL (31 Oct 2017 - 14:18)
où sinon dans ton panier, tu sock un type de produit, suivant tel ou tel type pour chaque ligne de produit tu conditionne un lien .
Pages :