Problème pour insérer des entrées dans ma base de données MySQL [Résolu]

Signaler
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
-
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
-
Bonjour,
j'ai un problème pour insérer des entrées dans ma base de données,
je ne comprend pas j'arrive à récupérer des données mais pas à en insérer.
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="article" placeholder="Article..."><br>
   <input type="text" name="categorie" placeholder="Catégorie..."><br>
   <input type="submit" name="OK">
</form>
<?php
      if (isset($_POST['OK'])){
      
        $bdd=new PDO("mysql:host=127.0.0.1;dbname=mybdd;charset=utf8", "root", "");
      
      if (isset($_POST['titre']) AND isset($_POST['article']) AND isset($_POST['categorie']){
         
         $requete = $bdd->prepare("INSERT INTO articles(title, article, catégorie) VALUES(?, ?, ?)");
         $requete->execute(array($_POST['titre'], $_POST['article'], $_POST['categorie']));
      
      }
      }
?>
</body>
</html>


Si vous trouvez une erreur merci de m'expliquer ce qui ne vas pas.

Configuration: Windows / Chrome 89.0.4389.128

7 réponses

Messages postés
3800
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
29 avril 2021
1 386
Bonjour,

Ton code devrait planter et t'afficher une erreur, tu as oublié une parenthèse dans le deuxième if.

Je ne jugerai pas le reste du code, je n'ai pas pratiqué le PHP depuis un moment.
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
1
Ah non désolé j'ai juste mal recopié dans mon vrai code la parenthèse est bien là.


Je ne comprends pas :(
Messages postés
32244
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
3 440
Bonjour,

Commence par activer l'affichage des erreurs PHP dans ton script
Puis active l'affichage des erreurs PDO.
Pour ça, appliques les consignes données ici https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Je t'invite également à vérifier que ton formulaire s'envoi bien en plaçant, avant ton if, un
var_dump($_POST);

Ensuite, rempli tes champs et cliques sur ton bouton submit.. puis regarde ce que ce var_dump t'affiche.


Dernière vérification:
Assures toi que ton fichier est bien encodé en utf8 sans BOM
voir chapitre 1 de ce lien :
https://www.commentcamarche.net/faq/47069-html-php-caracteres-accentues-et-l-utf8

Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
1
Bonjour,

j'ai ajouter tout ce que vous m'avez dis dans mon code,
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="contenu" placeholder="Article..."><br>
   <input type="text" name="date_time_publication" placeholder="Date..."><br>
   <input type="submit" name="OK">
</form>
<?php
header( 'content-type: text/html; charset=utf-8' );
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


   
var_dump($_POST);
      if (isset($_POST['OK'])){
$sql="INSERT INTO articles(id,titre, contenu, date_time_publication) VALUES(:id,:titre, :contenu, :date_time_publication)";
$datas=array(':id'=>NULL,':titre'=>$_POST['titre'], ':contenu'=>$_POST['contenu'], ':date_time_publication'=>$_POST['date_time_publication']);
   try{
      $bdd=new PDO("mysql:host=127.0.0.1;dbname=test;charset=utf8","root","");
   // Activation des erreurs PDO
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}catch(PDOException $e) {
     die('Erreur : ' . $e->getMessage());
 }
 
         if (isset($_POST['titre']) AND isset($_POST['article']) AND isset($_POST['categorie'])){
            
            try{
               $requete = $bdd -> prepare($sql) ;
               $requete->execute($datas) ;
             }catch(Exception $e){
               // en cas d'erreur :
                echo " Erreur ! ".$e->getMessage();
                echo " Les datas : " ;
               print_r($datas);
             }
         
         }
      }

?>
</body>
</html>

ça affiche bien un tableau avec:
var_dump($_POST);

, aucune erreur n'apparait mais ça ne marche toujours pas

je suis perdu je comprends pas :(
Messages postés
32244
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
3 440
On place le PHP avant le HTML en général : C'est plus propre et plus facilement maintenable
On récupère proprement els variables avant de les utiliser

En gros, ton code devrait ressembler à ça :
<?php
header( 'content-type: text/html; charset=utf-8' );
//-----------------------------------------------//
// Affichage des erreurs PHP
//-----------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//-----------------------------------------------//
//connexion à la bdd
//-----------------------------------------------//
try{
  $bdd=new PDO("mysql:host=127.0.0.1;dbname=test;charset=utf8","root","");
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}

//-----------------------------------------------//
//traitement du formulaire
//-----------------------------------------------//
if (isset($_POST['OK'])){
  //récupération propre des variables AVANT de les utiliser
  $titre = !empty($_POST['titre']) ? $_POST['titre']: NULL;
  $article = !empty($_POST['article']) ? $_POST['article']: NULL;
  $categorie = !empty($_POST['categorie']) ? $_POST['categorie']: NULL;
  $date_time_publication = !empty($_POST['date_time_publication']) ? $_POST['date_time_publication']:  date('Y-m-d H:i:s');
  
  if (isset($_POST['titre']) AND isset($_POST['article']) AND isset($_POST['categorie'])){
    $sql = "INSERT INTO articles (titre, contenu, date_time_publication) VALUES (:titre, :contenu, :date_time_publication)";
    $datas = array(':titre'=>$titre, ':contenu'=>$contenu, ':date_time_publication'=>$date_time_publication);
    try{ 
      $requete = $bdd -> prepare($sql) ;
      $requete->execute($datas) ;
    }catch(Exception $e){
      // en cas d'erreur :
      echo " Erreur ! ".$e->getMessage();
      echo " Les datas : " ;
      print_r($datas);
    }

  }
}

?>
<!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="contenu" placeholder="Article..."><br>
       <input type="text" name="date_time_publication" placeholder="Date..."><br>
       <input type="submit" name="OK">
    </form>
  </body>
</html>
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
1
J'ai pas très bien compris pourquoi mais maintenant ça marche :)

Merci beaucoup pour votre aide !
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
1
Je viens de rajouter quelques chams à mon formulair, j'ai vérifié partout et je ne trouve pas d'erreurs, pourtant ça na marche plus :(

ca affiche une erreur:
Erreur ! SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

voici mon code:
<?php
header( 'content-type: text/html; charset=utf-8' );
//-----------------------------------------------//
// Affichage des erreurs PHP
//-----------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//-----------------------------------------------//
//connexion à la bdd
//-----------------------------------------------//
try{
  $bdd=new PDO("mysql:host=127.0.0.1;dbname=test;charset=utf8","root","");
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}catch(PDOException $e) {
  die('Erreur : ' . $e->getMessage());
}

//-----------------------------------------------//
//traitement du formulaire
//-----------------------------------------------//
if (isset($_POST['OK'])){
    //récupération propre des variables AVANT de les utiliser
  $titre = !empty($_POST['titre']) ? $_POST['titre']: NULL;
  $contenu = !empty($_POST['contenu']) ? $_POST['contenu']: NULL;
  $catégorie =!empty($_POST['catégorie']) ? $_POST['catégorie']: NULL;
  $livre =!empty($_POST['livre']) ? $_POST['livre']: NULL;
  $date_time_publication =date('Y-m-d H:i:s');
  
  if (isset($_POST['titre']) AND isset($_POST['contenu']) AND isset($_POST['catégorie']) AND isset($_POST['livre'])){
   
    $sql = "INSERT INTO articles (id,titre, contenu, date_time_publication,catégorie,vues,livre) VALUES (:id,:titre, :contenu, :date_time_publication,:catégorie,:vues,:livre)";
    $datas = array(':id'=>NULL,':titre'=>$titre, ':contenu'=>$contenu, ':date_time_publication'=>$date_time_publication,':catégorie'=>$catégorie,':vues'=>0,':livre'=>$livre);
    try{ 
      $requete = $bdd -> prepare($sql) ;
      $requete->execute($datas) ;
      $req=$bdd->query('SELECT * FROM articles ORDER BY date_time_publication DESC');
      while ($result=$req->fetch()) {
      echo $result['id'].'. '.$result['titre'].'<br>'.$result['contenu'].'//'.$result['date_time_publication'];
      echo '<br><br>';
      }
     
     
    }catch(Exception $e){
      // en cas d'erreur :
      echo " Erreur ! ".$e->getMessage();
      echo '<br>';
      echo " Les datas : " ;
      print_r($datas);
    }
    
  }
}

?>
<!DOCTYPE html>
<html>
  <head>
     <title>Test</title>
     <meta charset="utf-8">
     <style>
        td:nth-child(1) {
    text-align: right;
}
     </style>
  </head>
  <body>
   <form method="POST" action="" enctype="multipart/form-data">
   <table>
      <tr>
         <td><label>Titre:</label></td>
         <td><input type='text' name="titre" placeholder='Titre...'/></td>
         
      </tr>
      <tr>
         <td><label>Article:</label></td>
         <td><textarea name="contenu" placeholder='Article...'></textarea></td>
      </tr>
      <tr>
         <td><label>Image1:</label></td>
         <td><input type="file" name="photo"></td>
      </tr>
      <tr>
         <td><label>Image2:</label></td>
         <td><input type="file" name="photo2"></td>
      </tr>
      <tr>
         <td><label>Image3:</label></td>
         <td><input type="file" name="photo3"></td>
      </tr>
      <tr>
         <td><label>Image4:</label></td>
         <td><input type="file" name="photo4"></td>
      </tr>
      <tr>
         <td><label>Catégorie:</label></td>
         <td><select name="catégorie">
            <option value="Santé_et_Bien-être">Santé et bien-être</option>
            <option value="Productivité">Productivité</option>
            <option value="Persuasion">Persuasion</option>
         </select></td>
      </tr>
      <tr>
         <td><label>Livre:</label></td>
         <td>
            <select name="livre">
               <option value="59s_pour_prendre_les_bonnes_décisions.jpg">59s pour prendre les bonnes décisions</option>
               <option value="20_règles_d'or_pour_voir_la_vie_en_rose.jpg">20 règles d'or pour voir la vie en rose</option>
               <option value="l'art_de_la_niaque.jpg">l'art de la niaque</option>
            </select>
      </td>
      </tr>
      <tr>
         <td><label>Description:</label></td>
         <td><textarea name='description' placeholder='Description...'></textarea> </td>
      </tr>
      <tr>
         <td></td>
         <td><input type='submit' value='Envoyer!' name="OK"/></td>
      </tr>
   </table>
   </form>
  </body>
</html>


J'espère que vous pourrez m'aider.
Messages postés
32244
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
3 440
Bonjour
Ne mets pas de caractères accentués dans le nom de tes variable en PHP ni dans les attributs name de ton HTML
Messages postés
7
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
22 avril 2021
1
D'accord merci beaucoup !