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

Résolu
kalen_82 Messages postés 8 Statut Membre -  
kalen_82 Messages postés 8 Statut Membre -
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

  1. Utilisateur anonyme
     
    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
  2. kalen_82 Messages postés 8 Statut Membre 1
     
    Ah non désolé j'ai juste mal recopié dans mon vrai code la parenthèse est bien là.


    Je ne comprends pas :(
    0
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
  4. kalen_82 Messages postés 8 Statut Membre 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 :(
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kalen_82 Messages postés 8 Statut Membre 1
     
    J'ai pas très bien compris pourquoi mais maintenant ça marche :)

    Merci beaucoup pour votre aide !
    0
  7. kalen_82 Messages postés 8 Statut Membre 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.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
       
      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
  8. kalen_82 Messages postés 8 Statut Membre 1
     
    D'accord merci beaucoup !
    0