Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insertion message TP : un mini-chat (PHP / MySQL)

Impossible d'insérer un message dans la base de données

    1 mai 2018 à 12:02:13

    Bonjour à tous,

    Je suis en train de travailler le cours "Concevez votre site avec PHP et MySQL" et je viens d'arriver au TP : un mini-chat.

    Le TP se passe bien, les messages de mon mini-chat s'affichent bien, mais problème lorsque j'insère un message en passant par ma page minichat.php rien ne se passe. Les messages ne s'ajoutent pas à ma base de données et je suis obligé de passer par phpMyAdmin pour les ajouter.

    Question : "Pourquoi ils ne s'ajoutent pas directement via ma page minichat.php ? "

    Voici le code de mes deux pages servant au TP :

    • minichat.php :
    		<form action="minichat_post.php" method="post">
    			<p>
    				<label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /> </br>
    				<label for="message">Message</label> :  <input type="text" name="message" id="message" /> </br>
    				<input type="submit" value="Envoyer" />
    			</p>
    		</form>
    
    		<?php
    		
    		// Connexion à la base de données
    		try
    		{
    			$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    		}
    		catch(Exception $e)
    		{
    				die('Erreur : '.$e->getMessage());
    		}
    
    		// Récupération des 10 derniers messages
    		$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');
    
    		// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
    		while ($donnees = $reponse->fetch())
    		{
    			echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
    		}
    
    		$reponse->closeCursor();
    
    		?>
    • minichat_post.php :
    		<?php
    	
    		try
    		{
    			$bdd = new PDO('mysql:host=localhost;dname=test;charse=utf8','root','');
    		}
    		catch (Exception $e)
    		{
    			die ('Erreur : ' . $e->getMessage());
    		}
    		
    		// Effectuer ici la requête qui insère le message
    		$req = $bdd -> prepare('INSERT INTO minichat(pseudo, message) VALUES(:pseudo, :message)');
    		$req -> execute(array(
    			'pseudo' => $_POST['pseudo'],
    			'message' => $_POST['message']
    			));
    		
    		// Puis rediriger vers minichat.php comme ceci :
    		header('Location: minichat.php');
    		?>
    • Le screen de mon mini-chat :
    screen mini-chat

    Merci d'avance pour votre aide.

    Maximilien.

    -
    Edité par MaximilienDelhaye 1 mai 2018 à 13:39:49

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      1 mai 2018 à 17:30:22

      Salut,

      Est-ce que le nom de ta base de donnée et le nom des tables dans ton code PHP correspondent bien à ce que tu as dans phpMyAdmin ?

      Est-ce que tu as par hasard une erreur PHP lorsque tu cliques sur le bouton ?

      Comment as-tu obtenu les 2 premiers messages ? C'était une requête SQL du TP ou cela fonctionnait avant ?
      • Partager sur Facebook
      • Partager sur Twitter
        1 mai 2018 à 20:05:59

        Bonsoir,

        Regarde la  connexion à la base de données dans minichat_post.php plus particulièrement dname et charse.

        -
        Edité par Max Imus 1 mai 2018 à 20:13:39

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2018 à 16:08:39

          Bonjour,

          D'abords merci beaucoup pour vos réponses, j'ai essayé de les comprendre et j'ai recommencé mon minichat. J'ai fais une pause depuis que j'ai eu le problème et je m'y suis remis et j'ai réussis je ne sais pas quelle manière.

          Dans tout les cas voici mes codes pour les deux pages :

          • minichat.php :
          <!DOCTYPE html>
          <html>
              <head>
                  <meta charset="utf-8" />
                  <title>TP : Mini-chat !</title>
              </head>
          	
          		<style>
          		form
          		{
          			text-align:center;
          		}
          		</style>
          		
              <body>
          		
          		<form action="minichat_post.php" method="post">
          			<p>
          				<label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /> </br>
          				<label for="message">Message</label> :  <input type="text" name="message" id="message" /> </br>
          				<input type="submit" value="Envoyer" />
          			</p>
          		</form>
          		
          		<?php
          		// Connexion à la base de données
          		try
          		{
          			$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
          		}
          		catch(Exception $e)
          		{
          				die('Erreur : '.$e->getMessage());
          		}
          
          		// Récupération des 10 derniers messages
          		$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC			 LIMIT 10');
          
          		// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
          		while ($donnees = $reponse->fetch())
          		{
          			echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';
          		}
          
          		$reponse->closeCursor();
          		?>
          		
          	</body>
          </html>
          • minichat_post.php :
          <!DOCTYPE html>
          <html>
              <head>
                  <meta charset="utf-8" />
                  <title>TP : Mini-chat !</title>
              </head>
          
              <body>
          
              	<?php
          		try
          		{
          			$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
          		}
          		catch(Exception $e)
          		{
          				die('Erreur : '.$e->getMessage());
          		}
          		
          		//Récupération des données du formulaire et du dernier id
          		$pseudo = $_POST['pseudo'] ;
          		$message = $_POST['message'] ;
          		
          		$reponse = $bdd->query('SELECT ID FROM minichat ORDER BY ID DESC LIMIT 0, 1');
          
          		while ($donnees = $reponse->fetch())
          		{
          			$id = $donnees['ID'];
          		}
          
          		// Insertion du message dans la base de données
          		$req = $bdd->prepare('INSERT INTO minichat(id, pseudo, message) VALUES(:id, :pseudo, :message)');
          		$req->execute(array(
          			'id' => $id + 1,
          			'pseudo' => $pseudo,
          			'message' => $message,
          			));
          	
          		header('Location: minichat.php');
          		?>
          
          	</body>
          </html>

          Merci,

          Maximilien.

          • Partager sur Facebook
          • Partager sur Twitter

          Insertion message TP : un mini-chat (PHP / MySQL)

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown