Page 1 sur 1

Problème de Syntaxe SQL ou PHP ?

Posté : 13 déc. 2005, 14:28
par Zurg
Bonjour à tous !!

Oui je sais, ça fait au moins 3 jours que je n'ai pas posé de question...mais bon, que voulez-vous, vous me manquiez !! ;)

Alors, la question du jour :

J'utilise ce bout de code dont la fonction GetSQLValueString n'a pas été faite par moi, mais je l'utilise pour une mise à jour dans une table, comme ceci :
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . $_SERVER['QUERY_STRING'];
}

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) 
	{
	if ($diff==1)
		{
		$updateSQL = sprintf("UPDATE clients SET nom=%s, prenom=%s, nomEntr=%s, adresse=%s, ville=%s, cp=%s, email=%s, tel=%s, pass=%s, statut=%s, nomF-%s, prenomF-%s, nomEntrF-%s, adresseF-%s, villeF-%s, cpF-%s, telF-%s WHERE ID=%s",
                       GetSQLValueString($_POST['nom'], "text"),
                       GetSQLValueString($_POST['prenom'], "text"),
					   GetSQLValueString($_POST['nomEntr'], "text"),
                       GetSQLValueString($_POST['adresse'], "text"),
                       GetSQLValueString($_POST['ville'], "text"),
                       GetSQLValueString($_POST['cp'], "text"),
                       GetSQLValueString($_POST['email'], "text"),
                       GetSQLValueString($_POST['tel'], "text"),
                       GetSQLValueString($pass, "text"),
                       GetSQLValueString($_POST['statut'], "text"),
					   GetSQLValueString($_POST['nomF'], "text"),
					   GetSQLValueString($_POST['prenomF'], "text"),
					   GetSQLValueString($_POST['nomEntrF'], "text"),
					   GetSQLValueString($_POST['adresseF'], "text"),
					   GetSQLValueString($_POST['villeF'], "text"),
					   GetSQLValueString($_POST['cpF'], "text"),
					   GetSQLValueString($_POST['telF'], "text"),
					   GetSQLValueString($_POST['ID'], "int"));
		}
	else
		{
		$updateSQL = sprintf("UPDATE clients SET nom=%s, prenom=%s, nomEntr=%s, adresse=%s, ville=%s, cp=%s, email=%s, tel=%s, pass=%s, statut=%s WHERE ID=%s",
                       GetSQLValueString($_POST['nom'], "text"),
                       GetSQLValueString($_POST['prenom'], "text"),
					   GetSQLValueString($_POST['nomEntr'], "text"),
                       GetSQLValueString($_POST['adresse'], "text"),
                       GetSQLValueString($_POST['ville'], "text"),
                       GetSQLValueString($_POST['cp'], "text"),
                       GetSQLValueString($_POST['email'], "text"),
                       GetSQLValueString($_POST['tel'], "text"),
                       GetSQLValueString($pass, "text"),
                       GetSQLValueString($_POST['statut'], "text"),
                       GetSQLValueString($_POST['ID'], "int"));
		}
Je vous épargne le reste, affichage et compagnie...
Nous sommes dans la partie admin d'une boutique, partie gestion des clients.
La variable $diff sert à déterminer si le client dispose d'une adresse de livraison différente de son adresse de facturation.
A l'execution j'obitens ce message d'erreur :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-'paul', prenomF-'brioche', nomEntrF-NULL, adresseF-'3 rue des b
Ce qui est très troublant c'est que dans la 2e partie du test (else), le code s'exécute proprement, et la table est bien mise à jour, mais dans le premier cas, ($diff==1), j'ai le message d'erreur. Pourtant, je ne vois pas où se trouverait cette erreur.

Quelqu'un a-t-il une idée??

Merci d'avance...

Posté : 13 déc. 2005, 14:53
par pjl
as tu fait un echo de la requête générée pour voir ce que ca donne ?

Posté : 13 déc. 2005, 15:01
par Zurg
Effectivement, je m'étais trompé, à côté du nom des champs supplémentaires, j'avais mis un "-" au lieu d'un "=" et comme je suis en 1280 par 1024, c'est trop petit, j'avais pas vu...grrrr

Merci pour l'idée !! J'y pense pas souvent à ces tests, et pourtant...

@ la prochaine !!