[Résolu] Une simple requete SQL ...

Eléphanteau du PHP | 16 Messages

06 mai 2010, 18:03

Bien le bonsoir messieurs dames

Je viens vers vous car je me retrouve confronté à un simple script d'envoi de données via un formulaire, et qui ne marche pas... Frustrant. D'autant plus qu'un formulaire d'envoi de fichier marche très bien à côté.. Enfin bref.

Voila le code :

Code : Tout sélectionner

<?php $titre = $_POST['titre']; $date = $_POST['date']; $contenu = $_POST['contenu']; if (empty($_POST['titre']) ){ echo "Erreur : le champ titre est vide."; }else if (empty($_POST['date']) ){ echo "Erreur : le champ date est vide."; }else if (empty($_POST['contenu']) ){ echo "Erreur : le champ contenu est vide.";} $connexion = mysql_connect("localhost", "xx", "xx"); $selection_bd = mysql_select_db("xxx", $connexion); $requete="INSERT INTO ajout_article('ajout_article','titre','date','contenu') VALUES('', '$titre','$date','$contenu')"; $affiche= mysql_query($requete,$connexion); mysql_close($connexion); ?>
Je sais que mon formulaire marche très bien car j'ai fais des print_r($_POST['...']) qui m'ont retournés ce que j'avais tapé dans le form. Et pourtant, je n'ai aucun retour dans la bdd. Le problème doit donc venir de la requete sql.

Des suggestions ?
Modifié en dernier par <Osef> le 21 mai 2010, 08:55, modifié 1 fois.

Eléphant du PHP | 428 Messages

06 mai 2010, 18:11

Essaye un peu de forcer une valeur pour "ajout_article".
Il se peut que le champ ajout_article soit mis en : "not null" dans phpmyadmin.
$requete="INSERT INTO ajout_article('ajout_article','titre','date','contenu') VALUES('TEST', '$titre','$date','$contenu')";
$affiche= mysql_query($requete,$connexion);
A+ ;)

Eléphanteau du PHP | 16 Messages

07 mai 2010, 09:28

      $requete="INSERT INTO ajout_article('ajout_article','titre','date','contenu') VALUES('TEST','$titre','$date','$contenu')";
      $affiche= mysql_query($requete,$connexion);
J'ai mis 'TEST', 'NULL', '', avec les ". ." , rien n'y fait, je n'ai toujours rien dans phpmyadmin.

Dans la page qui doit afficher le contenu de cette table :
$connexion = mysql_connect("localhost", "xx", "xx");
         $selection_bd = mysql_select_db("xxx", $connexion);              

         $sql_titre = "SELECT titre FROM ajout_article";
         $titre = mysql_query("$sql_titre");
         $sql_date = "SELECT date FROM ajout_article";
         $date = mysql_query("$sql_date");
         $sql_contenu = "SELECT contenu FROM ajout_article";
         $contenu = mysql_query("$sql_contenu");
         
         
         echo "<h3>$titre</h3>";
         echo "<h4>$date</h4>";
         echo "$contenu";
Voila ce que j'obtiens :
Resource id #4
Resource id #5
Resource id #6

Eléphant du PHP | 428 Messages

07 mai 2010, 11:52

Pour moi, il y a erreur ici :
$sql_titre = "SELECT titre FROM ajout_article";
$titre = mysql_query("$sql_titre");
$sql_date = "SELECT date FROM ajout_article";
$date = mysql_query("$sql_date");
$sql_contenu = "SELECT contenu FROM ajout_article";
$contenu = mysql_query("$sql_contenu");

Personnellement, je ferais :
// Pour sélectionner un enregistrement en particulier, il faut rajouter la clause WHERE : Exemple => ... WHERE id='$id'
// Sinon, il faut faire une boucle while pour afficher tous les enregistrements.
$sql_requete = "SELECT titre, date, contenu FROM ajout_article";
$sql_resultat = mysql_query($sql_requete) or die(mysql_error());

$row = mysql_fetch_array ($sql_resultat);

// Dans le cas où tu devrais utiliser une boucle WHILE 
// WHILE ($row = mysql_fetch_array ($sql_resultat)) { .... }

$titre = $row['titre'];
$date = $row['date'];
$contenu = $row['contenu'];

echo '<h3>'.$titre.'</h3>';
echo '<h4>'.$date.'</h4>';
echo $contenu;
A+ ;)

Eléphanteau du PHP | 16 Messages

07 mai 2010, 14:35

Merci pour vos réponses.
      
          $id = mysql_insert_id();              
          
          $sql_requete = "SELECT titre, date, contenu FROM ajout_article WHERE ajout_article='$id'";
          $sql_resultat = mysql_query($sql_requete) or die(mysql_error($connexion));
          
          $row = mysql_fetch_array($sql_resultat);
          
          
          $titre = $row['titre'];
          $date = $row['date'];
          $contenu = $row['contenu'];
Rien ne s'affiche ..

@visualight : dans votre exemple avec WHERE id ="..." , id correspond à la colonne incrémentée de la table non ?

Mammouth du PHP | 804 Messages

07 mai 2010, 14:48

bonjour,

moi j'aurai plutôt mis ".$id." ou \"$id\" sinon ta variable va etre concidérer comme chaine, à moin que je me trompe

YaunBeug
Invité n'ayant pas de compte PHPfrance

07 mai 2010, 14:56

pourquoi tu ne testerai pas tes requete dans l onglet sql de php my admin? Tu verrais mieux ce qui se passe.

t aura juste a mettre
INSERT INTO ajout_article('titre','date','contenu') VALUES("montitre","17/01/46","youpiiiiii")

apres tu regarde si tes tables se remplissent

Eléphanteau du PHP | 16 Messages

07 mai 2010, 15:27

Excusez moi, j'ai oublié de vous signaler que l'ajout dans la base fonctionne maintenant ^^ Il ne reste plus que l'affichage sur une autre page là..

J'ai essayé de créer carrement la requête SQL via les options d'affichage de PHPmyAdmin (Oui je suis feignant et j'assume :D Mais je suis une bille en SQL..) Je ne sais même pas si c'est correct de balancer ça dans le code. Enfin ça donne ça :
SELECT * FROM `ajout_article` ORDER BY `ajout_article` DESC LIMIT 0 , 1
Mais c'etait tros beau pour que ça marche ..

Eléphant du PHP | 428 Messages

07 mai 2010, 15:55

@visualight : dans votre exemple avec WHERE id ="..." , id correspond à la colonne incrémentée de la table non ?
Tout à fait ;)
Rien ne s'affiche ..
C'est normal si tu fais une requête avec une clause WHERE avec un ID qui n'existe pas.
Il faut d'abord que tu chope ton ID des éléments à sélectionner pour la requête.

(Créer un champ ID en int(5) autoincrement = 99999 id possibles (on prend les devants)

Une question concernant les ID : Peux tu me décrire le principe détaillé de fonctionnement de ton code.
Il faut que je saches comment tu travailles avec les ID pour t'orienter au mieux dans ma réponse.
Sois le plus clair et précis possible.

Merci ;)

ViPHP
AB
ViPHP | 5818 Messages

07 mai 2010, 17:30

J'ai essayé de créer carrement la requête SQL via les options d'affichage de PHPmyAdmin (Oui je suis feignant et j'assume :D Mais je suis une bille en SQL..) Je ne sais même pas si c'est correct de balancer ça dans le code. Enfin ça donne ça :
SELECT * FROM `ajout_article` ORDER BY `ajout_article` DESC LIMIT 0 , 1
Mais c'etait tros beau pour que ça marche ..
ça marche pas même en l'exécutant dans PHPmyAdmin ?

Eléphanteau du PHP | 16 Messages

10 mai 2010, 10:54

Bon rectification, après des tests, je constate que l'affichage du contenu sur la page web fonctionne, j'ai inséré du contenu directement sur PHPmyAdmin, mais l'envoi depuis mon formulaire ne fonctionne toujours pas.
Je vous donne l'intégralité de celui ci :
ajout_formulaire.php :
   <form method="post" action="envoi_bdd_articles.php">
 
     Titre de l'article : </br><input type="text" name="titre">  </br>
     Date : </br><input type="text" name="date"> </br></br>
     <textarea name="contenu" rows="15" cols="80"></textarea>
      </br></br></br>
     <input type="submit" value="Envoyer"> &nbsp;          
     <input type="reset" value="Recommencer"> 
  
  </form>
envoi_bdd_articles.php :
 <body>
  
  <h3>TRANSFERT DU CONTENU</h3>
      <?php
      
         $titre = $_POST['titre'];
         $date = $_POST['date']; 
         $contenu = $_POST['contenu'];
         
         print_r($titre);
         print_r($date);
         print_r($contenu);
         
          if (empty($_POST['titre']) ){
          echo "Erreur : le champ titre est vide.";
             }else if (empty($_POST['date']) ){
                echo "Erreur : le champ date est vide.";
                  }else if (empty($_POST['contenu']) ){
                      echo "Erreur : le champ contenu est vide.";}
                      
      $connexion = mysql_connect("localhost", "dauvergnej", "dauvergnej");
      $selection_bd = mysql_select_db("web_laboisseraie", $connexion);
                      
                      
      $requete="INSERT INTO `web_laboisseraie`.`ajout_article` (`ajout_article`, `titre`, `date`, `contenu`) VALUES (NULL,'$titre','$date','$contenu')";
      $affiche= mysql_query($requete,$connexion);
      
mysql_close($connexion);    
      ?>
      <a href ="accueil.php">Visionnez la page d'accueil du site</a> &nbsp;&nbsp;<a href="ajout_article.php">Retour au formulaire</a>
  </body>
:?
Modifié en dernier par <Osef> le 14 mai 2010, 08:53, modifié 1 fois.

Eléphanteau du PHP | 16 Messages

12 mai 2010, 16:20

Personne pour répondre ?

L'upload des données vers envoi_bdd_articles.php fonctionne car les print_r() retournent les valeurs, et l'affichage des données de la bdd vers le site fonctionne car une insertion depuis PHPmyAdmin et le tout s'affiche. Le problème doit donc venir de mes requêtes SQL ...

Voila la table en question, je pense que c'est suffisant pour expliquer le fonctionnement de la table :
http://www.casimages.com/img.php?i=1005 ... 016729.png

ViPHP
AB
ViPHP | 5818 Messages

12 mai 2010, 17:19

La coloration syntaxique aurait dû t'alerter, la fin de ton formulaire n'est pas correct. Ce n'est pas &nbsp mais &nbsp;

Pour le reste ton lien fait planter firefox...

Eléphanteau du PHP | 16 Messages

14 mai 2010, 08:56

J'ai corrigé le &nbsp; mais cela ne corrige pas mon problème, car le formulaire en lui même fonctionne (je recois les valeurs envoyées avec les print_r().
J'ai édité mon dernier post avec tout le code que j'ai actuellement pour ne pas alourdir le forum
Etrange que le lien ne fonctionne pas chez vous... J'ai changé d'hebergeur, au cas où :
http://ups.imagup.com/10/1273867434.PNG

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

14 mai 2010, 09:51

Ajoute un mysql_error() après l'exécution de ta requête, tu sauras immédiatement s'il y a un problème :)

Le problème est probablement du à ton champ "date". En effet, "date" est un mot clé réservé du langage sql, et il ne devrait donc pas être utilisé comme nom de colonne...

Tu peux aussi essayer de remplacer le NULL que tu essayes d'insérer comme valeur de ajout_article par une chaine vide (''). Ta colonne ne pouvant pas être null, il se peut que ta version de mysql ne l'autorise pas malgré l'auto-increment qui va remplacer sa valeur :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...