8721 sujets

Développement web côté serveur, CMS

Bonjour,
Parcourant du code écrit par le logiciel Dweaver, je tombe régulièrement sur une trentaine de lignes se rapportant à un machin appelé GetSQLValueString. Est-ce que ce machin sert à quelque chose, et si oui, à quoi? (j'aime bien comprendre ce que je fais, des fois Smiley langue Smiley biggrin ).
Le machin:
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($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;
}
}
Smiley biggrin
Salut,

Il s'agit d'une fonction obsolète de DREAMWEAVER qui permettait de formater (protéger) une valeur avant de l'insérer dans une base de donnée.

Elle est dépassée de nos jours, et je te conseil de la suprimer et d'utiliser MySQLi ou PDO_MySQL.

<?php

// On vérifie si la fonction "GetSQLValueString" n'est pas déjà définie
if (!function_exists("GetSQLValueString")) {
	
	// Autrement on la défini
	/** 
	** 	$theValue			:	La donnée à formater
	** 	$theType			:	Le type de donnée à vérifier (int,date, etc)
	** 	$theDefinedValue		:	Si le $theType est "defined" et que la chaine n'est pas vide, ce sera la valeur
	**	$theNotDefinedValue	:	Si le $theType est "defined" et que la chaine est vide, ce sera la valeur par défaut
	**/
	function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = ""){
		
		// 1ère vérification de notre chaine
		
		// On vérifie si la version courante de PHP est bien en dessous de la 6
		if (PHP_VERSION < 6) {
			
			// Si "get_magic_quotes_gpc()" est activée
			// On supprime les antislashs de la chaine
			// Ou alors on retourne la valeur tel quel
			$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
			
		}
		
		// 2ème vérification de notre chaine
	
	   // Si la fonction "mysql_real_escape_string()" existe
	   // On protège la commande SQL de la présence de caractères spéciaux avec mysql_real_escape_string()
	   // autrement on la protège avec mysql_escape_string() (OBSOLETE depuis PHP 5.3.0)	   
 	   $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
	   
	   // On "formate" la chaine en fonction du type
	   switch ($theType) {
		   // Si c'est du text
		   case "text":
		   		// Si la chaine est vide un retour NULL, autrement c'est la chaine par défaut
		   		$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
		   break;
		   
		   // Si c'est un nombre entier
		   case "long":
		   case "int":
		   		// Si la chaine est vide un retour NULL, autrement on retourne la valeur numérique entière
		   		$theValue = ($theValue != "") ? intval($theValue) : "NULL";
		   break;
		   
		   // Si c'est un nombre a virgule 
		   case "double":
		   		// Si la chaine est vide un retour NULL, autrement on convertit en nombre en décimale
		   		$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
		   break;
		   
		   // Si c'est une date 
		   case "date":
		   		// Si la chaine est vide un retour NULL, autrement c'est la chaine par défaut entourée de guillemets 
		   		$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
		   break;
		   
		   // Si on souhaite une valeur définie
		   // On retoure $theDefinedValue si la donnée n'est pas vite autrement $theNotDefinedValue si elle est vide
		   case "defined":
		   $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
		   break;
	   }
	   
	   // On retourne notre valeur formatée et prête à être insérée en BD
	   return $theValue;
	   
	}
	
}
Merci beaucoup pour l'explication du fonctionnement.

Concernant l'emploi de MySQLi, je suis pour, mais ça veut dire que j'ai plus d'une centaine de pages de code à corriger dans un temps limité, et je doute que ce soit aussi simple que de faire un simple rechercher remplacer... Smiley ohwell Smiley bawling
Modifié par flottegauche (18 Jul 2013 - 10:55)
Ouep... j'ai du faire pareil Smiley biggrin

perso je suis parti sur PDO_MSqL
Modifié par Sp4tz (18 Jul 2013 - 11:30)
Comment écrire la ligne :
	  [#red] $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);[/#]


en MySQLi ?

J'ai essayé plusieurs écritures avec mysql_real_escape_string($connexion, $value) sans obtenir de résultat positif

Merci
lire
mysql[b]i_real_escape_string($connexion, $value)

au lieu de

mysql_real_escape_string($connexion, $value)