PHP - Semaine 3 (TP) Openclassrooms
Résolu/Fermé
ReadyPlayerOne
Messages postés
12
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
1 janvier 2021
-
16 juil. 2019 à 15:51
ReadyPlayerOne Messages postés 12 Date d'inscription jeudi 16 août 2018 Statut Membre Dernière intervention 1 janvier 2021 - 17 juil. 2019 à 10:33
ReadyPlayerOne Messages postés 12 Date d'inscription jeudi 16 août 2018 Statut Membre Dernière intervention 1 janvier 2021 - 17 juil. 2019 à 10:33
A voir également:
- PHP - Semaine 3 (TP) Openclassrooms
- Picasa 3 - Télécharger - Albums photo
- Photorecit 3 - Télécharger - Visionnage & Diaporama
- Ai suite 3 download - Télécharger - Optimisation
- Retour a la ligne php ✓ - Forum PHP
- +33 3 - Forum Mobile
4 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 16 juil. 2019 à 16:03
Modifié le 16 juil. 2019 à 16:03
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
ReadyPlayerOne
Messages postés
12
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
1 janvier 2021
16 juil. 2019 à 16:29
16 juil. 2019 à 16:29
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 ! ^^
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
16 juil. 2019 à 16:37
16 juil. 2019 à 16:37
Ah ah, en effet, il manquait un mot à ma réponse, et t'as pas choisi le bon :p
J'ai écrit
Tu as lu
Il fallait lire
Toutes mes excuses...
J'ai écrit
ne s'applique à la page minichat.php
Tu as lu
ne s'applique pas à la page minichat.php
Il fallait lire
ne s'applique qu'à la page minichat.php
Toutes mes excuses...
ReadyPlayerOne
Messages postés
12
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
1 janvier 2021
16 juil. 2019 à 16:52
16 juil. 2019 à 16:52
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 ?
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
17 juil. 2019 à 09:43
17 juil. 2019 à 09:43
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
ReadyPlayerOne
Messages postés
12
Date d'inscription
jeudi 16 août 2018
Statut
Membre
Dernière intervention
1 janvier 2021
17 juil. 2019 à 10:33
17 juil. 2019 à 10:33
Merci beaucoup Xavier j'y vois plus clair dans le code !
Bonne journée!
Bonne journée!
Modifié le 16 juil. 2019 à 16:08
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