Bonjour,

Je rencontre actuellement un probleme avec mon code, je ne sait pas comment envoyer l'information numProd de ma bdd d'une page x vers une page y.

Voici mon code:

        <?php
            $bdd = new PDO('mysql:host=localhost;dbname=######','root','');
            $requete = $bdd->query('SELECT * FROM produit');
            while($data = $requete -> fetch()){
                $numProd = $data['numProd'];
                echo '<div class="work">
                                <a href="PageProduit.php">
                                    <img src="###############" class="media" alt=""/>
                                    <div class="caption">
                                            <div class="work_title" value='.$data['nomProd'].'>
                                                    <h1>'.$data['nomProd'].'</h1>
                                            </div>
                                    </div>
                                </a>
                            </div>';
            }
            $requete->closeCursor();
        ?>

Est-ce-que quelqu'un a une solution?

27 réponses


Twentyfour
Réponse acceptée
<?php
    $bdd = new PDO('mysql:host=localhost;dbname=######','root','');
    // Récupère tous les produits de la base de données
    $requete = $bdd->query('SELECT * FROM produit');
    // Parcours le jeu d'enregistrements
    while($data = $requete -> fetch()){
        // Récupère (je ne sais pas quoi), sans doute le numéro du produit. On pourrait se passer de cette ligne.
        $numProd = $data['numProd'];
?>
<div class="work">
    <a href="PageProduit.php?produit=<?= $data['id']; ?>">
        <img src="###############" class="media" alt=""/>
        <div class="caption">
            <div class="work_title" value="<?= $data['nomProd']; ?>">
                <h1><?= $data['nomProd']; ?></h1>
            </div>
        </div>
    </a>
</div>
<?php
}
$requete->closeCursor();
?>

Tu peux utiliser les sessions ou passer le numéro du produit en paramètre dans l'url: PageProduit.php?produit=$numProd

Salut, j'utilise deja les sessions pour autre chose je peut les réutiliser pour ca aussi?

Ok je vais essayer dans l'url

Pour le passer dans l'url c bien comme ca ?

<a href="PageProduit.php?produit=$numProd">
<a href="PageProduit.php?produit=<?= $numProd ?>">

oui c'est bien ça. Et lorsque tu cliqueras sur le lien, tu obtiendras le numéro du produit que tu peux récupérer avec $_GET['produit']. Je te conseille la syntaxe $_GET['produit'] = $_GET['produit'] ?? 0 si t'es en PHP 7

Il ne me récupère pas le numéro mais : $numProd lorsque j'effectue un echo```

echo $_GET['produit'];

c'est parce que j'ai pensé que numProd était le numéro du produit. Remplace le par le numéro du produit, imaginons que c'est la colonne "id" remplace $numProd par $data['id']

Ca me met un message d'erreur : ( ! ) Parse error: syntax error, unexpected 'numProd' (T_STRING), expecting ',' or ';' in C:\wamp...line 25.

<a href="PageProduit.php?produit=$data['numProd']">
<a href="PageProduit.php?produit=<?= $data['id']; ?>">

tu n'auras plus de message d'erreur de syntaxe.

J'ai un nouveau message d'erreur qui apparait : ( ! ) Parse error: syntax error, unexpected 'numProd' (T_STRING), expecting ',' or ';' in C:\wamp... on line 25

<a href="PageProduit.php?produit=<?= $data['numProd']; ?>">

Fais-voir ton code en entier ?

?>

<html>
    <head>
        <title>#####</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width" />
        <link rel="stylesheet" type="text/css" href="CSSPerso/CssProduit.css">
    </head>
        <?php include("MenuDeroulant.php");?> <!-- Sert a inserer l'entete -->

        <body>
    <section class="main clearfix"> <!-- Cases Produits -->

        <?php
            $bdd = new PDO('mysql:host=localhost;dbname=######','root','');
            $requete = $bdd->query('SELECT * FROM produit');
            while($data = $requete -> fetch()){
                $numProd = $data['numProd'];
                echo '<div class="work">
                                <a href="PageProduit.php?produit=<?= $data['numProd']; ?>">
                                    <img src="###############" class="media" alt=""/>
                                    <div class="caption">
                                            <div class="work_title" value='.$data['nomProd'].'>
                                                    <h1>'.$data['nomProd'].'</h1>
                                            </div>
                                    </div>
                                </a>
                            </div>';
            }
            $requete->closeCursor();

        ?>

Y a ca a la fin

    </section><!-- Fin section (cases produits)-->
        </body>
    </head>
</html>

La deuxieme page:

<html>
    <head>
        <title>######</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width" />
        <link rel="stylesheet" type="text/css" href="CSSPerso/CssProduit.css">
    </head>
        <?php include("MenuDeroulant.php");?> <!-- Sert a inserer l'entete -->

        <body>
            <?php

             echo $_GET['produit'];

            ?>
        </body>
</html>

Dans la deuxième page tu voudrais afficher le produit, c'est bien ça ? Alors tu refais une connexion à ta base de données, puis une requête en lui disant cette fois que le numéro du produit doit être égale à $_GET['produit'] puis tu récupères le jeu d'enregistrement (en l'occurence ton produit) et tu affiches les données dans la page.

Impeccable ca marche merci a vous :)

Oui c ce que je vais faire mais je devais d'abord reussir a recuperer le numero du produit :) merci

T'as deuxième page devrait, je pense, ressembler à peux de chose près à ceci:

<html>
    <head>
        <title>######</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width" />
        <link rel="stylesheet" type="text/css" href="CSSPerso/CssProduit.css">
    </head>
        <?php include("MenuDeroulant.php");?> <!-- Sert a inserer l'entete -->
        <body>
            <?php
            $bdd = new PDO('mysql:host=localhost;dbname=######','root','');
            // On s'assure que l'ID du produit est dans l'URL, sinon on définit son ID à 0 
            $_GET['produit'] = $_GET['produit'] ?? 0; (PHP 7 uniquement)
            // Exécute la requête
            $requete = $bdd->query('SELECT * FROM produit WHERE id = ' . $_GET['produit']);
            // Récupère les données du produit
            $data = $requete -> fetch();
            // Ci-dessous affiche les données du produit
            ?>
            <h1><?= $data['nom_de_produit']; ?></h1>
            <p><?= $data['nom_de_produit']; ?></p>
        </body>
</html>

Je vien de copier ton code j'ai un code erreur : ( ! ) Parse error: syntax error, unexpected '?' in C:\wamp\www\Site stage\SiteStage\PageProduit.php on line 14

$_GET['produit'] = $_GET['produit'] ?? 0; (PHP 7 uniquement)

A quoi servent les dans la requete?

C'est que tu n'utilises pas la version 7 de PHP, tu peux remplacer cette ligne de code par:

// Condition ternaire:
// Si le numéro de produit existe et que sa valeur est définit alors tu renvois le numéro de produit, sinon tu renvois 0.
$_GET['produit'] = !empty($_GET['produit']) ? $_GET['produit'] : 0;

les "*" dans la requête ne servent à rien, c'était pour mettre en gras.

C'est bon ca marche j'ai trouvé l'erreur le code fonctionne:

<?php
            $num = $_GET['produit'];            
            $bdd = new PDO('mysql:host=localhost;dbname=#####','root','');
            // Exécute la requête
            $_GET['produit'] = !empty($_GET['produit']) ? $_GET['produit'] : 0;
            $requete = $bdd->query('SELECT * FROM produit WHERE numProd = ' . $_GET['produit']);
            // Récupère les données du produit
            $data = $requete -> fetch();
            // Ci-dessous affiche les données du produit
            ?>
            <h1><?= $data['nomProd']; ?></h1>
            <p><?= $data['descriProd']; ?></p>

OK je comprenais pas a quoi ca pouvais servir encore merci