Insertion base de données Mysql dans html

Bonjour, je suis débutante en informatique et j'ai un projet à finir dont la note comptera pour le bac mais je ne m'y connais pas du tout en bases de données. Que je vous explique un peu mon problème, je fait une sorte de site de voyage et sur la page de chaque pays il y a le lien d'un forum. J'ai donc codé ma page de forum et créé une base de données correspondant avec 4 colonnes : ID, pseudo, message et date du post. J'ai donc créé 2 pages php forum_france.php et forum_france_traitement.php correspondant à la base de données.
Or ma page de forum fonctionne très bien lorsque je la lance seule mais lorsque j'insert ma base de données (donc les 2 pages forum_france.php et forum_france_traitement.php) plus rien ne s'affiche. Je ne sais donc pas quoi faire et ne trouve aucune réponse sur internet c'est pourquoi je vous demande votre aide.. Merci beaucoup.

6 réponses

  1. Voilà la page du forum de Paris
    <?php include("forum_france.php"); ?>
    <?php include("forum_france_traitement.php"); ?>
    <!DOCTYPE html>
    <html>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" media="screen" type="text/css" title="pagecss" href="style.css"/>
    <head>
    <title>Forum Paris</title>
    <link rel="shortcut icon" href="img/avionlogo.jpg" type="image/x-icon" /><!--affiche un logo à coté du nom de l'ongelt-->
    </head>
    <body>
    
    
    <h1>Faites nous part de votre avis</h1>
    <form method="post" action="traitement"> <!--action: page ou le formulaire sera envoyé-->
        <label for="prenom">Entrez votre prénom</label> <!-- décrire à l'utilisateur ce qu'il doit rentrer dans chaque champs (ici: "prénom")-->
        <input type="text" id="prenom" name="prenom" autofocus="autofocus" placeholder="Ex: Alizée" required="pseudo"><br> <!--input type text: défini un champs de données monoligne ou l'on peut rentrer du texte, name: sert à afficher l'information correspondante de l'utilisateur sur le formulaire reçu (ex: nom...)et autofocus permet que lorqu'on charge la page le focus soit présent dans le premier champs-->
        
        <label for="motdepasse">Saisir un mot de passe</label>
        <input type="password" id="motdepasse" name="motdepasse" required="required"><br> <!--requited: permet d'obliger l'utilisateur à remplir le champs sinon la page n'est pas envoyée-->
        
        As-tu aimé ce voyage ? <br>
        <input type="radio" id="j'aime" name="plu ou pas" value="j'aime"> <!--type radio permet de demander à l'utilisateur de choisir un choix parmi plusieurs choix proposés-->
        <label for="j'aime"> J'aime</label><br>
        <input type="radio" id="j'aime pas" name="plu ou pas" value="j'aime pas">
        <label for="j'aime pas"> J'aime pas </label><br>
        
        Qu'avez-vous visité ? <br>
        <input type="checkbox" name="visites" value="toureiffel" id="toureiffel"><!--checkbox permet à l'utilisateur de choisir de zéro à plusieurs choix parmi les différents choix proposés-->
        <label for="toureiffel"> Tour Eiffel</label><br>
        <input type="checkbox" name="visites" value="museedulouvre" id="museedulouvre">
        <label for="museedulouvre"> Musée du Louvre</label><br>
        <input type="checkbox" name="visites" value="centrepompidou" id="centrepompidou">
        <label for="centrepompidou"> Centre Pompidou</label><br>
        <input type="checkbox" name="visites" value="muséedorsay" id="muséedorsay">
        <label for="muséedorsay"> Musée d'Orsay</label><br>
        <input type="checkbox" name="visites" value="chateauversailles" id="chateauversailles">
        <label for="chateauversailles"> Château de Versailles</label><br>
        <input type="checkbox" name="visites" value="cathedralenotredame" id="cathedralenotredame">
        <label for="cathedralenotredame"> Cathédrale de Notre Dame</label><br>
        <input type="checkbox" name="visites" value="pantheon" id="pantheon">
        <label for="pantheon"> Panthéon</label><br>
        <input type="checkbox" name="visites" value="avenuedeschampselysees" id="avenuedeschampselysees">
        <label for="avenuedeschampselysees"> Avenue des Champs-Elysées</label><br>
        
        <label for="nombre">Mettre une note sur 20</label>
        <input type="number" name="nombre" id="nombre" min="0" max="20" required="required"><br> <!--choisir un nombre entre 1 et 20-->
        
        <label for="commentaires">Commentaires</label>
        <textarea id="commentaires" name="commentaires" required="message"></textarea><br><!-- text area: sert à créer un champs de texte multiligne pour mettre un commentaire ou une présentation-->
        
        <!-- lier label et input ainsi que label et textearea grâce à for et id permet que lorssqu'on clique sur prénom par exemple le curseur se mette automatiquement sur le champs ou taper le texte-->
        
        <input type="submit" value="Envoyer"> <!--bouton envoyer, value: indiquer une valeur à l'interieur du bouton-->
        
        </form>
    
    </body>
    </html>
    


    EDIT : Ajout des balises de code.
    1. A priori je vois pas de soucis dans ton code HTML, et vu que le problème a l'air de venir du PHP ça serait bien que tu mettes ton code PHP (forum_france.php & forum_france_traitement.php) en prenant soin de cacher les identifiants de la BDD MySQL et en utilisant les balises de code du forum :)
      https://nsa37.casimages.com/img/2016/05/16/160516064255934353.png

      EDIT: Il y a (probablement) une erreur dans l'action de ton formulaire (balise <form>), si le traitement est sur la même page que ton formulaire, mets plutôt
      action=""
      1. Modérateur
        Bonjour,

        <form method="post" action="traitement"> <!--action: page ou le formulaire sera envoyé-->
        

        "traitement" .. ne correspond à rien.
        Soit tu laisse la propriété action à vide (comme le dit Tomy) soit tu y mets le nom du fichier PHP servant à faire le traitement du formulaire : forum_france_traitement.php (et donc dans ce cas... ne pas l'inclure dans la même page que ton formulaire.)

        Pour le reste ...
        Sur tes fichiers php .. penses à mettre en première ligne ceci :
        <?php
        error_reporting(E_ALL);
        

        Cela te permettra d'afficher les éventuelles erreurs PHP.

        PS: Au cas où ... si tu as utilisé l'ancienne extension mysql pour te connecter à ta BDD ... je t'invite à lire ceci :
        https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
        Puis à passer à mysqli ou PDO.
        https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli

        1. Merci beaucoup d'avoir pris le temps de me répondre, voici la page forum_france.php :

          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          </head>
          <body>
          <?php //ouvre une balise php
          class Forum_france{ //créé une class
          public $id; //crée un attribut pour la colonne de la table renseignée
          public $pseudo;
          public $message;
          public $date_du_post;
          public function inserer() {
          $connection = new PDO('mysql:dbname=forum_france;host=127.0.0.1', '','');
          $connection->exec("INSERT INTO forum_france (id,pseudo) VALUES ('" . $this->int. "','" .
          $this->tinytext. "')");
          }
          }
          ?>;
          </body>


          et celui de la page forum_france_traitement.php :

          <?php
          require 'forum_france.php'; //Appel du fichier contenant la class
          $utilisateur = new forum_france();
          $utilisateur->id = $_POST['id'];
          $utilisateur->pseudo = $_POST['pseudo'];
          $utilisateur->message = $_POST['message'];
          $utilisateur->date_du_post = $_POST['date_du_post'];
          $utilisateur->inserer(); //on s'insère en base de données

          ?>

          Désolé si j'ai fait de grosses erreurs mais je ne comprends pas grand chose en bases de données, j’essaye donc de me débrouiller comme je peux :/
          1. Modérateur
            Pas de HTML dans un fichier PHP de class.
            Comme ceci :

            <?php //ouvre une balise php
            class Forum_france{ //créé une class
               public $id; //crée un attribut pour la colonne de la table renseignée
               public $pseudo;
               public $message;
               public $date_du_post;
               
               private $bdd;
               
               //constructeur
               function __construct(){
                 $this->connexion(); //appelle la fonction de connexion à la BDD lors du NEW....
               }
               
               //Fonction de connexion à la BDD
               private function connexion(){
                try{
                   $this->bdd = new PDO('mysql:dbname=forum_france;host=127.0.0.1', '','');
                }catch(Exception $e){
                  echo "Erreur !" .$e->getMessage();
                }
               }
               
               //fonction pour insérer le commentaire/pseudo...   
               public function inserer() {
                 $sql = "INSERT INTO forum_france(pseudo,message,date_du_post) VALUES (:pseudo,:message,:date_du_post)"
                 $variables = array(":pseudo"=>$this->pseudo,":message"=>$this->message,":date_du_post:"=>$this->date_du_post)
                 try{
                  $prepare = $this->bdd->prepare($sql);
                  $prepare->execute($variables);
                   return true;
                 }catch(Exception $e){
                  echo "Erreur !" .$e->getMessage();
                  return false;
                 } 
            
               }
            
            }//fin de la class
            ?>
            


            Ensuite, dans le fichier forum_france_traitement.php, pense à récupérer PROPREMENT
            les variables AVANT de les utiliser
            <?php
            error_reporting(E_ALL); //affichage des erreurs PHP si il y en a
            
            require 'forum_france.php'; //Appel du fichier contenant la class
            $utilisateur = new Forum_france();
            $utilisateur->id = !empty($_POST['id']) ? $_POST['id'] : 0;
            $utilisateur->pseudo = isset($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
            $utilisateur->message = !empty($_POST['message']) ? $_POST['message'] : '';
            $utilisateur->date_du_post = !empty($_POST['date_du_post']) ? $_POST['date_du_post'] : '';
            if($utilisateur->pseudo ){
              if($utilisateur->inserer()){ //on s'insère en base de données
                echo "Message Enregistré !";
              }else{
                echo "Erreur ! Le message n'a pas été enregistré";
              }
            }else{
              echo "Aucun utilisateur renseigné !";
            }
            ?>
            


            Et dans ton fichier HTML aucun include n'est nécéssaire
            Juste mettre le bon fichier dans le "action" de la balise form
            <!DOCTYPE html>
            <html>
            <head>
              <title>Forum Paris</title>
              <link rel="shortcut icon" href="img/avionlogo.jpg" type="image/x-icon" /><!--affiche un logo à coté du nom de l'ongelt-->
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
              <link rel="stylesheet" media="screen" type="text/css" title="pagecss" href="style.css"/>
            </head>
            <body>
             <h1>Faites nous part de votre avis</h1>
             <form method="post" action="forum_france_traitement.php"> <!--action: page ou le formulaire sera envoyé-->
                <label for="prenom">Entrez votre prénom</label> <!-- décrire à l'utilisateur ce qu'il doit rentrer dans chaque champs (ici: "prénom")-->
                <input type="text" id="prenom" name="prenom" autofocus="autofocus" placeholder="Ex: Alizée" required="pseudo"><br> <!--input type text: défini un champs de données monoligne ou l'on peut rentrer du texte, name: sert à afficher l'information correspondante de l'utilisateur sur le formulaire reçu (ex: nom...)et autofocus permet que lorqu'on charge la page le focus soit présent dans le premier champs-->
                
                <label for="motdepasse">Saisir un mot de passe</label>
                <input type="password" id="motdepasse" name="motdepasse" required="required"><br> <!--requited: permet d'obliger l'utilisateur à remplir le champs sinon la page n'est pas envoyée-->
                
                As-tu aimé ce voyage ? <br>
                <input type="radio" id="j'aime" name="plu ou pas" value="j'aime"> <!--type radio permet de demander à l'utilisateur de choisir un choix parmi plusieurs choix proposés-->
                <label for="j'aime"> J'aime</label><br>
                <input type="radio" id="j'aime pas" name="plu ou pas" value="j'aime pas">
                <label for="j'aime pas"> J'aime pas </label><br>
                
                Qu'avez-vous visité ? <br>
                <input type="checkbox" name="visites" value="toureiffel" id="toureiffel"><!--checkbox permet à l'utilisateur de choisir de zéro à plusieurs choix parmi les différents choix proposés-->
                <label for="toureiffel"> Tour Eiffel</label><br>
                <input type="checkbox" name="visites" value="museedulouvre" id="museedulouvre">
                <label for="museedulouvre"> Musée du Louvre</label><br>
                <input type="checkbox" name="visites" value="centrepompidou" id="centrepompidou">
                <label for="centrepompidou"> Centre Pompidou</label><br>
                <input type="checkbox" name="visites" value="muséedorsay" id="muséedorsay">
                <label for="muséedorsay"> Musée d'Orsay</label><br>
                <input type="checkbox" name="visites" value="chateauversailles" id="chateauversailles">
                <label for="chateauversailles"> Château de Versailles</label><br>
                <input type="checkbox" name="visites" value="cathedralenotredame" id="cathedralenotredame">
                <label for="cathedralenotredame"> Cathédrale de Notre Dame</label><br>
                <input type="checkbox" name="visites" value="pantheon" id="pantheon">
                <label for="pantheon"> Panthéon</label><br>
                <input type="checkbox" name="visites" value="avenuedeschampselysees" id="avenuedeschampselysees">
                <label for="avenuedeschampselysees"> Avenue des Champs-Elysées</label><br>    
                <label for="nombre">Mettre une note sur 20</label>
                <input type="number" name="nombre" id="nombre" min="0" max="20" required="required"><br> <!--choisir un nombre entre 1 et 20-->
                <label for="commentaires">Commentaires</label>
                <textarea id="commentaires" name="commentaires" required="message"></textarea><br><!-- text area: sert à créer un champs de texte multiligne pour mettre un commentaire ou une présentation-->
                
                <!-- lier label et input ainsi que label et textearea grâce à for et id permet que lorssqu'on clique sur prénom par exemple le curseur se mette automatiquement sur le champs ou taper le texte-->
                <input type="submit" value="Envoyer"> <!--bouton envoyer, value: indiquer une valeur à l'interieur du bouton-->
                
             </form>
             </body>
            </html>
            
            
            1. Modérateur
              NB:
              Par défaut, PDO n'affiche pas les erreurs.
              Pour cela, il faut modifier le code de connexion à la bdd comme ceci :
                 private function connexion(){
                  try{
                     $this->bdd = new PDO('mysql:dbname=forum_france;host=127.0.0.1', '','');
                     $this->bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                   }catch(PDOException $e){
                     echo "<br>Erreur lors de la connexion à la bdd !".$e->getMessage();
                   }
                 }