Erreur de syntaxe pour un update de base access

Erreur de syntaxe pour un update de base access - PHP - Programmation

Marsh Posté le 28-08-2006 à 13:56:31    

Bonjour,
j'ai un fichier PHP tout bete de traitement de mail qui m'update normalement une base de données ACCESS.
mais j'ai un message d'erreur et je n'arrive pas a trouvber d'ou ça peux provenir !!
Quelqu'un peut-il voler a mon secours SVP ?
Merci d'avance...
 :hello:  

Code :
  1. <?php
  2. $etat = $_GET['Etat_de_fabrication'];
  3. $url = $_GET['url'];
  4. $utilisateur = $_GET['utilisateur'];
  5.   //$dest = "toto@titi.fr";
  6.   $sujet = "Suivi de production";
  7.   $exp = "";
  8.   $message = "Etat de la fabrication: " . $etat;
  9.  
  10.  
  11.   //$envoi = mail($dest, $sujet, $message, $exp);
  12.  
  13. //Sauvegarde dans la base de donnees dde_fab
  14. include ('../../include/connexion_base.php');
  15. $query = "UPDATE dde_fab SET etat=$etat WHERE url=$url ";
  16. $query .= " VALUES ($etat) ";
  17. $result = odbc_do ($cnx,$query);
  18. odbc_close( $cnx); 
  19. echo '<script language="javascript">
  20. alert("La modification de la Fabrication a été envoyée et sauvegardée" );
  21. window.history.back();
  22. </script>';
  23. ?>



Voici le message d'erreur que je reçois :

Warning: odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans la requête. La clause de la requête est incomplète., SQL state S1000 in SQLExecDirect in c:\program files\easyphp1-8\www\legris\formulaires\dde_fab\traitement.php on line 21

Reply

Marsh Posté le 28-08-2006 à 13:56:31   

Reply

Marsh Posté le 28-08-2006 à 14:07:09    

faut mettre "UPDATE dde_fab SET etat=\"$etat\" WHERE url=\"$url\""

Reply

Marsh Posté le 28-08-2006 à 14:14:57    

Merci rufo mais j'obtines ceci a présent :
 
Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression 'url=[../../fichiers/demandes_sce_outillage/Demande_Fabrication] VALUES (Réalisée)'., SQL state 37000 in SQLExecDirect in c:\traitement.php on line 22

Reply

Marsh Posté le 28-08-2006 à 14:48:51    

Juste une question, a quoi te sert la derniere partie de ta requete ? (Values($etat)) ????

Reply

Marsh Posté le 28-08-2006 à 14:51:00    

bien joué....à rien du coup.
je l'avais viré (copié-coller d'une autre page de code) mais j'ai dû faire un ctrl+Z de trop !
Néanmoins, mon pb n'est toujours pas réglé...

Reply

Marsh Posté le 28-08-2006 à 14:53:21    

Remplace ca :  

Citation :

$query = "UPDATE dde_fab SET etat=$etat WHERE url=$url ";


 
Par ca
 

Code :
  1. $query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like "'.$url.'"';


Reply

Marsh Posté le 28-08-2006 à 14:58:38    

merci jbourdellon
Nouveau msg d'erreur :
 
Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Le moteur de base de données ne peut pas trouver ''. Assurez-vous que le nom de paramètre ou d'alias est valide, qu'il ne comprend pas de caractère ou de ponctuation incorrect et qu'il n'est pas trop long., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\www\legris\formulaires\dde_fab\traitement.php on line 21


Message édité par snp le 28-08-2006 à 14:59:11
Reply

Marsh Posté le 28-08-2006 à 15:00:33    

est ce que tu es sur que tes variables $etat et $url sont complétées ?

Reply

Marsh Posté le 28-08-2006 à 15:13:24    

justement c ce que je regardais....
et bien non en fait, il m'en manque un bout !
Pour ma variable $url je devrais obtenir un truc du genre :
../../fichiers/demandes_sce_outillage/Demande de Fabrication tata du  28-08-2006.pdf
et là j'obtiens :
../../fichiers/demandes_sce_outillage/.'Demande_Fabrication'  
 
Par contre $etat est bon


Message édité par snp le 28-08-2006 à 15:16:31
Reply

Marsh Posté le 28-08-2006 à 15:19:02    

Citation :

../../fichiers/demandes_sce_outillage/Demande de Fabrication tata du  28-08-2006.pdf


 

Citation :

../../fichiers/demandes_sce_outillage/.'Demande_Fabrication


 
qu'il manque un bout je comprend bien mais que la chaine de caractere soit modifiée c'est plus bizarre  :??:  
 
et dans ta table qu'est ce que tu as comme url pour cette entrée ?

Reply

Marsh Posté le 28-08-2006 à 15:19:02   

Reply

Marsh Posté le 28-08-2006 à 15:20:25    

../../fichiers/demandes_sce_outillage/Demande de Fabrication tata du  28-08-2006.pdf

Reply

Marsh Posté le 28-08-2006 à 15:20:56    

je t'explique le principe du truc:

  • demande par formulaire

formulaire envoyé par mail de type HTML
dans ce mail HTML, un champs "hidden" name=url -> chemin du fichier PDF généré à partir du formulaire
Ce mail contient donc un nouveau formulaire HTML envoyé en GET au changement d'état.
Ensuite, update de la BD access en fonction du changement d'état


Message édité par snp le 28-08-2006 à 15:28:10
Reply

Marsh Posté le 28-08-2006 à 15:31:07    

Oui ca j'avais compris Affiche voir  :  
- les valuers de $etat et d' $url
- ta requete
- et la réponse de SELECT * from dde_fab where url like "Demande%"

Reply

Marsh Posté le 28-08-2006 à 15:36:20    

../../fichiers/demandes_sce_outillage/
En cours
UPDATE dde_fab SET etat="En cours" WHERE url="$url"  
SELECT * from dde_fab where url like "Demande%"

Reply

Marsh Posté le 28-08-2006 à 15:41:18    

Citation :

UPDATE dde_fab SET etat="En cours" WHERE url="$url"


 
Tu as bien mis ca  
 

Code :
  1. $query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like "'.$url.'"';


 
T'es sur ?  
 

Citation :

SELECT * from dde_fab where url like "Demande%"


 
C'est le resultat de la REQUETE que je voulais....

Reply

Marsh Posté le 28-08-2006 à 17:03:29    

quand je mets ce $query j'obtiens :
Warning: odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Le moteur de base de données ne peut pas trouver ''. Assurez-vous que le nom de paramètre ou d'alias est valide, qu'il ne comprend pas de caractère ou de ponctuation incorrect et qu'il n'est pas trop long., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\www\legris\formulaires\dde_fab\traitement.php on line 36
 
Par contre, maintenant j'ai bien la valeur de $url. ça c réglé. Mais les valeurs ne changent pas dans ma BD et g tj ce msg d'erreur

Reply

Marsh Posté le 29-08-2006 à 08:34:02    

up
 
Mon code correspond désormais à ça :

Code :
  1. <?php
  2. include ('../../include/connexion_base.php');
  3. include_once("../../outils/html_mime/html_mime_mail.inc" );
  4. $etat = $_GET['Etat_de_fabrication'];
  5. $url = $_GET['lien'];
  6. $utilisateur = $_GET['utilisateur'];
  7. //********************************************************************//   
  8. //*************************Envoi du chgt d'etat**************************//
  9. //********************************************************************//
  10. include '../../admin/variables.php';
  11. $result = odbc_exec($cnx, "SELECT nom,prenom FROM utilisateurs WHERE initiales='$utilisateur'" );
  12. $data = odbc_fetch_array($result);
  13. $nom = $data['nom'];
  14. $prenom = $data['prenom'];
  15. $full_name = $prenom.' '.$nom;
  16. $dest = $prenom.'.'.$nom.$domaine;
  17. function envoi_mail($name_from, $mail_from, $name_to, $mail_to)
  18.    {
  19. $etat = $_GET['Etat_de_fabrication'];
  20. $url = $_GET['lien'];
  21. $utilisateur = $_GET['utilisateur'];
  22.       //Contenu de notre email
  23.   $nom_fab = substr(strrchr($url, "_" ), 1, -4);
  24.   echo $nom_fab;
  25.       $corps = "La $nom_fab est " . $etat;
  26.      
  27.       $mon_mail = new html_mime_mail(102400, "iso-8859-1" );
  28.      
  29.      $mon_mail->add_body($corps);
  30.       //creation de l’email
  31.       $mon_mail->build_mail("base64",1);
  32.       $mon_mail->send($name_from, $mail_from, $name_to, $mail_to, "Suivi de production" );
  33.    }
  34. envoi_mail("Outillage", $dest_outillage, '', $dest);
  35.  
  36. //**********************************************************************//   
  37. //************Sauvegarde dans la base de donnees dde_fab********************//
  38. //**********************************************************************//
  39. include ('../../include/connexion_base.php');
  40. //$query = 'UPDATE dde_fab SET etat=$etat WHERE url=$url ';
  41. $query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like "'.$url.'"';
  42. $result = odbc_exec ($cnx,$query);
  43. odbc_close( $cnx); 
  44. echo '<script language="javascript">
  45. alert("Le changement d\'état de la fabrication a été envoyé et sauvegardé avec succès." );
  46. window.history.back();
  47. </script>';
  48. ?>


 
et mon message d'erreur est toujours le suivant :
Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Le moteur de base de données ne peut pas trouver ''. Assurez-vous que le nom de paramètre ou d'alias est valide, qu'il ne comprend pas de caractère ou de ponctuation incorrect et qu'il n'est pas trop long., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-8\....\traitement.php on line 66


Message édité par snp le 29-08-2006 à 09:27:46
Reply

Marsh Posté le 29-08-2006 à 09:42:57    

up up up

Reply

Marsh Posté le 29-08-2006 à 09:52:04    

Citation :

$query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like "'.$url.'"';


 
Essaye voir plutot ca  :  
 

Code :
  1. $query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like \''.$url.'\'';

Reply

Marsh Posté le 29-08-2006 à 09:57:10    

Salut jbourdellon
J'obtiens desormais un nouveau message d'erreur :
Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 1 attendu., SQL state 07001 in SQLExecDirect in traitement.php on line 66
 
et rien ne change ds ma BD

Reply

Marsh Posté le 29-08-2006 à 10:00:02    

Affiche voir ta requete

Reply

Marsh Posté le 29-08-2006 à 10:09:18    

j'arrive pas.
je fais ça  

Code :
  1. while ($row = odbc_fetch_array($result) )
  2. {
  3. $toto = $row[0];
  4. $tata = $row[1];
  5. echo "<tr>\n
  6. <td><a href=\"$tata\">$toto</a></td>\n
  7. <td>$tata</td>\n
  8. </tr>\n";
  9. }


 
et j'obtiens :
Warning: odbc_fetch_array(): supplied argument is not a valid ODBC result resource in traitement.php on line 71

Reply

Marsh Posté le 29-08-2006 à 10:10:37    

Comment ca t'arrives pas afficher ta requete,
 
juste en dessous de  
 
$query='xxxxx';
tu fais un
 
echo $query;
 
 
????


Message édité par jbourdellon le 29-08-2006 à 10:11:26
Reply

Marsh Posté le 29-08-2006 à 10:14:37    

Quand tu fais ca :

Citation :

while ($row = odbc_fetch_array($result) )


 
le result que tu passe en paramètre c'est quoi, c'est celui la ?  
 

Citation :

$query = 'UPDATE dde_fab SET etat="'.$etat.'" WHERE url like "'.$url.'"';
$result = odbc_exec ($cnx,$query);


 
Dans ce cas c'est normal un UPDATE ne retourne pas la ligne modifée mais juste le nombre de lignes modifiées...

Reply

Marsh Posté le 29-08-2006 à 10:15:51    

j'obtiens ça en utilisant or die :
UPDATE dde_fab SET etat="Réalisée" WHERE url like '../../fichiers/demandes_sce_outillage/Demande_Fabrication SNP ESSAI 29-08-2006.pdf'

Reply

Marsh Posté le 29-08-2006 à 10:17:40    

Citation :

$query = 'UPDATE dde_fab SET etat=\''.$etat.'\' WHERE url like \''.$url.'\'';


 
Modifie la aussi

Reply

Marsh Posté le 29-08-2006 à 10:26:39    

La requete :
UPDATE dde_fab SET etat='Réalisée' WHERE url like '../../fichiers/demandes_sce_outillage/Demande_Fabrication SNP ESSAI 29-08-2006.pdf'
 
Plus de msg d'erreur par contre la BD n'est pas updatée !


Message édité par snp le 29-08-2006 à 10:27:18
Reply

Marsh Posté le 29-08-2006 à 10:33:27    

Comment ca pas updatée ?

Reply

Marsh Posté le 29-08-2006 à 10:40:08    

dans ma BD le champ "etat" de Demande_Fabrication SNP ESSAI 29-08-2006.pdf' ne change pas.
Il devrait passer de "en attente" à "en cours"

Reply

Marsh Posté le 29-08-2006 à 10:50:42    

ben déjà elle pourra pas passer à 'en cours' vu que tu fais un SET etat='Réalisée' ...

Reply

Marsh Posté le 29-08-2006 à 10:53:36    

y'a trois état que le fabricant coche au fur et a mesure par boutons radio:
en attente (par défaut)
en cours
réalisé
quel qu'il soit ça ne se modifie pas ds la BD

Reply

Marsh Posté le 29-08-2006 à 11:32:52    

en spécifiant directement l'ID ça marche par contre

Reply

Marsh Posté le 29-08-2006 à 11:46:04    

bon ça marche mais c un peu usine à gaz :

Code :
  1. $query = 'UPDATE dde_fab SET etat=\''.$etat.'\', remarque=\''.$remarque.'\'
  2. WHERE date_dde=\''.$today.'\' AND projet=\''.$projet.'\' ';


 
pourquoi ça marche pas en faisant WHERE url LIKE \''.$url.'\''; ????


Message édité par snp le 29-08-2006 à 11:46:35
Reply

Marsh Posté le 29-08-2006 à 13:17:36    

dans tous les cas je viens de me rendre compte que mon mon champ url etait vidé quand je fais un UPDATE

Reply

Marsh Posté le 30-08-2006 à 10:16:33    

up

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed