CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[PHP] Améliorer mini-chat

Noel78
Noel78
Niveau 9
17 août 2014 à 19:27:45

Salutations ! J'ai réalisé le mini-chat demandé par Openclassrooms en 20 minutes, mais ensuite ils me demandent d'aller plus loin en enregistrant le pseudo de la personne dans un cookie.

Lien : http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql/tp-un-mini-chat

Et je galère comme un fou dessus. J'ai ajouté un cookie via

<?php setcookie('pseudonyme', $_POST["pseudo"], time() + 365*24*3600, null, null, false, true); ?>

Ensuite j'essaye "d'écrire" grâce à la BDD le cookie suivit du message grâce à

$req = $bdd->prepare('INSERT INTO minichat(pseudo,message) VALUES(?, ?)');
$req->execute(array(htmlspecialchars($_COOKIE["pse
udo"]),
htmlspecialchars($_POST["message"])));

Mais, ça n'affecte absolument RIEN au chat. On met un pseudo, un message et ça l'envoie. Mais si on remet un message sans le pseudo, le pseudo devient " (vide) " et donc le cookie n'est-il pas lu j'imagine ?

Si c'est un peu flou n'hésitez pas à me demander des explications à propos de certains points. :)

Voici mes 2 fichiers :

testminichatauto.php

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="minichat.css" />
</head>
<body>
<form action="testminichatauto1.php" method="POST"><p>Pseudo : <input type="text" name="pseudo">
Message : <input type="text" name="message"> <input type="submit"></p>
</form>
<div id="chat">
<?php $bdd = new PDO("mysql:host=localhost;dbname=test", "root", "", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$reponse = $bdd->query('SELECT * FROM minichat ORDER BY id DESC LIMIT 10');
while ($donnees = $reponse->fetch())
{

echo "<p>" . $donnees["pseudo"] . " : " . $donnees["message"] . "</p>";
}?></div>
</body>
</html>

testminichatauto1.php

<?php setcookie('pseudonyme', $_POST["pseudo"], time() + 365*24*3600, null, null, false, true); ?>

<!doctype html>
<html>
<head>
</head>
<body>
<?php
$pseudo = $_COOKIE["pseudonyme"];
$message = $_POST["message"];
$bdd = new PDO("mysql:host=localhost;dbname=test", "root", "", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

$req = $bdd->prepare('INSERT INTO minichat(pseudo,message) VALUES(?, ?)');
$req->execute(array(htmlspecialchars($_COOKIE["pse
udo"]),
htmlspecialchars($_POST["message"])));

header('Location: testminichatauto.php');
?>
</body>
</html>

Votre aide me serait vraiment utile, merci d'avance. :)

Popovitch
Popovitch
Niveau 26
17 août 2014 à 20:29:01

J'ai pas lu ton code mais à première vue tu crées un cookie 'pseudonyme' et tu l'appel en faisant $_COOKIE["pseudo"] au lieu de $_COOKIE["pseudonyme"] :ok:

Noel78
Noel78
Niveau 9
17 août 2014 à 21:00:59

Cela ne change rien. :(

Harm0
Harm0
Niveau 7
17 août 2014 à 21:38:43

La façon la plus simple de débugguer un algo, c'est de te le faire dans ta tête.

1. Mettons tu postes un message en remplissant pseudo + message.
2. Tu postes. Le cookie est setté avec ta valeur de pseudo.
3. Le message s'enregistre en BDD aec la valeur de message + la valeur qu'il y a dans ton cookie de pseudo.

4. Tu postes un message sans mettre de pseudo comme tu l'a dit. Donc la valeur envoyé dans $_POST['pseudo'] est vide.
5. Dans ton code, tu remets la valeur du cookie de pseudo à $_POST['pseudo']. Donc ton ancien cookie est écrasé par ton pseudo null.
6. Le message est posté sans pseudo en BDD.

:d) Solution : Une condition. Si le cookie n'est pas déjà définie, tu le crées, sinon, tu le laisses tranquille (if(isset($_COOKIE['pseudo']))...
:d) Ou sinon, tu préremplis le champs pseudo dans ton formulaire avec la valeur qu'il y a dans le cookie.

Noel78
Noel78
Niveau 9
17 août 2014 à 22:12:18

J'ai réussi à le faire fonctionner sur deux lignes en ajoutant $cookie = $_POST["pseudo"];
setcookie('pseudonyme', $cookie, time() + 365*24*3600, null, null, false, true); ?>

Mais au bout de deux lignes le pseudo redevient null.

Harm0 => J'ai mis le isset sauf que au bout de la deuxième ligne la page devient blanche.

"Ou sinon, tu préremplis le champs pseudo dans ton formulaire avec la valeur qu'il y a dans le cookie."

Hum, la valeur n'est-elle pas supposée être donnée par l'utilisateur ? A moins que l'on puisse mettre directement $_POST["pseudo"] dans la BDD ?

Noel78
Noel78
Niveau 9
17 août 2014 à 22:34:06

P'tain c'est le bazar mon chat la. :noel:

deepblue
deepblue
Niveau 16
17 août 2014 à 23:04:09

C'est le bordel car tu ne découples rien (mais c'est de la faute au sdz).
https://wall.deblan.org/x1ba9/php/1/

Lis le code et essayes de comprendre.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment