Probleme requete sql
Résolu
BanBan55
Messages postés
401
Statut
Membre
-
BanBan55 Messages postés 401 Statut Membre -
BanBan55 Messages postés 401 Statut Membre -
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.
Avez vous une idée de mon problème ?
Cordialement, Alban
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
-
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.-
-
-
Ç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 ? -
-
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.
-
-
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é unvar_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 ?-
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
-
-
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.-
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
-
-
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-
-
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à. -
-
-
-