Bonjour,

Voila je rencontre un petit problème avec mon code.

J'ai écrit ce script en lien avec ma base de données SQL :

<?php
if(isset($_POST['title']))
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$requete = $bdd->prepare('INSERT INTO post(title, content) VALUES(?, "")');
$requete->execute(array($_POST['title']));
}
?>

<!DOCTYPE html>
<html> 

    <head>
    <meta charset="UTF-8">
    <title>Edition</title>
    </head>

    <body>
    <h1>Edition</h1>
    <form action="edition.php" method="post">
    <label>Titre : <input type="text" name="title"></label>
    <input type="submit" value="valider">
    </form>
    </body>

</html>

Je souhaiterais que, lorsque je remplie mon formulaire (l'input "titre") une ligne soit créée dans ma base de données avec l'id (généré automatique en A.I.), le "title" précédemment saisi et le "content" qui serait vide.

Mais il ne se passe rien ! Rien n'ai créé dans la table "post".
Cela fait maintenant plusieurs heures que j'essaie de faire fonctionner ce code mais je n'y parviens pas.

Merci d'avance pour votre aide,
Bon après-mid à tous.

5 réponses


mateo625
Auteur
Réponse acceptée

Je viens de sortir la variable $bdd (qui permet de se connecter avec la base de données) de la condition if(!empty($_POST['title'])) et ça fonctionne enfin !

Voici le code complet :

<?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
if(!empty($_POST['title']))
{
$requete = $bdd->prepare('INSERT INTO post(title, content) VALUES(?, "")');
$requete->execute(array($_POST['title']));
}
?>

<!DOCTYPE html>
<html> 

    <head>
    <meta charset="UTF-8">
    <title>Edition</title>
    </head>

    <body>
    <h1>Edition</h1>
    <form action="edition.php" method="post">
    <label>Titre : <input type="text" name="title"></label>
    <input type="submit" value="valider">
    </form>
    </body>

</html>

Merci beaucoup pour votre aide,
Bonne journée à tous.

Salut

if(isset($_POST['title']))

Ce code là sert à rien, car title est toujours définie. Il peut juste être vide ou non. Utilise !empty($field) à la place.

As-tu essayé de débugger un peu ? Du genre mettre un print_r($_POST); die() pour savoir ce qu'il se passe avant la validation de ton formulaire ?

mateo625
Auteur

Merci pour ta réponse !

Non je n'ai pas essayé de débugger.

Je débute tout juste en PHP, je n'y connais vraiment pas grand chose...
J'ai déjà entenu parlé de la fonction print_r() mais je ne sais pas où il faut la placer dans le code, peux-tu me l'indiquer stp ?

Bonjour.

Je débute tout juste en PHP, je n'y connais vraiment pas grand chose...
J'ai déjà entenu parlé de la fonction print_r() mais je ne sais pas où il faut la placer dans le code, peux-tu me l'indiquer stp ?

Je te recommande fortement de suivre cette petite formation : Déboguer son code PHP qui est constitué de 4 vidéos pour un total de 23 minutes, mais qui te sera bien utile vu ton niveau actuel en PHP.

mateo625
Auteur

Je viens d'essayer la fonctoion

print_r($_POST); die()

Et après avoir rempli mon formulaire j'obtiens ceci : Array ( [title] => titre saisi )
Par exemple, si j'entre "Article 1" dans mon formulaire, le résultat sera : Array ( [title] => Article 1 )

Je suppose donc qu'il n'y a pas de problème au niveau de l'assignation de la variable $_POST['title'] avec le fomulaire.

J'ai donc pensé que le problème venait de la connexion avec la BDD mais j'ai essayé d'afficher la table "post" avec "SELECT * FROM post" et la table s'est correctement affichée.

Le problème ne vient donc ni de la liaison entre la variable $_POST['title'] et le formuaire, ni ne la connexion à la base de données.

Je vais donc regarder le tutoriel que tu me conseilles (Lartak), j'espère y trouver un moyer de comprendre le problème.

Merci pour vos réponse,
Si vous avez une solution , je suis toujours preneur,
Bon après-mid.