Problème pour insérer une entrée dans une base de donée

Ce topic a été résolu
karim603

karim603 Le 31 mars 2017 à 21:59 (Édité le 25 janvier 2019 à 17:53)

Bonjour le probleme c'est que je n'arrive pas a inserer une entrée dans ma base de donées depuis un formulaire pourtant je pense avoir bien suivi la video de PrimFX 
et voici mon code : 
<!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

Zbuu Le 31 mars 2017 à 22:57

Salut 

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

karim603 Le 31 mars 2017 à 23:15

Merci pour l'erreur mais ca ne marche toujours pas
Zbuu

Zbuu Le 31 mars 2017 à 23:27

Tu peux nous montré les erreurs qui te sont retournée ? 

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

TheOldNoob Le 1 avril 2017 à 07:52

Salut,
Met ton php avant ton html 😀
Bladoom

Bladoom Le 1 avril 2017 à 11:34

J'ai testé comme ça et ça marche de mon coter. Mais comme l'a dit TheOldNoob, tu peux mettre ton code PHP avant le HTML, ça marche aussi 😀
<!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

karim603 Le 1 avril 2017 à 12:49

J'ai aucune erreur je mets les informations dans le formulaire puis je clique sur valider j'actualise phpmyadmin mais ca ne marche pas  et merci pour vos reposes mais ca ne marche pas
Bladoom

Bladoom Le 1 avril 2017 à 14:25

Comment est ta table dans ta BDD ?
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

TheOldNoob Le 1 avril 2017 à 15:49

Si ça fonctionne pas, et que tu n'a aucune erreur, c'est qu'il y a un problème de connexion a ta bdd. Et comme tu utilise des " et des ' dans ta connexion a ta bdd, je pense que ça peu venir de là.
Balatharas

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

karim603 Le 1 avril 2017 à 17:28 (Édité le 1 avril 2017 à 17:29)

Comment est ta table dans ta BDD ? 
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
Oui j'ai vérifié tout est bon ,  je sais plus quoi faire =(
De plus il est inutile de créer plusieurs topics.....
 Mdrrr tu traines trop dans les forums t'es trop fort
Balatharas

Balatharas Le 1 avril 2017 à 18:06 (Édité le 1 avril 2017 à 19:02)

Mdrrr tu traines trop dans les forums t'es trop fort
Jvois 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

Profil introuvable Le 1 avril 2017 à 18:21

Hello 😀

Mdrrr tu traines trop dans les forums t'es trop fort
Inutile de créer le même topic sur plusieurs forums... Cela ne sert à rien... 😴
karim603

karim603 Le 1 avril 2017 à 18:55

J'ai recopié ton code et il m'affiche juste une erreur : Erreur : SQLSTATE[HY000] [1049] Base 'elostars' inconnue
Balatharas

Balatharas Le 1 avril 2017 à 18:57 (Édité le 1 avril 2017 à 19:01)

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... 😤
Reprends le code
TheOldNoob

TheOldNoob Le 1 avril 2017 à 19:05

Oui j'ai vérifié tout est bon ,  je sais plus quoi faire =( 
De plus il est inutile de créer plusieurs topics.....
 Mdrrr tu traines trop dans les forums t'es trop fort
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. 
Balatharas

Balatharas Le 1 avril 2017 à 19:33

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

karim603 Le 1 avril 2017 à 19:38

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...  
Reprends le code
J'ai corrigé ça tout est on sauf l'entrée qui n'est pas dans la table
Balatharas

Balatharas Le 1 avril 2017 à 22:08

Mais ça c'est a toi de le corriger...
Balatharas

Balatharas Le 2 avril 2017 à 12:04

Alors t'y est arrivé ? Il te suffit de rajouter les bonnes entrées dans la bonne table..
Si oui met le topic en résolu
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte