Problème d'envoi de données vers BDD

ValentinSSS -  
 ValentinSSS -
Bonjour,

Je suis en train de créer un petit site sur lequel je pourrai poster des articles de blog. J'ai crée mon code, la page fonctionne bien, mais lorsque j'envoie par le formulaire les données (titre de l'article, description de l'article et corps de l'article) vers ma BDD, je vois bien que ma bdd crée une ligne supplémentaire à chaque fois mais les colonnes titre, description et article restent vides dans ma bdd (j'espère que vous comprenez)

Je fonctionne avec PDO

Voici un extrait de mon code :
if(isset($_POST['postarticle']))
  {
   $titre = htmlspecialchars($_POST['titre']);
   $descritpion = htmlspecialchars($_POST['description']);
   $article = htmlspecialchars($_POST['article']);
   
    if(!empty($_POST['titre']) AND !empty($_POST['description']) AND !empty($_POST['article']))
    {
     $titrelength = strlen($titre);
     if($titrelength <= 100)
     {
      $descriptionlength = strlen($description);
      if($descriptionlength <= 255)
      {
       $insertarticle = $bdd->prepare("INSERT INTO articles(titre, description, article) VALUES(titre, description, article) ");
       $insertarticle->execute(array($titre, $description, $article));
       $erreurarticle = "<p text-align=\"center\">Votre article a bien été posté.</p>";


Je suppose que le problème se trouve à cette ligne, mais impossible de savoir comment le résoudre :
$insertarticle = $bdd->prepare("INSERT INTO articles(titre, description, article) VALUES(titre, description, article) ");


Merci d'avance pour votre aide !


1 réponse

Romaji
 
Salut,
Le mieux c'est de tester directement la requête sur la base en SQL qui vous dira si l'erreur vient de là.

$insertarticle = $bdd->prepare("INSERT INTO articles(titre, description, article) VALUES(titre, description, article) ");


Sans allez plus loin on peut voir que ça vient pas de là toutefois, il est souvent utile de récupérer l'erreur de l'envoi d'une requête SQL pour la connaître(voir or die).

C'est simplement faux car vous ne vous êtes pas relu ou vous n'avez pas pensé à ce que vous écrivez:

INSERT INTO articles(titre, description, article) VALUES(titre, description, article) ");

INSERT INTO(met dans ) articles(ma table nommée 'articles') (titre,description, article)pour les champs qui s'appellent 'titre', 'description', 'article' les valeurs (titre, description, article) (???)

La 2nd partie doit indiquer les valeurs des données à insérer, contenues dans des variables PHP.
Or ce n'est pas le cas.

Pour indiquer une variable en PHP on préxcéde son nom du symbole '$'

Comme ceci:

$bdd->prepare("INSERT INTO articles(titre, description, article) VALUES($titre, $description, $article) ");


ça tombe bien parce que dans votre code vous avez justement ces variables que vous avez échappés les symboles HTML qui pourraient être ajoutés.
0
Romaji
 
http://sql.sh/cours/insert-into

Comme PHP ne sert quasiment qu'à transférer du SQL à la base(et isoler celui ci par sécurité) ou inversement(de la base dans la page) autant être au point sur SQL qui à l'avantage d'être très simple (dans les 500mots de vocabulaire, une 10aine utiles).
0
Romaji
 
J'ajouterais encore:
votre base est fausse puisque si vous l'aviez bien conçues il devrais être impossible d'insérer un article sans titre, sans contenu. Description ça peut être facultatif ou se référer à une catégorie donc obligatoire à vous de voir.

La base de données c'est le cœur de votre systèmes d'informations.
Si vous ne faites pas une analyse et une conception précise votre programmation: s'en trouvera compliquée, possédera des failles qui rendront le programme inopérant(des articles sans titre ni contenu ça fera pas un blog terrible, autant interdire ça) et une utilisation '(et programmation) qui sera rendue plus compliquée que nécessaire = risque d'erreur, risque de complexité à l'usage= perte de temps = travail à refaire et qui ne pourra pas évoluer.

Surtout que là pour la peine ça reviens à ajouter NOT NULL devant le champ à la création de la table(ou par l'interface si vous n'utilisez pas la console).
Ce sera une sécurité contre : des messages sans titre et sans contenu(sans avior à rajouter de programmation en PHP/javascript), une sécurité contre les erreurs du programme(une variable est nulle mais insérée quand même, ça vous dit quelle chose^^) autant qu'une simplicité de pas avoir à redéfinir en aval ce qui peut être fait à la source.

SQL SQL
PHP ne sers qu'à faire echo $ma_requete_SQL;

SQL c'est la gestion de toute la base de données(le contenu du site). Donc devinez où est la partie importante :p
0
ValentinSSS
 
Merci en fait j'ai réussi à régler ça
Je m'y connais pas encore assez en SQL et j'arrivais pas à voir où étais le problème, mais en fait
Je me suis rendu compte après que ce que j'avais rentré dans VALUES était stupide, j'ai remplacé par $titre, $description et $article et c'est bon

Merci de la réponse !
0