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

Fermé
arnaud - 12 mars 2007 à 17:09
 Ike - 13 avril 2008 à 00:44
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 ')'
A voir également:

2 réponses

blux Messages postés 26328 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 octobre 2024 3 300
12 mars 2007 à 17:12
Salut,

mets tes valeurs 'chaine' entre double-quotes
"
comme ça tu pourras en mettre des simples...
0
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")'
0
arnaud > arnaud
13 mars 2007 à 14:02
le plus horrible c'est que la requéte marche directement dans access
0
blux Messages postés 26328 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 octobre 2024 3 300 > arnaud
13 mars 2007 à 15:12
T'as essayé de doubler/tripler ta simple quote ?
0
arnaud > blux Messages postés 26328 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 4 octobre 2024
13 mars 2007 à 16:53
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...
0
arnaud > arnaud
14 mars 2007 à 14:16
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 ;)
0
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 ;-)
0