Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/09/2006, 18h27   #1
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Par défaut [Cookies] Apostrophe - Copier-coller défectueux

Dans une application de cahier de texte que je viens de developper en Php4/MySql, j'offre la possibilité de créer un nouvel enregistrement en reprenant le contenu des champs d'un enregistrement précédent.

Tout cela fonctionne parfaitement SAUF erreur lorsqu'un champ de l'enregistrement initial possède un apostrophe.

Pas de problème si on double l'apostrophe ds le champ initial

Exemple
dans l'enregistrement initial nommé "activité", j'ai ce contenu avec apostrophe devant atome affiché par PhpMyadmin
Je copie en utisant ce code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$insertSQL = sprintf("INSERT INTO cdt_agenda ( prof_ID, classe_ID, matiere_ID,groupe,semaine,jour_pointe,heure,duree,heure_debut,
                          heure_fin,theme_activ,type_activ,a_faire,activite,rq,code_date)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
GetSQLValueString($_SESSION['ID_prof'], "int"),
GetSQLValueString($_POST['classe_ID'], "text"),
GetSQLValueString($_POST['matiere_ID'], "text"),
GetSQLValueString($_POST['groupe'], "text"),
GetSQLValueString($_POST['semaine'], "text"),   
GetSQLValueString($_POST['jour_pointe'], "text"),
GetSQLValueString($_POST['heure'], "int"),
GetSQLValueString($_POST['duree'], "text"),
GetSQLValueString($_POST['heure_debut'], "text"),
GetSQLValueString($_POST['heure_fin'], "text"),
GetSQLValueString($row_RsCopie['theme_activ'], "text"),
GetSQLValueString($row_RsCopie['type_activ'], "text"),
GetSQLValueString($row_RsCopie['a_faire'], "text"),
GetSQLValueString($row_RsCopie['activite'], "text"),
GetSQLValueString($row_RsCopie['rq'], "text"),
GetSQLValueString($_POST['code_date'], "text")
					   );
On note la presence de GetSQLValueString dont voici le code (ca doit etre par ici le probleme ...)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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;
}
De quel coté dois-je chercher la solution ? Merci à tous
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/09/2006, 18h50   #2
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Effectivement je pense que tu as un problème dans l'utilisation de addslashes().
Essaye de vérifier un peu les résultats retournés par ta fonction GetSQLValueString() à l'aide de echo.

Il me semble que lorsque tu récuperes des valeurs d'une requete SQL, elles n'ont jamais d'apostrophes rajoutés, quelque soit la valeur de magic_quotes_gpc (gpc étant l'abréviation de Get Post Cookie), or dans ton cas tu effectues quand même le traitement.
En gros, tu traites les données provenant de ta base de la même manière que celles provenant de $_POST je pense que l'erreur peut venir de là.
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 14h47   #3
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Effectivement probleme de quote.
La requete SQL envoyée pour l'insert est si je la simplifie

Code :
INSERT INTO cdt_agenda ( activite) VALUES ('L'atome')
Quelle est la facon la plus PROPRE de corriger mon code ?

Merci encore à tous
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 15h03   #4
Membre émérite
 
Avatar de guitou12
 
Guillaume
Inscription : juillet 2006
Messages : 813
Détails du profil
Informations personnelles :
Nom : Guillaume
Âge : 29

Informations forums :
Inscription : juillet 2006
Messages : 813
Points : 905
Points : 905
Envoyer un message via MSN à guitou12
Essaie avec ma fonction avant d'envoyer ta variable dans la requête

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/******************
   MY ADDDSLASHES 
*******************/
/** 
* Ajoute un \ à un simple ou double quote pour affichage.
* @param $var La variable qu'il faut analyser
* @return $var La variable avec les quotes échappées si il y en avait
*/
function my_addslashes($var)
{
	$tmp = str_replace("'","\'",$var);
	$final = str_replace('"','\"',$tmp);
	return $final;
}
__________________
Le . est la base de toute bonne concaténation, marre de voir des
echo "Mavar1 = $toto et Mavar2 = $titi";
ou pire echo 'Mavar1 = ',$toto,' et Mavar2 = ',$titi;
pratiquez plutôt le echo 'Mavar1 = '.$toto.' et Mavar2 = '.$titi;
guitou12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 16h47   #5
Membre régulier
 
Inscription : janvier 2004
Messages : 228
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 228
Points : 70
Points : 70
Merci pour la fonction... elle corrige le probleme.

Il est à noter que cette requete
Code :
INSERT INTO cdt_agenda ( activite) VALUES ('L'atome')
ne posait pas probleme sur tous les serveurs notamment en serveur local EasyPhp/Apache 1.8

Pour info, il y at-il un parametrage particulier du serveur pour la gestion des quotes ??

Merci
pierre50 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2006, 17h18   #6
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
oui, il y a plusieurs parametrages au niveau de php pour déterminer si le serveur ajoute ou non automatiquement des \ devant les quotes

tout est expliqué ici : http://fr.php.net/Fr/magicquotes
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h46.


 
 
 
 
Partenaires

Hébergement Web