Insertion base de données Mysql dans html

Fermé
clemichou - 16 mai 2016 à 16:35
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 - 17 mai 2016 à 01:07
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

Tomy2e Messages postés 816 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 18 août 2016 858
16 mai 2016 à 18:08
Bonjour, est-ce qu'on pourrait avoir un aperçu de ton code ?
0
clemichou27 Messages postés 2 Date d'inscription lundi 16 mai 2016 Statut Membre Dernière intervention 16 mai 2016
Modifié par jordane45 le 16/05/2016 à 21:14
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.
0
Tomy2e Messages postés 816 Date d'inscription jeudi 21 février 2013 Statut Membre Dernière intervention 18 août 2016 858
Modifié par Tomy2e le 16/05/2016 à 18:35
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=""
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
16 mai 2016 à 21:19
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


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
clemichou27 Messages postés 2 Date d'inscription lundi 16 mai 2016 Statut Membre Dernière intervention 16 mai 2016
16 mai 2016 à 22:14
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 :/
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
Modifié par jordane45 le 16/05/2016 à 23:16
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>

0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
17 mai 2016 à 01:07
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();
     }
   }

0