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

PatriciaBL 3 Messages postés mardi 3 novembre 2015Date d'inscription 3 novembre 2015 Dernière intervention - 3 nov. 2015 à 18:54 - Dernière réponse : PatriciaBL 3 Messages postés mardi 3 novembre 2015Date d'inscription 3 novembre 2015 Dernière intervention
- 3 nov. 2015 à 19:41
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!
Afficher la suite 

Votre réponse

2 réponses

jordane45 21041 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 20 mai 2018 Dernière intervention - 3 nov. 2015 à 19:08
+1
Utile
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);
}

Cette réponse vous a-t-elle aidé ?  
PatriciaBL 3 Messages postés mardi 3 novembre 2015Date d'inscription 3 novembre 2015 Dernière intervention - 3 nov. 2015 à 19:41
Ça marche enfin! Merci! Ça faisait déjà quelques forums et personne n'avait réussi à me débloquer, merci mille fois!
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.