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

Résolu/Fermé
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 - Modifié le 21 avril 2021 à 20:59
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 - 22 avril 2021 à 19:51
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

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.
0
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 1
21 avril 2021 à 21:34
Ah non désolé j'ai juste mal recopié dans mon vrai code la parenthèse est bien là.


Je ne comprends pas :(
0
jordane45 Messages postés 36588 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2022 4 415
21 avril 2021 à 21:54
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://forums.commentcamarche.net/forum/affich-37584941-php-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://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8

0
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 1
22 avril 2021 à 11:12
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 :(
0
jordane45 Messages postés 36588 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2022 4 415
22 avril 2021 à 11:20
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>
0

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

Posez votre question
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 1
22 avril 2021 à 17:10
J'ai pas très bien compris pourquoi mais maintenant ça marche :)

Merci beaucoup pour votre aide !
0
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 1
22 avril 2021 à 19:24
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.
0
jordane45 Messages postés 36588 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2022 4 415
22 avril 2021 à 19:28
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
0
kalen_82 Messages postés 8 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 8 mai 2022 1
22 avril 2021 à 19:51
D'accord merci beaucoup !
0