Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insert To qui ne fonctionne pas

Sujet résolu
    18 septembre 2020 à 10:14:39

    Bonjour,

    Je dois passer à PHP7 et dois réécrire mes scripts, pour faire simple j'ai créé deux tables de test et deux formulaires, le premier fonctionne, il envoie les données au deuxième, celui-ci affiche l'array mais n'insère pas les données dans la bdd et m'affiche les messages suivants :

    Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'VALUES NULL, NULL, NULL, NULL)' à la ligne 1 in C:\wamp64\www\xxx\test3.php on line 31

    PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de 'VALUES NULL, NULL, NULL, NULL)' à la ligne 1 in C:\wamp64\www\xxx\test3.php on line 31



    Voici les codes des deux formulaires:

    <?php error_reporting (E_ALL ^ E_NOTICE); ?>
    <?php include("menu.php");?>
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
    <link rel="stylesheet" type="text/css" href="calendrier.css" /> 
    <script language="JavaScript" src="calendrier.js"></script>
    
    <?php
    include("include/db_inc_pdo.php");
    ?>
    <html>
    <body>
    <form action="test3.php" method="post" ">
    
    <input type="submit" name="enregistrer" value="Enregistrer" /><br>
    
     	<div>
    	<label for="datea">Date d'arrivée : </label><input type="text" name="datea" label="datea" value="" onclick="new calendar(this);" />
    	<label for="dateb">&nbsp;Date de départ : </label><input type="text" name="dateb" label="dateb" value="" onclick="new calendar(this);" />
    	<div>
    	<label for="remarques">Note : </label><input type="text" name="note" label="note" value=" " />
    	</div>
    	</div>
    	
    <div><label>Choisissez un nom : <select name="id"></label></div>
    
    <?php
    	$reponse = $pdo->query("SELECT * from test 
    	ORDER BY nom");
    
    	$reponse->execute([$query]);
    	$row = $reponse->fetch();
    {
    
    	while ($row = $reponse->fetch())
    
        echo '<option value="'.$row['id'].'">'.$row['nom']."&nbsp;&nbsp;-&nbsp;&nbsp;" .$row['prenom'].'</option>';
        }
    ?>  
    </form>
    </body>
    </html>
    
    

    et le deuxième qui affiche seulement l'array mais n'insère pas les données dans la bdd :

    <?php error_reporting (E_ALL ^ E_NOTICE); ?>
    <?php include("menu.php");?>
    <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
    
    <?php
    
    include("include/db_inc_pdo.php");
    
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
    
    	$id = isset($_POST['id']) ? $_POST['id'] : ''; 
    	$datea = isset($_POST['datea']) ? $_POST['datea'] : ''; 
    	$dateb = isset($_POST['dateb']) ? $_POST['dateb'] : ''; 
    	$note = isset($_POST['note']) ? $_POST['note'] : ''; 
    
    $tab = array(
    ':id' => $POST['id'],
    ':datea' => $POST['datea'],
    ':dateb' => $POST['dateb'],
    ':note' => $POST['note']
    );
    
     $sql = "INSERT INTO tesdate (id, datea, dateb, note) (VALUES :id, :datea, :dateb, :note)";
     
    echo $sql;
    	$res = $pdo->prepare($sql);
     
        $exec = $res->execute($tab);
     
    	
      // vérifier si la requête d'insertion a réussi
      if(!$exec){
    echo "Une erreur est survenue : " . $res->errorCode();
      print_r($res->errorInfo());
    }
     
    ?>
    

    Je ne comprends pas ce qui ne fonctionne pas, pouvez-vous m'aider s.v.p.


    Merci d'avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter

    Notebleue

      18 septembre 2020 à 10:27:56

      Salut

      Comme te le dit l'erreur, la syntaxe de ta requête n'est pas bonne. Les parenthèses doivent entourer les valeurs sans le mot-clé VALUES

      • Partager sur Facebook
      • Partager sur Twitter
      OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir
        18 septembre 2020 à 10:31:17

        Un tour sur un cours de base ou le cours que tu aurai chez toi t'aurait aidé plus rapidement ;)

        La syntaxe d'un langage ça s'apprend

        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2020 à 11:01:11

          Merci beaucoup pour la rapidité de la réponse, entre-temps j'ai trouvé la solution :

          <?php error_reporting (E_ALL ^ E_NOTICE); ?>
          <?php include("menu.php");?>
          <link rel="stylesheet" href="menu/dropdown_three.css" type="text/css">
          <link rel="stylesheet" href="style.css" type="text/css">
          <link rel="stylesheet" type="text/css" href="calendrier.css" /> 
          <script language="JavaScript" src="calendrier.js"></script>
          
          <?php
          include("include/db_inc_pdo.php");
          
          echo '<pre>';
          print_r($_POST);
          echo '</pre>';
          
          	$id = isset($_POST['id']) ? $_POST['id'] : ''; 
          	$datea = isset($_POST['datea']) ? $_POST['datea'] : ''; 
          	$dateb = isset($_POST['dateb']) ? $_POST['dateb'] : ''; 
          	$note = isset($_POST['note']) ? $_POST['note'] : ''; 
          
          $sql = "INSERT INTO testdate (id, datea, dateb, note) VALUES (?,?,?,?)";
          $stmt= $pdo->prepare($sql);
          $stmt->execute([$id, $datea, $dateb, $note]);	
          	
          ?>
          
          
          

          c'était tout simple et ça fonctionne :)

          • Partager sur Facebook
          • Partager sur Twitter

          Notebleue

            18 septembre 2020 à 11:05:16

            Comme quoi il faut tourner sept fois le problème dans sa tête avant de le poster  :p

            • Partager sur Facebook
            • Partager sur Twitter
            OC à changerFAQ PHP • Et avant celaTutoriel WAMP • Code illisible ? Un p'tit 👍 ici@Zeste de Savoir

            Insert To qui ne fonctionne pas

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown