Bonjour,

Je reviens ici car je n'ai pas trouvé de solution à mon problème.
Je récapitule :
J'ai une page details.php ou je trouve les détails de mon article.
Cet article je le récupère via une base de données.

<?php require 'inc/header.php';?>

    <div class="container wrapper">

        <div class="row details">
        <?php
            require'login/admin/bdd.php';
            $upload_Dir = 'login/admin/img/produits/';
            if (isset($_GET['id'])) {
                $id = $_GET['id'];
                $reponse = $bdd->prepare("SELECT * FROM products WHERE id = ? ");
                $reponse->execute(array($id));
                if ($reponse->rowcount()) {
                    $donnees = $reponse->fetch(PDO::FETCH_ASSOC);
                }else{
                    $error = "Impossible de récupérer les données !";
                }

            }
            $pointures = $bdd->prepare('SELECT * FROM pointure');
            $pointures->execute();
            $pointure = $pointures->fetch(PDO::FETCH_ASSOC);

            $tailles = $bdd->prepare('SELECT * FROM taille');
            $tailles->execute();
            $taille = $tailles->fetch(PDO::FETCH_ASSOC);
          ?>
            <div class="col-lg-6">
                <div class="pics">
                    <img src="<?php echo $upload_Dir.$donnees['image'];  ?>" alt="" width="450">
                </div>
            </div>
            <div class="col-lg-6 descriptif">
                <div class="descriptif">
                    <h1><?= $donnees['name']; ?></h1>
                    <p><?= $donnees['description']; ?></p>
                </div>
                <div class="famille">
                    <h3><?= $donnees['category']; ?></span></h3>
                </div>
                <div class="pointure">
                <h3>Pointure</h3>
                 <select name="pointure" id="pointure" >
                      <optgroup label="Pointure">
                      <?php foreach ($pointures as $pointure) : ?>
                          <option value="<?= $pointure['pointure']; ?>"><?= $pointure['pointure']; ?></option>
                        <?php endforeach;?>
                      </optgroup>
                      </select>
                </div>
                <div class="taille">
                    <h3>Taille</h3>
                      <select name="taille" id="taille" >
                      <optgroup label="Taille">
                        <?php foreach ($tailles as $taille) : ?>
                          <option value="<?= $taille['taille']; ?>"><?= $taille['taille']; ?></option>
                        <?php endforeach;?>
                      </optgroup>
                    </select>
                </div>
                <div class="prix">
                <h3>Prix :<span> <?= $donnees['prix']; ?> €</span></h3>
                </div>
        <div class="ajout">
                    <a class="addPanier add btn btn-lg btn-primary" href="addpanier.php?id=<?php echo $donnees['id']; ?>&taille=<?= $taille['taille']; ?>">Ajouter au panier</a>
                    <input type="hidden" name="taille[]" value="">
                </div>
            <?php
            $reponse->closeCursor(); // Termine le traitement de la requête
            ?>
            </div>

        </div>

<?php require 'inc/footer.php';?>

en bas de cette page j'ai un lien qui appel une page addpanier.php qui envoie le produit dans mon panier.

<?php
require '_header.php';
$json = array('error' => true);
if (isset($_GET['id'])) {
    $product = $DB->query('SELECT id FROM products WHERE id =:id', array('id' => $_GET['id']));
    if(empty($product)){
        $json['message'] = "Ce produit n'existe pas";
    }
    $panier->add($product[0]->id);
    $json['error'] = false;
    $json['total'] = number_format($panier->total(),2,',',' ');
    $json['count'] = $panier->count();
    $json['message'] = 'Le produit a bien été ajouté à votre panier';
    header('Location: panier.php');
}else{
    $json['message'] = "Vous n'avez pas séléctionné de produit à ajouter au panier !";
}
echo json_encode($json);

Ensuite j'ai mon panier.php :

<?php require 'inc/header.php';?>
<div class="container wrapper">
    <div class="row">
        <div class="col-sm-12 col-md-12 col-md-offset-1">
        <h2>Votre panier</h2>
        <form method="post" action="panier.php">
            <table class="table table-hover">
                <thead>
                    <tr>
                        <th>Article(s)</th>
                        <th>Description(s)</th>
                        <th>Quantité</th>
                        <th class="text-center">Taille/Pointure</th>
                        <th class="text-center">Prix U</th>
                        <th class="text-center">Total U+TVA</th>
                        <th><input type="submit" name="recalculer" value="Recalculer" class="btn btn-primary"></th>
                    </tr>
                </thead>
                <tbody>
                <?php
                $upload_Min = 'login/admin/img/produits/' ;
                $ids = array_keys($_SESSION['panier']);
                if (empty($ids)) {
                    $products = array();
                }else{
                    $products = $DB->query('SELECT * FROM products WHERE id IN ('.implode(',',$ids).')');
                }
                foreach ($products as $product):
                ?>
                    <tr>
                        <td class="col-sm-4 col-md-2">
                            <div class="media">
                                <a class="thumbnail pull-left" href="#"><img class="media-object" src="<?php echo $upload_Min.$product->image; ?>" style="width: 72px; height: 72px;"> </a>
                            </div>
                        </td>
                        <td>
                            <div class="media-body">
                                <h4 class="media-heading"><a href="#"><?php echo $product->name; ?></a></h4>
                                <h5 class="media-heading"><?php  echo $product->description; ?></h5>
                            </div>
                        </td>
                        <td style="text-align: center">
                        <input type="text" class="form-control" name="panier[quantity][<?php echo $product->id; ?>]" value="<?php echo $_SESSION['panier'][$product->id]; ?>">
                        </td>
                        <td class="text-center" style="font-size: 25px">

                        ICI j'aimerais récupérer la valeur du select de la page détails.

                        </td>
                        <td class="text-center"><strong><?php echo number_format($product->prix,2,',',' '); ?> €</strong></td>
                        <td class="text-center"><strong><?php echo number_format($product->prix * 1.196,2,',',' '); ?> €</strong></td>
                        <td>
                        <a type="button" class="btn btn-danger" href="panier.php?delpanier=<?php echo $product->id; ?>">
                            <span class="glyphicon glyphicon-remove"></span> Supprimer
                        </a></td>
                    </tr>
                <?php  endforeach; ?>
                    <tr>
                        <td>   </td>
                        <td>   </td>
                        <td>   </td>
                        <td><h5>Total HT</h5></td>
                        <td class="text-right"><h5><strong><?php echo number_format($panier->total(),2,',',' ');  ?> €</strong></h5></td>
                    </tr>

                    <tr>
                        <td>   </td>
                        <td>   </td>
                        <td>   </td>
                        <td><h3>Total TTC</h3></td>
                        <td class="text-right"><h3><strong><?php echo number_format($panier->total() * 1.196,2,',',' ');  ?> €</strong></h3></td>
                    </tr>
                    <tr>
                        <td>   </td>
                        <td>   </td>
                        <td>   </td>
                        <td>
                        <a type="button" class="btn btn-default" href="index.php">
                            <span class="glyphicon glyphicon-shopping-cart"></span> Continuer vos achats
                        </a></td>
                        <td>
                        <a type="button" class="btn btn-success" href="commander.php">
                            Commander <span class="glyphicon glyphicon-play"></span>
                        </a></td>
                    </tr>
                </tbody>
            </table>
            </form>
        </div>
    </div>

<?php require 'inc/footer.php';?>

Et pour finir j'ai un fichier panier.class.php qui contient les fonctions liées à mon panier.

<?php
class panier{

    private $DB;

    public function __construct($DB){
        if (!isset($_SESSION)){
            session_start();
        }
        if (!isset($_SESSION['panier'])){
            $_SESSION['panier'] = array();
        }
        $this->DB = $DB;

        if (isset($_GET['delpanier'])) {
            $this->del($_GET['delpanier']);
        }
        if (isset($_POST['panier']['quantity'])) {
            $this->recalc();
        }
    }

    public function recalc(){
        foreach($_SESSION['panier'] as $product_id => $quantity){
            if (isset($_POST['panier']['quantity'][$product_id])) {
                $_SESSION['panier'][$product_id] = $_POST['panier']['quantity'][$product_id];
            }

        }
    }

    public function count(){
        return array_sum($_SESSION['panier']);
    }

    public function total(){
                $total = 0;
                $ids = array_keys($_SESSION['panier']);
                if (empty($ids)) {
                    $products = array();
                }else{
                    $products = $this->DB->query('SELECT id, prix FROM products WHERE id IN ('.implode(',',$ids).')');
                }
                foreach($products as $product){
                    $total += $product->prix * $_SESSION['panier'][$product->id];
                }
                return $total;
    }

    public function add($product_id){
        if(isset($_SESSION['panier'][$product_id])){
            $_SESSION['panier'][$product_id]++;
    }else{
            $_SESSION['panier'][$product_id] = 1;
    }
}
    public function del($product_id){
        unset($_SESSION['panier'][$product_id]);
    }
}

?>

Je souhaiterais quand je poste l'article dans mon panier avec mon lien <a></a> se trouvant dans la page details.php pouvoir envoyer par la même occasion la taille selectionnée.
J'ai testé en php, en javascript je ne trouve pas la solution.
Si une personne pouvait m'aider !!!

merci

29 réponses


Bonsoir, normalement si tu envoie un formulaire comlet, il suffit de récupérer la valeur de ton select avec $_POST

oui je comprend bien mais si tu regardes bien je n'ai pas de formulaire sur la page détails.php.

Soit tu passe par les sessions, soit tu stock la taille dans l'url. Je vois pas d'autre solution.

oui j'avais pensé au session mais je ne vois pas comment faire !!

$_SESSION['taille'] = $_POST['taille']

Après je conseil plutot l'url, car les sessions pour le partage d'url c'est pas le top.

pour avoir un $_POST[''taille] il faut que je soumette vie un submit et la j'ai un <a>

<a class="addPanier add btn btn-lg btn-primary" href="addpanier.php?id=<?php echo $donnees['id']; ?>">Ajouter au panier</a>

et j'ai fais ça pour l'URL mais il me prend la valeur la plus haute de mon select

<a class="addPanier add btn btn-lg btn-primary" href="addpanier.php?id=<?php echo $donnees['id']; ?>&taille=<?= $taille['taille']; ?>">Ajouter au panier</a>

Ah oui pardon.
Dans ce cas, tu gère dynamiquement ton select pointure en JS, avec l'event "change" (pour détecter les changement dans le select", tu récupère la value de l'option du select en JS et tu peux par exemple détecter le click sur le lien.
Sur ce lien tu mets un prenventDefault(), et tu redirige en JS avec le lien du href du lien clické en concaténant la value du select.

Je sais pas si j'ai été clair ^^

Petit exemple bref :

var lien;
var taille;
$('leselect').on('change', function(){ // Au chagement de la valeur du select
    taille = '&taille=' + $(this).val(); //On récupère la valeur de l'option que l'on stock dans "taille"
});
$('lelien').on('click', function(e){ // Lorsque l'on click sur le lien
    e.preventDefault();
    lien = $(this).href; // on récupère le lien du panier avec l'id de l'article qu'on stock dans "lien"
    document.location.href = lien + taille; // ensuite on redirectionne sur le lien + l'option du select le lien ressemblerai à :
// www.mon-site.com?id=36&taille="42"
});

Fais à l'arache, c'est pas optimisé du tout j'te laisse te démerder, j'suis fatigué xD

idem je verrais ça demain !! merci

salut, si tu pouvais m'expliquer ce que tu a fais se serait cool, avec des lignes de commentaires.

J'ai édité le message précédent, mais si tu n'arrive pas à comprendre ce que j'ai fais sans les commentaires, je te conseil d'aller apprendre le javascript.

désolé j'avais pas vu les commentaires, il était tant que j'aille au lit.
encore merci

Je ne les avais pas mis, j'ai édité pour te les mettre.
Tu as réussis sinon ?

salut ben en fait j'ai trouvé une autre méthode qui fonctionne mais qui je pense n'est pas académique.
voilà ce que j'ai fais dans la page panier.php :

<td class="text-center" style="font-size: 25px">
                        <?php $type = $product->type; ?>
                        <script>
                        var typeTaille = '<?= $type; ?>';
                        if (typeTaille == "vêtement") {
                            document.write("<p>" + localStorage.taille + "</p>");
                        }else{
                            document.write("<p>" + localStorage.pointure + "</p>");
                        }
                        </script>
 </td>

et mon script dans app.js :

$(document).ready(function(){

$('.addPanier').click(function(){

        var taille =  document.getElementById('taille').options[document.getElementById('taille').selectedIndex].value
        localStorage.setItem("taille",taille);

        var pointure =  document.getElementById('pointure').options[document.getElementById('pointure').selectedIndex].value
        localStorage.setItem("pointure",pointure);

  });

});

ça fonctionne avec ma condition.
Je récupère ma variable $type qui correspond à soit chaussure soit vêtement et je l'injecte dans mon code javascript dans la condition.
Par contre j'ai un petit soucis dans cette pu... page details.php, j'aimerais que lorsque l'article est une chaussure il ne m'affiche le select pointure, et quand c'est un vêtement il ne m'affiche le select des vêtements.
j'ai fais ça masi ça fonctionne pas :

<?php $type = $donnees['type']; ?>
                <script type="text/javascript">

           var typeArticle = '<?= $type; ?>';
            if (typeArticle == "chaussure") {
              document.getElementById('vetement').style.display = none;
            }else{
              document.getElementById('chaussure').style.display = none;
           }

        </script>

Toujours en récupérant ma variable $type. mais j'ai une erreur dans la console :
TypeError: document.getElementById(...) is null[En savoir plus] details.php:169:15

une idée ?

merci

j'ai oublié les selects :

<div id="chaussure" >
                <h3>Pointure</h3>
                 <select name="pointure" id="pointure" >
                      <optgroup label="Pointure">
                      <?php foreach ($pointures as $pointure) : ?>
                          <option value="<?= $pointure['pointure']; ?>"><?= $pointure['pointure']; ?></option>
                        <?php endforeach;?>
                      </optgroup>
                      </select>
                </div>
                <div id="vetement">
                    <h3>Taille</h3>
                      <select name="taille" id="taille" >
                      <optgroup label="Taille">
                        <?php foreach ($tailles as $taille) : ?>
                          <option value="<?= $taille['taille']; ?>"><?= $taille['taille']; ?></option>
                        <?php endforeach;?>
                      </optgroup>
                    </select>
                </div>

La solution que je t'ai filé est beaucoup mieux et plus maniable je trouve.
J'suis pas fan de l'association de ces 2 langages de cette manière.

je sais mais ça me prend tellement la tête !!!

C'est comme ca qu'on apprendre :p
Mais théoriquement, je t'ai déjà fais tout le travail. Si vraiment tu comprends pas, on peut se contacter via discord / ts / teamviewer ou autre pour t'aider.

et pour l'autre problème j'ai à peu près réussi avec dans la page details.php :

<?php $type = $donnees['type']; ?>
                <script type="text/javascript">
                        window.onload = function(){
           var typeArticle = '<?= $type; ?>';
            if (typeArticle == "chaussure") {
              document.getElementById('vetements').style.display = "none";
            }else{
              document.getElementById('chaussures').style.display = "none";
           }
                }
        </script>
                <div id="chaussures" >
                <h3>Pointure</h3>
                 <select name="pointure" id="pointure" >
                      <optgroup label="Pointure">
                      <?php foreach ($pointures as $pointure) : ?>
                          <option value="<?= $pointure['pointure']; ?>"><?= $pointure['pointure']; ?></option>
                        <?php endforeach;?>
                      </optgroup>
                      </select>
                </div>
                <div id="vetements">
                    <h3>Taille</h3>
                      <select name="taille" id="taille" >
                      <optgroup label="Taille">
                        <?php foreach ($tailles as $taille) : ?>
                          <option value="<?= $taille['taille']; ?>"><?= $taille['taille']; ?></option>
                        <?php endforeach;?>
                      </optgroup>

                    </select>
                </div>

pour tout t'avouer je n'ai pas trop compris ton code.
Mais mon soucis c'est que le localStorage me stocke qu'en même la pointure.
Donc quand je choisi un vêtement en XL que j'ajoute au panier pas de soucis.
Mais je choisis une chaussure en 42 que j'ajoute en plus deans le panier il me change la taille du vêtement en S qui est la plus petite valeur du select vêtement.

pourquoi pas et c'est quoi discord/ts/teamviewer ?

C'est ce que j'appel "mes réseau social" xD
Ce sont des plateforme de communication vocal / écrit, exepté teamviewer qui lui est un logiciel de control à distance ( si jamais je dois te montré des choses )

oui je suis entrain de télécharder discord et j'ai déjà teamviewer

Eh bien cherche Jinou sur discord, j'ai le même avatar qu'ici :)

comment je te trouve ? et si je peux quel est ton age ?

moi c'est : Macinsteph

8031

Je suis vieux :3

vieux comment ?