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

arnaud -  
 Ike -
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 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

mets tes valeurs 'chaine' entre double-quotes
"
comme ça tu pourras en mettre des simples...
0
arnaud
 
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
 
le plus horrible c'est que la requéte marche directement dans access
0
blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention   3 359 > arnaud
 
T'as essayé de doubler/tripler ta simple quote ?
0
arnaud > blux Messages postés 27121 Date d'inscription   Statut Modérateur Dernière intervention  
 
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
 
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
Unknowed
 
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