Probleme requete sql

Résolu/Fermé
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 - Modifié par jordane45 le 17/02/2015 à 01:26
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 - 19 févr. 2015 à 12:30
Bonjour,

Je suis face à un problème qui je pense doit venir de ma requête SQL. J'ai un formulaire d'ajout d'evenement avec un uplaod d'image.

l'upload fonctionne bien mais les informations vers ma table SQL ne s'ajoutent pas.

Voici la partie requete de ma page de traitement.

// création de l'evenement dans la base de données
   $insert = $connection->prepare('INSERT INTO calendrier VALUES(
   NULL, :image_calendrier, :titre_calendrier, :contenu_calendrier, :date_debut_calendrier, :date_fin_calendrier, :contact_calendrier, :url_calendrier)');
   try {
     // On envois la requète
     $success = $insert->execute(array(
       'image_calendrier'=> $_FILES['affiche_event']['name'],
       'titre_calendrier'=> $titre,
       'contenu_calendrier'=> $contenu,
       'date_debut_calendrier'=> $date_debut,
       'date_fin_calendrier'=> $date_fin,
       'contact_calendrier'=> $email,
       'url_calendrier'=> $url
     ));
      
     if( $success ) 
      {
       echo "Enregistrement réussi";
    }  
   
    } 
    catch( Exception $e )
     {
     echo 'Erreur de requète : ', $e->getMessage();
     }


Avez vous une idée de mon problème ?



Cordialement, Alban

4 réponses

Utilisateur anonyme
16 févr. 2015 à 23:10
J'avoue que je ne vois pas.
Le message "Enregistrement réussi" s'affiche-t-il ?
S'il n'y a pas d'affichage d'erreur ni de succès, provoque volontairement une erreur (genre faute de frappe : $success = $insert->execute(array( 'image_cal'=> ) pour t'assurer que l'erreur est bien affichée.
1
Utilisateur anonyme
17 févr. 2015 à 08:21
Es-tu sûr que rien n'est ajouté dans ta base, pas même des lignes vides ? Comme le conseille Jordane45, vérifie avec un print_r ($params) que tu as bien des données dans tes variables. Mais pas besoin d'echo $sql ni de modifier ton code pour inclure un lastInserId.
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
18 févr. 2015 à 08:42
Non il n'y a aucune ligne qui s'enregistre dans ma table, mais le fichier lui est bien uploader.

Pensez vous que le probleme peut venir de mon hébergeur( version php et mysql ) ?
0
Utilisateur anonyme > BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022
18 févr. 2015 à 10:23
Ça m'étonnerait que ça vienne de l'hébergeur.
Pourquoi ne réponds-tu pas à la question "Le message "Enregistrement réussi" s'affiche-t-il ?"
As-tu fait un print_r ($params) pour voir ce que tu es supposé enregistrer ?
As-tu fait l'essai de provoquer une erreur pour t'assurer que le try.. catch fonctionne bien ?.
Tu ne comprends pas l'intérêt de ce qu'on te demande ?
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
18 févr. 2015 à 12:42
Non le message " enregistrement réussi " ne s'affiche même pas je vais faire un essai du print_r($params) ce soir car là je suis sur iPhone et c'est pas super simple de faire du codage via mon application ftp...
0
Pour une raison que j'ignore, il semble bien que le try-catch ne capture pas une erreur dans la requête. Peux-tu modifier le test sur success en affichant une éventuelle erreur :
     if( $success )
      {
       echo "Enregistrement réussi";
    } else {
      echo 'echec <br>';
      print_r($insert->errorInfo());
    }
  }
  catch...


Si ça marche en local et pas en distant, ça peut être une histoire de vasse (majuscules/minuscules : ta table s'appelle-t-elle bien "calendrier" tout en minuscules ?

[Edit] après lecture de la doc et essais, PDO est silencieux par défaut sur les erreurs. Il faut ajouter
$connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
juste après la connexion pour voir à coup sûr les erreurs sur les requêtes. Comme je l'ai intégré dans ma fonction de connexion il y a plusieurs années, j'avais complètement oublié ça.
0
Utilisateur anonyme
14 févr. 2015 à 18:01
Bonjour

Il n'y a a priori pas d'erreur dans ta requête, bien que je n'aime pas les INSERT faits sans nommer explicitement les champs.

As-tu un message d'erreur ?
Es-tu sûr du format de test données, je pense aux dates en particulier ? Si tu utilises MySQL, c'es aaaa-mm-jj pour un type DATE.
As-tu ajouté un
var_dump($insert);
au début du try pour t'assurer que tu y passes bien, et que les données sont correctes ?
Et enfin, comment t'assures-tu que les données sont ajoutées ou non ?
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
14 févr. 2015 à 22:41
aucun message d'erreur. Petite precision, mon code fonctionne tres bien en local mais pas en distant sur le serveur.

j'ai fait un essai avec var_dump, aucun probleme avec les données. date au bon format...

je me connecte à PHPmyAdmin pour voir si les données sont ajoutées à ma table mais il n'y a rien. Uniquement le fichier de l'upload qui fonctionne.

C'est bizarre.
J'ajoute que ma version de PHP avec MAMP est la 5.5.14
et la version php de mon hebergeur (celeonet) est la version 5.4
0
Qu'est-ce que ça veut dire "Uniquement le fichier de l'upload qui fonctionne." ?
Peux-tu mettre une copie du var_dump ($insert ); mis au début du try, et une copie de la structure de la base (capture d'écran de phpmyadmin déposée sur cjoint.com, ou fichier sql d'exportation de la structure) ?
[edit] La structure de la table calendrier suffira.
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
16 févr. 2015 à 18:09
voila le resultat du var_dump($insert)

object(PDOStatement)#3 (1) { ["queryString"]=> string(182) "INSERT INTO calendrier VALUES( NULL, :image_calendrier, :titre_calendrier, :contenu_calendrier, :date_debut_calendrier, :date_fin_calendrier, :contact_calendrier, :url_calendrier)" }


voici la stucture de ma table SQL
https://www.cjoint.com/?3BqstHUgknE
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié par jordane45 le 17/02/2015 à 01:43
Bonjour,


Déjà.. je te conseille de recupérer les variables de type POST/GET/FILE... AVANT de les utiliser ..
Ensuite, fais des echo/print/var_dump des différentes variables pour voir si cela correspond à tes attentes...

Quelque chose du genre:

// création de l'evenement dans la base de données

        $sql = "INSERT INTO calendrier 
            VALUES( NULL, :image_calendrier, :titre_calendrier, :contenu_calendrier, :date_debut_calendrier, :date_fin_calendrier, :contact_calendrier, :url_calendrier)";
  
      $filename = isset($_FILES['affiche_event']['name'])? $_FILES['affiche_event']['name']:'';
       $params =array(
                 'image_calendrier'=>$filename,
                'titre_calendrier'=> $titre,
                'contenu_calendrier'=> $contenu,
                'date_debut_calendrier'=> $date_debut,
                'date_fin_calendrier'=> $date_fin,
                'contact_calendrier'=> $email,
                'url_calendrier'=> $url
                );
   try {
     // On envois la requète
     $insert->execute($params);
     $lastId = $insert->lastInsertId(); 
       if($lastId){
          echo "Enregistrement réussi <br> ID :".$lastId;
      }else{
          echo "<pre>";
          echo '-- REQUETE :<br> '.$sql;
          echo '-- PARAMS :<br>';
          print_r($params );
          echo "</pre>";
      }   
  } catch( Exception $e ){
      echo 'Erreur de requète : ', $e->getMessage();
  }




Cordialement,
Jordane
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
17 févr. 2015 à 08:19
Merci, je vais faire un essai ce soir.
C'est vraiment étrange quand même car j'ai le problème uniquement en distant (chez mon hébergeur) et quand je teste en local tout fonctionne très bien.
0
Bonjour Jordane

$lastId = $insert->lastInsertId();
if($lastId){

À quoi bon ce test ? S'il y a eu une erreur, elle a dû être capturée par le catch et de plus BanBan55 teste déjà le résultat du execute dans sa variable $success.

echo '-- REQUETE :<br> '.$sql;
$sql est une chaîne littérale sans aucune variable, qui n'a subi aucun traitement, il n'y a rien à apprendre de cet echo là.
0
BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022 45
17 févr. 2015 à 08:30
Je viens de faire un essai avec votre code, j'obtiens un erreur 500 en retour.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > BanBan55 Messages postés 361 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 31 octobre 2022
17 févr. 2015 à 08:44
Oupsss..j'ai oublié le PREPARE
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
17 févr. 2015 à 12:04
 $insert = $connection->prepare( $sql);

  // Et pour le Last ID
  $lastId = $connection->lastInsertId(); 

0