Définir une requête avec une valeur $_SESSION [Résolu]

Signaler
Messages postés
3
Date d'inscription
mardi 3 novembre 2015
Statut
Membre
Dernière intervention
3 novembre 2015
-
Messages postés
3
Date d'inscription
mardi 3 novembre 2015
Statut
Membre
Dernière intervention
3 novembre 2015
-
Bonjour!

J'aimerais qu'une page sur mon site web montre tous les résultats correspondant à un "id_slogan" qui a été généré aléatoirement sur une première page. Donc sur la première page, une information de la base de données "liste_slogans" apparaît, sélectionnée au hasard. Sur la deuxième, l'info que l'utilisateur a entrée dans le formulaire de la première est traitée, puis l'utilisateur est renvoyé à la page finale, où toutes les entrées liées à la première information apparaissent. Sur toutes les pages, j'ouvre la session ; je la ferme à la fin complètement. Voilà donc tout le code :

La page d'accueil et de formulaire :

    <?php
// Start the session
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8/>
<link rel="stylesheet" href="Pubweb1.css"/>
<title>(re)trouver le sens</title>
<!--[if It IE9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html15.js"></script>
<![endif]-->
</head>

<div class="tout">
<body>
<!--[if IE 6]><body class="ie6 old_ie"><!--[endif]-->
<!--[if IE 7]><body class="ie7 old_ie"><!--[endif]-->
<!--[if IE 8]><body class="ie8"><!--[endif]-->
<!--[if IE 9]><body class="ie9"><!--[endif]-->
<!--[if ! IE]><body><!--><!--[endif]-->

<div class="barredef">
<?php include("barredef.php");?>
</div>

<div class="blocpage">
<header>
<?php include("menu1.php");?>
</header>

<!-- Affichage aléatoire d'une donnée de la table et enregistrement des infos ID, slogan et compagnie -->
<section>
<?php
$bdd=new PDO('mysql:host=localhost;dbname=slogans', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$reponse = $bdd->query('SELECT ID, slogan, compagnie FROM liste_slogans ORDER BY rand() LIMIT 1,1');
header("Content-type: text/html;charset=UTF-8");

while ($donnees = $reponse->fetch())
{
echo '<p class="apparition1" element style="color:aqua">' . ($donnees['slogan']) . ' <element style="color:transparent">' . ($donnees['ID']) . '' . ($donnees['compagnie']) . '</element style></p>';
$_SESSION['id_slogan']=$donnees['ID'];
$_SESSION['compagnie']=$donnees['compagnie'];
$_SESSION['slogan']=$donnees['slogan'];
}
$nbid = $_SESSION['id_slogan'];
?>
<h2 class=apparition1>(À vous de jouer...)</h2>
<!-- Il faut que le slogan qui apparaît ait une entrée au moins -->
</section>

<section>
<br/><h6>Entrez votre question, votre idée, votre doute.<br/>
Remettez en question l'énoncé publicitaire présenté.<br/>
Gardez en tête ce que les mots signifient vraiment pour vous, et exprimez-le si vous le jugez pertinent.<br/>
Pas inspiré(e)? Cliquez sur "Sélection aléatoire" dans le menu ci-haut.</h6>
<form action='redirection.php' method='POST'>
<p><input type="text" name="entree" id="entree" size="75" maxlenght="300" autofocus />
<label for='pseudo'><h6>Votre signature : </h6></label><input type="text" name="pseudo" id="pseudo" size="75" maxlenght="30" /><br/>
<input type='hidden' name="id_slogan" id="id_slogan" size="40" maxlenght="4" value="<?php echo $_SESSION['id_slogan'];?>" />
<input type='hidden' name="compagnie" id="compagnie" size="40" maxlenght="4" value="<?php echo $_SESSION['compagnie'];?>" /><br/><br/>
<input class="envoiemail" name="submit" type="submit" value="Soumettre"></p>
</form>

<?php
// Connexion à la base de données
try
{
$bdd=new PDO('mysql:host=localhost;dbname=slogans;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

$reponse->closeCursor();
?>
</section>
</div>
</body>
</div>

</html


La page de traitement/redirection, que l'utilisateur ne voit pas :

<?php
// Start the session
session_start();
?>
<?php
//Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=slogans;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
die('Erreur : '. $e->getMessage());
}

// Insertion de l'entrée à l'aide d'une requête préparée
$req=$bdd->prepare('INSERT INTO entrees (pseudo, entree, date_entree, id_slogan) VALUES (?, ?, NOW(), ?)');
$req->execute(array($_POST['pseudo'], $_POST['entree'], $_POST['id_slogan']));

//Redirection du visiteur vers la page des résultats
header('Location: resultats.php');
?>


Et la page de résultats :

<?php
session_start();
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="Pubweb1.css"/>
<title>(re)trouver le sens</title>
<!--[if It IE9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html15.js"></script>
<![endif]-->
</head>

<div class="tout">
<div class="blocpage">
<body>
<!--[if IE 6]><body class="ie6 old_ie"><!--[endif]-->
<!--[if IE 7]><body class="ie7 old_ie"><!--[endif]-->
<!--[if IE 8]><body class="ie8"><!--[endif]-->
<!--[if IE 9]><body class="ie9"><!--[endif]-->
<!--[if ! IE]><body><!--><!--[endif]-->

<header>
<?php include("menu1.php");?>
</header>

<section>
<h1><?php echo $_SESSION['slogan'];
$nbid = $_SESSION['id_slogan']; ?></h1>
</section>

<section>
<p class=boutonsuivant><a href=aleatoire.php>Suivant</a></p>
<p class=compagnie><?php echo $_SESSION['compagnie']; ?></p>
<p class=boutonnav><a href=slogan1.php>Naviguer</a></p>
</section>

<p>Numéro : <?php echo $_SESSION['id_slogan']; ?>.</p>

<section>
<?php
// Connexion à la base de données
try
{
$bdd=new PDO('mysql:host=localhost;dbname=slogans;charset=utf8', 'root', 'root');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}

// Récupération des derniers messages
$reponse=$bdd->query('SELECT pseudo, entree, id_slogan FROM entrees WHERE id_slogan = $nbid ORDER BY ID DESC LIMIT 0, 50');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Affichage de chaque message (toutes les données sont protégées par htmlspecialchrs)
while ($donnees=$reponse->fetch())
{
echo '<h4 class=resultats><strong>' . htmlspecialchars($donnees['entree']) . ' </strong></h4> <p class=resultats> ' . htmlspecialchars($donnees['pseudo']) . '</p>';
}
$reponse->closeCursor();
?>

<?php
session_destroy();
?>
</section>

</body>
</div>
</div>
</html


Est-ce que quelqu'un peut m'aider avec la formulation de ma requête sur la dernière page? Je pense que le problème est vraiment là. Je veux que le "id_slogan" des infos sélectionnées dans ma requête, dans la base "entrees", correspondent au "id_slogan" récupéré dans la $_SESSION['id_slogan'] qui est en faite l'ID de ma requête sur la première page, dans la base "listes_slogans".

Je vous serais vraiment reconnaissante de m'aider, ça fait plusieurs mois que je planche là-dessus, et ça doit être prêt pour la remise de mon projet qui est dans moins d'un mois!

1 réponse

Messages postés
32982
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 juin 2021
351
Bonjour,


Dans ta page résultats .. tu fais appelle à une variable $nbid
... mais tu ne l'initialises nul part !

Il faut récupérer sa valeur dans la variable de session (comme dans ta première page)

// Récupération des derniers messages
$nbid = isset( $_SESSION['id_slogan'] ) ?  $_SESSION['id_slogan'] : NULL;
if($nbid){
$sql = "SELECT pseudo, entree, id_slogan 
           FROM entrees 
           WHERE id_slogan = $nbid 
           ORDER BY ID DESC 
           LIMIT 0, 50";

 $reponse=$bdd->query($sql);
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

Messages postés
3
Date d'inscription
mardi 3 novembre 2015
Statut
Membre
Dernière intervention
3 novembre 2015

Ça marche enfin! Merci! Ça faisait déjà quelques forums et personne n'avait réussi à me débloquer, merci mille fois!