Insertion base de données Mysql dans html
clemichou
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
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.
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.
A voir également:
- Insertion base de données Mysql dans html
- Fuite données maif - Guide
- Base de registre - Guide
- Editeur html - Télécharger - HTML
- Supprimer les données de navigation - Guide
- Touche insertion clavier - Guide
6 réponses
Voilà la page du forum de Paris
EDIT : Ajout des balises de code.
<?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.
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
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=""
Bonjour,
"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 :
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
<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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup d'avoir pris le temps de me répondre, voici la page forum_france.php :
et celui de la page forum_france_traitement.php :
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 :/
<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 :/
Pas de HTML dans un fichier PHP de class.
Comme ceci :
Ensuite, dans le fichier forum_france_traitement.php, pense à récupérer PROPREMENT
les variables AVANT de les utiliser
Et dans ton fichier HTML aucun include n'est nécéssaire
Juste mettre le bon fichier dans le "action" de la balise form
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>
NB:
Par défaut, PDO n'affiche pas les erreurs.
Pour cela, il faut modifier le code de connexion à la bdd comme ceci :
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(); } }