Problème pour insérer une entrée dans une base de donée
- Accueil
- Forum
- Programmation
- PHP
- Problème pour insérer une entrée dans une base de donée
karim603 Le 31 mars 2017 à 21:59 (Édité le 25 janvier 2019 à 17:53)
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="utf-8">
</head>
<body>
<form method="POST" action="">
<input type="text" name="titre" placeholder="Titre"></br>
<input type="text" name="description" placeholder="Description"></br>
<input type="text" name="categorie" placeholder="Catégorie"></br>
<input type="submit" name="OK">
</form>
<?php
if (isset($_POST['id']))
{
$bdd = new PDO("mysql:host=localhost;dbname=test2;charset=utf8", 'root', "");
if (isset($_POST['titre']) AND isset($_POST['description']) AND isset($_POST['categorie']))
{
$requete = $bdd->prepare("INSERT INTO videos(titre, description, categorie) VALUES(?, ?, ?)");
$requete->execute(array($_POST['titre'], $_POST['description'], $_POST['categorie']));
}
}
?>
</body>
</html>
Zbuu Le 31 mars 2017 à 22:57 (Édité le 1 janvier 1970 à 01:00)
Je n'ai pas regarder le tutoriel, mais à première vu tu as fait une erreur. Tu fais un isset sur $_POST['id'] alors que dans ton formulaire il y a aucun input avec l'attribut name="id"
Comme tu as un attribut name sur ton bouton alors tu peux faire ceci :
// Si le formulaire est envoyé
if (isset($_POST['OK'])) {
// Ton code
}
karim603 Le 31 mars 2017 à 23:15 (Édité le 1 janvier 1970 à 01:00)
Zbuu Le 31 mars 2017 à 23:27 (Édité le 1 janvier 1970 à 01:00)
Si tu ne sais pas comment les activés :
error_reporting(E_ALL);
ini_set('display_errors', '1');
try {
$bdd = new PDO('mysql:host=localhost;dbname=test2;charset=utf8', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOExeption $e) {
die('Erreur : ' . $e->getMessage());
}
TheOldNoob Le 1 avril 2017 à 07:52 (Édité le 1 janvier 1970 à 01:00)
Met ton php avant ton html 😀
Bladoom Le 1 avril 2017 à 11:34 (Édité le 1 janvier 1970 à 01:00)
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="utf-8">
</head>
<body>
<form method="POST" action="">
<input type="text" name="titre" placeholder="Titre"></br>
<input type="text" name="categorie" placeholder="categorie"></br>
<input type="text" name="description" placeholder="description"></br>
<input type="submit" name="OK">
</form>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test2;charset=utf8', 'root', '');
try
{
$req = $bdd->prepare('INSERT INTO test (titre, description, categorie) VALUES(?, ?, ?)');
$req->execute(array($_POST['titre'], $_POST['description'], $_POST['categorie']));
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
</body>
</html>
Personnellement, quand j'ai un formulaire, j'envoie sur une autre page les données afin de les traiter. Tu peux t'y prendre comme ca :
<form action="XXX.php" method="post" >
Puis dans ta fiche "XXX".php ton code PHP 😉
Bon courage pour la suite !
karim603 Le 1 avril 2017 à 12:49 (Édité le 1 janvier 1970 à 01:00)
Bladoom Le 1 avril 2017 à 14:25 (Édité le 1 janvier 1970 à 01:00)
Si elle est de cette sorte :
`id` int(11) NOT NULL, => AutoIncrement, PRIMARY
`titre` varchar(255) NOT NULL,
`categorie` varchar(255) NOT NULL,
`description` varchar(255) NOT NULL
Ca devrait fonctionner. Il me semble que quand tu enregistres tes données ( titre, categorie, description ) avec le système de "VALUES (?, ?, ?)" tu dois insérer tes données dans le même ordre que tu as crée table. TheOldNoob Le 1 avril 2017 à 15:49 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 1 avril 2017 à 16:46 (Édité le 1 avril 2017 à 17:13)
[...] Et comme tu utilise des " et des ' dans ta connexion a ta bdd, je pense que ça peu venir de là.A mon avis non, ça vient d'autre part.
[...] tu dois insérer tes données dans le même ordre que tu as crée table.Non plus 😄 ça doit être dans le même ordre juste entre table(value1, value2, value3) et VALUES(?, ?, ?) enfin s'il y a une date du genre:
table(value1, value2, value3, datesend) et VALUES(?, ?, ?, NOW())
De plus il est inutile de créer plusieurs topics.....
karim603 Le 1 avril 2017 à 17:28 (Édité le 1 avril 2017 à 17:29)
Comment est ta table dans ta BDD ?Oui j'ai vérifié tout est bon , je sais plus quoi faire =(
Si elle est de cette sorte :`id` int(11) NOT NULL, => AutoIncrement, PRIMARY `titre` varchar(255) NOT NULL, `categorie` varchar(255) NOT NULL, `description` varchar(255) NOT NULL
De plus il est inutile de créer plusieurs topics.....Mdrrr tu traines trop dans les forums t'es trop fort
Balatharas Le 1 avril 2017 à 18:06 (Édité le 1 avril 2017 à 19:02)
Mdrrr tu traines trop dans les forums t'es trop fortJvois pas le rapport '-'
Pour ton pb, essaie
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
try {
$bdd = new PDO('mysql:host=localhost;dbname=test2;charset=utf8', 'root', '');
} catch(Exception $e) {
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
$post = [];
if(isset($_POST['ok'])) {
foreach ($_POST as $key => $value) { // cc @TheOldNoob 😉
$post[$key] = trim(strip_tags($value));
# trim => supprime les espaces vides en début et fin de chaine
# strip_tags => retire toutes les balises html
}
$errors = [];
if(empty($post['titre'])) {
$errors[] = "<li>Le titre ne peut être vide !</li>";
}
if(empty($post['categorie'])) {
$errors[] = "<li>Une catégorie est nécessaire !</li>";
}
if(empty($post['description'])) {
$errors[] = "<li>Merci de renseigner une description !</li>";
}
if(count($errors) == 0) {
$req = $bdd->prepare('INSERT INTO test(titre, description, categorie) VALUES(?, ?, ?)');
$req->execute([ $_POST['titre'], $_POST['description'], $_POST['categorie'] ]); # [] = array()
$success = true;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta charset="utf-8" />
</head>
<body>
<form method="POST">
<input type="text" name="titre" placeholder="Titre" /><br /><br />
<input type="text" name="categorie" placeholder="categorie" /><br /><br />
<input type="text" name="description" placeholder="description" /><br /><br />
<input type="submit" name="ok">
</form>
<br /><br />
<?php
if(@$success) { // Le @ permet de ne pas afficher d'erreur PHP
echo "<font color='green'>La requête à correctement été exécutée !</font>";
}
if(!empty($errors)) {
echo "<ul><font color='red'>".implode('<br />', $errors)."</font></ul>";
}
?>
</body>
</html>
C.F. Topic par TheOldNoob Profil introuvable Le 1 avril 2017 à 18:21 (Édité le 1 janvier 1970 à 01:00)
Mdrrr tu traines trop dans les forums t'es trop fortInutile de créer le même topic sur plusieurs forums... Cela ne sert à rien... 😴
karim603 Le 1 avril 2017 à 18:55 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 1 avril 2017 à 18:57 (Édité le 1 avril 2017 à 19:01)
Reprends le code
TheOldNoob Le 1 avril 2017 à 19:05 (Édité le 1 janvier 1970 à 01:00)
Oui j'ai vérifié tout est bon , je sais plus quoi faire =(Perso si j'arrive pas a avoir de réponse a ma question sur un forum, je vais sur un autre voir si d'autre personne peuvent avoir la réponse.De plus il est inutile de créer plusieurs topics.....Mdrrr tu traines trop dans les forums t'es trop fort
Balatharas Le 1 avril 2017 à 19:33 (Édité le 1 janvier 1970 à 01:00)
Perso si j'arrive pas a avoir de réponse a ma question sur un forum, je vais sur un autre voir si d'autre personne peuvent avoir la réponse.Bah ça dépend, moi je fais ça que si je reçois pas de réponse avant un moment sur un forum 😋
karim603 Le 1 avril 2017 à 19:38 (Édité le 1 janvier 1970 à 01:00)
Bah normal lis l'erreur, j'ai oublié de changer le nom de la table dans la connexion à la base de données pour tester...J'ai corrigé ça tout est on sauf l'entrée qui n'est pas dans la table
Reprends le code
Balatharas Le 1 avril 2017 à 22:08 (Édité le 1 janvier 1970 à 01:00)
Balatharas Le 2 avril 2017 à 12:04 (Édité le 1 janvier 1970 à 01:00)
Si oui met le topic en résolu