Rechercher : dans
Par :

[access] [php] probléme INSERT/UPDATE

Dernière réponse le 13 avr 2008 à 00:44:21 arnaud, le 12 mar 2007 à 17:09:57 
 Signaler ce message aux modérateurs

Bonjour tout le monde et sutout toi, là, qui posséde la solution

Probléme simple (comme toujours) :
EasyPHP sous windows 2000, pour insérer/modifier des données dans access (j'ai pas eu le choix).
Donc tout se passe bien sauf quand on insére des caractéres spéciaux pourtant j'utilise addslashes() et j'ai également essayé mysql_real_escape_string() mais le résultat est le même j'ai ce message d'erreur :'(

Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression ''Remarque c\'est pas possible ')'., SQL state 37000 in SQLExecDirect in c:\ma\www\create_job.php on line 220

Impossible d'éxecuter 'INSERT INTO dt(nom_client, num_dt, operateur, jour_traitement, jour_fin, nom_aff, nom_machine, index_ma_debut, index_ma_fin, tps_prevu, ecart_tps, tps_passe, quantite_info, ecart_index_ma, intervention, quantite_totale_traite, ecart_quantite, remarque) VALUES ('nom client', 'num_dt', 'divers', #2007-03-12 16:08:27#, #2007-03-12 16:57:13#, '2273', 'poste impression', 130, 1000, 15, 34, 49, 1000, 870, 'intervention',0 ,0 , 'Remarque c\'est pas possible ')'
Configuration: Windows 2000
Firefox 1.5.0.10
PHP 4.3.10 via easy php

Meilleures réponses pour « [access] [php] probléme INSERT/UPDATE » dans :
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...

1

blux, le 12 mar 2007 à 17:12:40

Salut,

mets tes valeurs 'chaine' entre double-quotes

"
comme ça tu pourras en mettre des simples...
A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

2

arnaud, le 13 mar 2007 à 13:59:41

Salut,

oui mais le probléme s'inverse, je ne peux plus mettre de double quotes...
De plus il semblerai que access zappe carremment les paramétres entre doubles quote à savoir les champs "intervention" et "remarque"
Y a pas un caractéres d'échappement spécifique à access ? Vu que l'antislash n'a pas l'air de faire son job...

ma requéte :

$insert = "INSERT INTO dt(";

$insert .= "nom_client, ";

$insert .= "num_dt, operateur, jour_traitement, jour_fin, nom_aff, nom_machine, index_ma_debut, index_ma_fin, tps_prevu, ecart_tps, tps_passe, quantite_info, ecart_index_ma, intervention, quantite_totale_traite, ecart_quantite, remarque";

$insert .= ") VALUES ('$nom_client', '$num_dt', ";

$insert .= "'$operateur', ";

$insert .= "#$jour_traitement#, #$jour_fin#, '$machine_affranchir', '$faconnage', $index_ma_debut, $index_ma_fin, $tps_prevu, $ecart_tps, $tps_passe, $quantite_info, $ecart_index_ma, \"".addslashes($intervention)."\",0 ,0 , \"".addslashes($remarque)."\")";



Le résultat :
Warning: odbc_exec(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de paramètres. 2 attendu., SQL state 07001 in SQLExecDirect in c:\ma\www\create_job.php on line 220

Impossible d'éxecuter 'INSERT INTO dt(nom_client, num_dt, operateur, jour_traitement, jour_fin, nom_aff, nom_machine, index_ma_debut, index_ma_fin, tps_prevu, ecart_tps, tps_passe, quantite_info, ecart_index_ma, intervention, quantite_totale_traite, ecart_quantite, remarque) VALUES ('nom client', 'num_dt', 'divers', #2007-03-12 16:08:27#, #2007-03-13 13:46:27#, '2273', 'poste impression', 130, 1000, 15, 1283, 1298, 1000, 870, "intervention",0 ,0 , "Remarque c\'est pas possible")'

Répondre à arnaud

3

arnaud, le 13 mar 2007 à 14:02:05

Le plus horrible c'est que la requéte marche directement dans access

Répondre à arnaud

4

blux, le 13 mar 2007 à 15:12:58

T'as essayé de doubler/tripler ta simple quote ?
A+ Blux

 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"

Répondre à blux

5

arnaud, le 13 mar 2007 à 16:53:48

Y a une fonction qui fait ça en PHP?


Je veux dire apparament le probléme c'est d'échapper les caractéres spéciaux sous access tel que : " ' ? etc...
D'habitude, quand j'ai le choix et que j'utilise MySQL, addslashes() permet d'éviter ce genre de probléme mais là ce put*** d'access lui il veux pas...

Répondre à arnaud

6

arnaud, le 14 mar 2007 à 14:16:07

Bon en fait le probléme est juste sur les simples quotes vu que dans mes requétes INSERT et UPDATE mes champs de type Texte et Mémo sont mis entre simples quote donc ma solution a été d'échapper les simples quotes avec une simple quote.

ma fonction en PHP est en open source ;) à améliorer si besoin est...

<?php
function escape_quote($string)
{
	$return_str = "";
	$longueur_str = strlen($string);
	for($i=0; $i<=$longueur_str; $i++)
	{
		//on parcours chaque caractére de la chaine de caractéres et on ajoute un quote devant le caractéres courant.
		$char = substr($string, $i, 1);
		if($char == "'")
		{
			$char .= "'";
		}
		$return_str .= $char;
	}
	return $return_str;
}
?>


Probléme résolu jusqu'à preuve du contraire...

Blux, merci BEAUCOUP de m'avoir mis sur la voie ;)

Répondre à arnaud

8

 Ike, le 13 avr 2008 à 00:44:21

Une autre solution plus courte...

Cette fonction permet également de contourner le problème de l'utilisation du caractère \

function escape_all($string){
$old = array("\\","'");
$new = array("\\\\","\\'");
$str_out = str_replace($old,$new,$string);
return $str_out;
}

A+

Répondre à Ike

7

Unknowed, le 20 mar 2008 à 21:01:26

Salut tout le monde..
j'ai crée ma page php et ma base de bonnée avec access..
mais lorsque j'insert ou je supprime un enregistrement, j'ai un message d'erreur :
Microsoft][Pilote ODBC Microsoft Access] L'opération doit utiliser une requête qui peut être mise à jour
merci d'avance ;-)

Répondre à Unknowed