Bonjour,

J'ai un problème avec mon système d'envoie d'informations à la base de donnée. L'utulisateur donne un titre, et du texte, puis soumets l'informations.

Le problème c'est que quand j'envoie l'informations, une belle page blanche, sans erreurs apparaît, avec le message de confirmation ainsi que le var_dump . Wow, ça marche, mais non, ça ne marche pas, il y a rien d'ajouter dans ma base de donnée.

Forumlaire dans index.php Changement au niveau de la balise de fermeture de form, comme suggéré par Carouge10

 <div id="addvids" class="modal">
      <h4>Ajouter un message à la liste</h4>

      <form id="addvids" class="col s12" method="post" action="submit.php">
            <div class="input-field col s12">
                <input name="title" id="title" type="text" class="validate">
                <label for="username">Titre</label>
            </div>
          <div class="input-field col s6">
              <textarea name="embed" id="embed" class="materialize-textarea"></textarea>

              <label for="icon_prefix2">Contenu</label>
          </div>
          <button class="btn waves-effect waves-light" type="submit" name="action">Publié dans la liste
              <i class="mdi-content-send right"></i>
          </button>
            </form>

      <div class="action-bar">

          <a href="#" class="waves-effect waves-green btn-flat modal-action modal-close">Fermer</a>
      </div>
  </div>

Contenu complet de submit.php

<?php
if( $_POST )
{
    try {
        $dns = 'mysql:host=localhost;dbname=liste';
        $utilisateur = 'moi';
        $motDePasse = 'lemeilleurdesmotdepasse';
        $odb = new PDO( $dns, $utilisateur, $motDePasse );
    } catch ( Exception $e ) {
        echo "Connection à MySQL impossible : ", $e->getMessage();
        die();
    }
    var_dump($_POST);
    $title = $_POST['title'];
    $embed = $_POST['embed'];
    $laquery = "INSERT INTO liste(id, title, embed) VALUES (NULL, '. $title .', '. $embed .')";
    $query = $odb->prepare($laquery);
    $resultat = $query->execute();

    echo '<h1>Merci de l\'ajout de cet vidéo. <a href="index.php">Retourner à l\'accueil</a></h1>';
}
?>

PS : Je sais que je ne vérifie pas si l'informations est bien envoyée, mais j'affiche quand même le message. Je sais aussi que je pourrai créer des classes pour mes différentes actions, mais étant donné la petite taille du projet, je me complique pas la vie. J'ai aussi vu ce post qui était simillaire mais qui ne marche pas plus.

Merci d'avance!

5 réponses


Bonsoir,

1/ Votre balise de fermeture du formulaire doit être fermé avant d'ouvrir votre balise div (il ne faut que que les balises soit comme les maillons d'une chaîne, ex: < li><s pan>< /li>< /span>)
2/ Si vous avez une page blanche hormis le message de validation, c'est que le var_dump n'affiche rien donc il n'y a rien dans le $_POST.
3/ Vous utilisez les requêtes préparé de PDO, je vous invite à revoir leur structure car la c'est erronés.

FelixINX
Auteur

Merci pour votre réponse.
1) C'est changé. J'ai mis le </form> avant le <div>.
2) J'ai oublié de préciser que je reçois bien le var_dump, désolé pour cet oubli. C'est encore changé.
3) Je ne connais pas bien PDO, j'ai entendu parlé des requêtes préparé mais sans en savoir plus. Quand vous dites «je vous invite à revoir leur structure car la c'est erronés», que voulez-vous dire par là.

Encore, merci et bonne soirée.

Pour préparer les requêtes vous avez 2 possibilités:
1/ Prépare une requête SQL avec des paramètres nommés

<?php
/* Exécute une requête préparée en passant un tableau de valeurs */
$sql = 'SELECT nom, couleur, calories FROM fruit WHERE calories < :calories AND couleur = :couleur';
$sth = $dbh->prepare($sql);
// Enregistre une 1ère fois avec les valeurs suivantes
$sth->execute(array(':calories' => 150, ':couleur' => 'red'));
// Enregistre une seconde fois sans refaire la reqête
$sth->execute(array(':calories' => 175, ':couleur' => 'yellow'));
?>

2/ Prépare une requête SQL avec des marqueurs

<?php
/* Exécute une requête préparée en passant un tableau de valeurs */
$sth = $dbh->prepare('SELECT nom, couleur, calories FROM fruit WHERE calories < ? AND couleur = ?');
$sth->execute(array(150, 'rouge'));
$sth->execute(array(175, 'jaune'));
?>

Edit: Source originale Pdo prepare

FelixINX
Auteur

J'ai essayé comme indiqué. J'ai ensuite mis le tout dans un try catch pour essayer de récupérer des erreurs.
Voici mon code;

 try {
        $title = $_POST['title'];
        $embed = $_POST['embed'];
        $sql = 'INSERT INTO videos(id, title, embed) VALUES NULL AND title < :title AND embed < :embed';
        $sth = $odb->prepare($sql);
        $sth->execute(array(':title' => $title, ':embed' => $embed));
        echo "<h4>Merci de l'ajout de ", var_dump($_POST['title']), ' <a href="index.php">Retour à l\'accueil</a></p>';
    } catch (Exception $e2 ){
        echo '<p>Erreur lors de l\'importation : ', $e2->getMessage(), ' </p>';
    }
    var_dump($_POST);

En voici le résulat;

Merci de l'ajout de string(7) "Testing" Retour à l'accueil

array(3) { ["title"]=> string(7) "Testing" ["embed"]=> string(26) "Est-ce-que ça va marcher?" ["action"]=> string(0) "" }

Et rien dans ma base de donnée?! Ça ma plutôt surpris. La prochaine étape est de passer à msqli, ce qui saura plus facile.

Merci

Salut !
L'erreur vient de ta requête sql . Voici ce que je te propose :

try {
        $title = $_POST['title'];
        $embed = $_POST['embed'];
        $sql = 'INSERT INTO videos(title, embed) VALUES (?,?)';
        $sth = $odb->prepare($sql);
        $sth->execute(array($title,$embed));
        echo "<h4>Merci de l'ajout de ", var_dump($_POST['title']), ' <a href="index.php">Retour à l\'accueil</a></p>';
    } catch (Exception $e2 ){
        echo '<p>Erreur lors de l\'importation : ', $e2->getMessage(), ' </p>';
    }
    var_dump($_POST);