Requete sql suite à formulaire php

Résolu
Bonjour,
Je suis bloqué lors d'un formulaire, je n'arrive pas à envoyer les informations sur une table,
J'ai tourné dans tout les sens, si vous aviez des pistes je suis preneur, merci, voici le code complet :

<?include ('config.php'); ?>
<?include ('header.php'); ?>

<?php

if (isset($_POST['valider'])){
$titre = $_POST['titre'];
$fichier = $_POST['fichier'];
$description = $_POST['description'];
$embed = $_POST['embed'];
echo $titre;
echo htmlentities($description);
echo $embed;

mysql_connect ($mysql_host, $mysql_user, $mysql_pass);
mysql_select_db ($mysql_name) ;

// lancement de la requete
$sql = "INSERT INTO `video` VALUES (NULL, $titre, $fichier, $description, $embed, NULL)";

// on insere le tuple (mysql_query) et au cas où, on écrira un petit message d'erreur si la requête ne se passe pas bien (or die)
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());

// on ferme la connexion à la base
mysql_close();

}else{ ?>

<form method="POST" >

<h1>Poster</h1>
<table>
<tr>
<td>Titre</td>
<td><input type="text" name="titre" /></td>
</tr>
<tr>
<td>Image</td>
<td><input type="text" name="fichier" /></td>
</tr>

<tr>
<td>Description</td>
<td><textarea name="description"></textarea></td>
</tr>

<tr>
<td>Embed</td>
<td><input type="text" name="embed" /></td>
</tr>

<tr>
<td>Valider</td>
<td><input type="submit" id="valider" name="valider" /></td>
</tr>
</table>
</form>

<?php } ?>
<? include ('footer.php'); ?>


Configuration: Windows / Chrome 73.0.3683.86

3 réponses

  1. Modérateur
    Bonjour,

    Pour commencer... active l'affichage des erreurs php
    https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code

    Ensuite, oublie l'extension mysql_ ... elle est obsolète ! => https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

    Désormais, il faut utiliser PDO ou mysqli

    Et au passage... ta requête est fausse....
    Tu as oublié de mettre les valeurs "textuelles" entre quotes
    $sql = "INSERT INTO `video` VALUES (NULL, $titre, $fichier, $description, $embed, NULL)";
    

    A remplacer par :
    $sql = "INSERT INTO `video` VALUES (NULL, '$titre', '$fichier', '$description', '$embed', NULL)";
    

    et il est préférable d'utiliser la "bonne" syntaxe :
    INSERT INTO  (champ1, champ2...)
    VALUES ('valeur1','valeur2')
    

    un truc du genre :
    $sql = "INSERT INTO `video` (titre,fichier,description,embed) VALUES ( $titre, $fichier, $description, $embed,)";
    

    1. Merci je vais regarder ça
  2. Aucune ligne ne s'ajoute dans la bdd, et aucun message d'erreur sur la page d'affiché
    1. Modérateur
      As tu modifié le code comme je te l'ai indiqué ?
      Montres nous ton "nouveau" code
    2. <?include ('config.php'); ?>
      <?include ('header.php'); ?>

      <?php

      if (isset($_POST['valider'])){
      $titre = $_POST['titre'];
      $fichier = $_POST['fichier'];
      $description = $_POST['description'];
      $embed = $_POST['embed'];
      echo $titre;
      echo htmlentities($description);
      echo $embed;

      $conn = mysqli_connect('$mysql_host', '$mysql_user', '$mysql_pass', '$mysql_name');

      // lancement de la requete
      $req = "INSERT INTO `video` (`id`, `titre`, `url_image`, `description`, `embed`, `vue`) VALUES (NULL, '', '', '', '', '')";
      echo $req;
      $res = $conn->query($req);

      }else{ ?>

      <form method="POST" >

      <h1>Poster</h1>
      <table>
      <tr>
      <td>Titre</td>
      <td><input type="text" name="titre" /></td>
      </tr>
      <tr>
      <td>Image</td>
      <td><input type="text" name="fichier" /></td>
      </tr>

      <tr>
      <td>Description</td>
      <td><textarea name="description"></textarea></td>
      </tr>

      <tr>
      <td>Embed</td>
      <td><input type="text" name="embed" /></td>
      </tr>

      <tr>
      <td>Valider</td>
      <td><input type="submit" id="valider" name="valider" /></td>
      </tr>
      </table>
      </form>

      <?php } ?>
      <? include ('footer.php'); ?>
    3. Ca marche en enlevant les quotes ligne 17
      $conn = mysqli_connect('$mysql_host', '$mysql_user', '$mysql_pass', '$mysql_name');
    4. reste à mettre les variables dans la requete, j'ai mis null partout pour eviter d'autres erreurs, merci :)