PHP - Semaine 3 (TP) Openclassrooms
Résolu
ReadyPlayerOne
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
ReadyPlayerOne Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
ReadyPlayerOne Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
je suis actuellement le cours de Mathieu Nebra sur Php et Mysql sur Openclassrooms.
Je suis arrivé à la partie " activité 3 " , qui porte sur un " minichat".
Mes problèmes sont :
Voici mon code pour "minichat.php"
Et pour "minichat_post.php":
Je vous remercie par avance pour votre aide ! Hâte de comprendre mes erreurs !
je suis actuellement le cours de Mathieu Nebra sur Php et Mysql sur Openclassrooms.
Je suis arrivé à la partie " activité 3 " , qui porte sur un " minichat".
Mes problèmes sont :
- Je n'arrive pas a faire retenir le pseudo du visiteur
- Je voudrais empêcher un envoie de "pseudo" et "message" vide par l'utilisateur.
Voici mon code pour "minichat.php"
<? session_start() $_SESSION['pseudo'] = $_POST['pseudo'] <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Le minichat</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br /> <label for="message">Votre message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyez !" /> </p> </form> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_creation, \'%d/%m/%Y %Hh%imin%ss\') AS date_creation_fr FROM minichat ORDER BY date_creation_fr DESC LIMIT 0, 10'); while($donnees = $reponse->fetch()) { echo ' <p> ' . htmlspecialchars($donnees['date_creation_fr']) . ' : <strong> ' . htmlspecialchars($_SESSION['pseudo']) . ' </strong> : ' . htmlspecialchars($donnees['message']) . ' </p> '; } $reponse->closeCursor(); ?> </body> </html>
Et pour "minichat_post.php":
<? session_start() $_SESSION['pseudo'] = $_POST['pseudo'] ?> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die(' Erreur : ' .$e->getMessage()); } $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_SESSION['pseudo'], $_POST['message'])); header('Location: minichat.php'); ?>
Je vous remercie par avance pour votre aide ! Hâte de comprendre mes erreurs !
A voir également:
- PHP - Semaine 3 (TP) Openclassrooms
- Ai suite 3 - Télécharger - Optimisation
- Picasa 3 - Télécharger - Albums photo
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Imagen 3 - Accueil - Applications & Logiciels
- Zelda 3 - Accueil - Guide jeu vidéo
4 réponses
Bonjour,
Le soucis à première vue, c'est que la ligne
Du coup l'éventuelle valeur de $_SESSION['pseudo'] est écrasée.
Je te suggère de vérifier que $_SESSION['pseudo'] n'a pas déjà été créé (et, tant qu'à faire, qu'à l'opposé $_POST['pseudo'] existe bien) en mettant :
Xavier
Le soucis à première vue, c'est que la ligne
$_SESSION['pseudo'] = $_POST['pseudo']est exécutée à chaque appel de la page, alors que, probablement, $_POST['pseudo'] n'est pas toujours mis.
Du coup l'éventuelle valeur de $_SESSION['pseudo'] est écrasée.
Je te suggère de vérifier que $_SESSION['pseudo'] n'a pas déjà été créé (et, tant qu'à faire, qu'à l'opposé $_POST['pseudo'] existe bien) en mettant :
if (!isset($_SESSION['pseudo']) && isset($_POST['pseudo'])) $_SESSION['pseudo'] = $_POST['pseudo']
Xavier
Bonjour Xavier et merci pour ta réponse!
J'ai tenté de revoir mon code avec ce que tu m'as dit :
minichat:
minichat_post.php:
Cela ne fonctionne toujours pas, je pensais avoir " saisi " comment faire mais là je crois que je patauge ! help ! ^^
J'ai tenté de revoir mon code avec ce que tu m'as dit :
minichat:
<? session_start() $_SESSION['pseudo'] = $_POST['pseudo'] ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Le minichat</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" value="<?php echo $_SESSION['pseudo'];?>" /><br /> <label for="message">Votre message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyez !" /> </p> </form> <?php if (!isset($_SESSION['pseudo']) && isset($_POST['pseudo'])) $_SESSION['pseudo'] = $_POST['pseudo'] { try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_creation, \'%d/%m/%Y %Hh%imin%ss\') AS date_creation_fr FROM minichat ORDER BY date_creation_fr DESC LIMIT 0, 10'); while($donnees = $reponse->fetch()) { echo ' <p> ' . htmlspecialchars($donnees['date_creation_fr']) . ' : <strong> ' . htmlspecialchars($_SESSION['pseudo']) . ' </strong> : ' . htmlspecialchars($donnees['message']) . ' </p> '; } } else { header('Location: minichat.php'); } $reponse->closeCursor(); ?> </body> </html>
minichat_post.php:
<? session_start() if (!isset($_SESSION['pseudo']) && isset($_POST['pseudo'])) $_SESSION['pseudo'] = $_POST['pseudo'] ?> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die(' Erreur : ' .$e->getMessage()); } $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_SESSION['pseudo'], $_POST['message'])); header('Location: minichat.php'); ?>
Cela ne fonctionne toujours pas, je pensais avoir " saisi " comment faire mais là je crois que je patauge ! help ! ^^
Pas de problème c'est déjà gentil d'intervenir !
Je reprends:
minichat.php:
Et aussi minichat_post.php:
Du coup, cela me donne une parse error ligne 31 sur minichat.php... Peux tu m'éclairer stp ?
Je reprends:
minichat.php:
<? session_start() $_SESSION['pseudo'] = $_POST['pseudo'] ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Le minichat</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" value="<?php echo $_SESSION['pseudo'];?>" /><br /> <label for="message">Votre message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyez !" /> </p> </form> <?php if (!isset($_SESSION['pseudo']) && isset($_POST['pseudo'])) $_SESSION['pseudo'] = $_POST['pseudo'] { try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_creation, \'%d/%m/%Y %Hh%imin%ss\') AS date_creation_fr FROM minichat ORDER BY date_creation_fr DESC LIMIT 0, 10'); while($donnees = $reponse->fetch()) { echo ' <p> ' . htmlspecialchars($donnees['date_creation_fr']) . ' : <strong> ' . htmlspecialchars($_SESSION['pseudo']) . ' </strong> : ' . htmlspecialchars($donnees['message']) . ' </p> '; } } else { header('Location: minichat.php'); } $reponse->closeCursor(); ?> </body> </html>
Et aussi minichat_post.php:
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die(' Erreur : ' .$e->getMessage()); } $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_POST['pseudo'], $_POST['message'])); header('Location: minichat.php'); ?>
Du coup, cela me donne une parse error ligne 31 sur minichat.php... Peux tu m'éclairer stp ?
Bonjour,
Dans minichat.php, il n'y a jamais de $_POST
Donc $_SESSION['pseudo'] = $_POST['pseudo'] va systématiquement écraser ta session !
Il faut enlever cette ligne. L'affectation à la session dois se faire dans minichat_post, puisque c'est là qu'on connaît le pseudo entré par l'utilisateur. Mais tu en as enlevé les infos de session...
Voici ce que je mettrais pour tes fichiers :
minichat.php
minichat_post.php
J'ai simplifié, en partant du principe que tu ne POSTais jamais vers minichat.php mais seulement vers minichat_post.php, ce qui est le cas dans le code présent mais dépend aussi des éventuelles autres pages que tu as.
Xavier
Dans minichat.php, il n'y a jamais de $_POST
Donc $_SESSION['pseudo'] = $_POST['pseudo'] va systématiquement écraser ta session !
Il faut enlever cette ligne. L'affectation à la session dois se faire dans minichat_post, puisque c'est là qu'on connaît le pseudo entré par l'utilisateur. Mais tu en as enlevé les infos de session...
Voici ce que je mettrais pour tes fichiers :
minichat.php
<?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>Le minichat</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <form action="minichat_post.php" method="post"> <p> <label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" value="<?php echo $_SESSION['pseudo'];?>" /><br /> <label for="message">Votre message</label> : <input type="text" name="message" id="message" /><br /> <input type="submit" value="Envoyez !" /> </p> </form> <?php try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT pseudo, message, DATE_FORMAT(date_creation, \'%d/%m/%Y %Hh%imin%ss\') AS date_creation_fr FROM minichat ORDER BY date_creation_fr DESC LIMIT 0, 10'); while ($donnees = $reponse->fetch()) { echo ' <p> ' . htmlspecialchars($donnees['date_creation_fr']) . ' : <strong> ' . htmlspecialchars($_SESSION['pseudo']) . ' </strong> : ' . htmlspecialchars($donnees['message']) . ' </p> '; } $reponse->closeCursor(); ?> </body> </html>
minichat_post.php
<?php session_start(); $_SESSION['pseudo'] = $_POST['pseudo']; try { $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root', ''); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(Exception $e) { die(' Erreur : ' .$e->getMessage()); } $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)'); $req->execute(array($_POST['pseudo'], $_POST['message'])); header('Location: minichat.php'); ?>
J'ai simplifié, en partant du principe que tu ne POSTais jamais vers minichat.php mais seulement vers minichat_post.php, ce qui est le cas dans le code présent mais dépend aussi des éventuelles autres pages que tu as.
Xavier
Ce que je te dis ne s'applique à la page minichat.php, puisque dans l'autre, $_POST est toujours mis. Quand tu fais la redirection, c'est comme si tu appelais une nouvelle page, donc $_POST est perdu.
De plus, il faut également que tu donnes la valeur par défaut au champ pseudo, en rappelant la valeur en session :
Xavier