variable non défini

Petit nouveau ! | 1 Messages

28 nov. 2018, 16:26

Bonjour je débute en php et je n' arrive pas à créer une session qui fonctionne.
j'ai comme erreur:
Notice: Undefined index: pseudo in C:\wamp64\wamp-instal\www\site-test\tp_minichat\index.php on line 44

si je met var_dump($donnee);
j'ai comme réponse:
C:\wamp64\wamp-instal\www\site-test\tp_minichat\index.php:41:
array (size=6)
'.$_SESSION[pseudo].' => string '.$_SESSION[pseudo].' (length=19)
0 => string '.$_SESSION[pseudo].' (length=19)
'message' => string 'Message... kkkkkkkkkkkkkkkk oooooooooooooo mmmmmmmmmmmmmmm oooooooooooooooooo' (length=77)
1 => string 'Message... kkkkkkkkkkkkkkkk oooooooooooooo mmmmmmmmmmmmmmm oooooooooooooooooo' (length=77)
'dath' => string '20/11/2018 12h37min55s' (length=22)
2 => string '20/11/2018 12h37min55s' (length=22)

mais si je met var_dump($_SESSION[pseudo]);
Warning: Use of undefined constant pseudo - assumed 'pseudo' (this will throw an Error in a future version of PHP) in C:\wamp64\wamp-instal\www\site-test\tp_minichat\index.php on line 41

Mon fichier index.php
<?php
session_start();
if (!empty($_POST['pseudo'])) // vérifie que pseudo existe ET n'est pas vide
{
$_SESSION['pseudo']=$_POST['pseudo'];
}
?>
<!Doctype html>
<html>
<head>
<meta charset='utf-8'/>
<title>TP mini chat</title>
<link rel="stylesheet" type="text/css" href="style_minichat.css">
</head>
<body>

<h1>Mini chat</h1>

<form method='post' action='traitement.php'>
<label for='pseudo'>Pseudo:</label><input type='text' name='pseudo' id='pseudo' value=''><br/>
<label for='msg'>Message:</label><textarea name='msg' id='msg' cols='27'>Message...</textarea>
<input type='submit' value="Envoyer">

</form>

<div class="message">
<div class="message1">
<?php
try{
$bdd=new PDO('mysql: host=localhost; dbname=test; charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e){
die('Erreur:' .$e->getMessage());
}

$req=$bdd->query('SELECT \'.$_SESSION[pseudo].\', message, DATE_FORMAT(date_post,"%d/%m/%Y %Hh%imin%ss") AS dath FROM TP_mini_chat ORDER BY id DESC LIMIT 0,20')
or die(print_r($bdd->errorInfo()));
while($donnee=$req->fetch())
{


echo ''.$donnee['dath'].' &nbsp;&nbsp;&nbsp;';
echo 'Pseudo:<strong> '.strip_tags($_SESSION['pseudo']).'</strong> <br/>';

echo 'Message: '.nl2br(strip_tags($donnee['message'])).' <br/><br/>';


}
$req->closeCursor();

?>
</div>
</div>
<?php
session_destroy();
?>
</body>
</html>




mon fichier traitement.php :
<?php
session_start();
if (!empty($_POST['pseudo'])) // vérifie que pseudo existe ET n'est pas vide
{
$_SESSION['pseudo']=$_POST['pseudo'];
}
try{
$bdd=new PDO('mysql: host=localhost; dbname=test; charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch(Exception $e){
die('Erreur:' .$e->getMessage());
}

$req=$bdd->prepare('INSERT INTO TP_mini_chat (pseudo, message,) VALUES (:pseudo,:msg)');
if ($_SESSION['pseudo']=NULL){
$req->execute(array('pseudo'=>$_POST['pseudo'],'msg'=>$_POST['msg']));
}
if (!empty($_SESSION['pseudo'])){
$req->execute(array('pseudo'=>$_SESSION['pseudo'],'msg'=>$_POST['msg']));
}








header('Location:index.php');
session_destroy();
?>

Comment faire pour que ma $_SESSION[pseudo] fonctionne?
Et es une bonne pratique d'appeler la session dans la requête? Es ce qu'il faut que je mette une autre requête sans session, donc dans une condition? Es ce que j'ai bien écrit ma requête avec session???
Merci de votre aide.

Avatar du membre
Mammouth du PHP | 1609 Messages

28 nov. 2018, 16:33

De base quand tu vas sur index.php $_SESSION['pseudo'] n'est pas défini puisqu'il ne sera défini que lors de la soumission du formulaire via le fichier traitement.php. Tu dois donc conditionner l'affichage lié à l'existence de $_SESSION['pseudo'] par un if.
Pour vérifier l'existence d'un index dans un tableau tu peux utiliser la fonction isset.
Tu peux donc vérifier l'existence dans $_SESSION de l'index pseudo en faisant un if (isset($_SESSION['pseudo'])).
Développeur web depuis + de 20 ans