Progammation php

Bonjour,
J’ai un problème sur mon code php, je vous montre et me m’explique

require_once(‘connectionreva.php’);
$iad=$_POST[‘idmodif’];
$anreva = mysql_connect($hostname_anreva, $username_anreva,$password_anreva) or die(mysql_error());
@mysql_select_db($database_anreva,$anreva) or die(“Impossible de se connecter à la base anreva”);
$sqlmodif=" SELECT * FROM agent_reva WHERE aid=’$iad’ "
$result=mysql_query($sqlmodif,$anreva) or die(“erreur programmation sql”);

la requête ne me retourne rien du tout alors que $iad donne forcément un identifiant de la table agent_reva;
Pour tester j’ai donc fait un echo $sqlmodif et $iad cela me donne ça :
SELECT * FROM agent_reva WHERE aid='DN2
DN2
le problème c’est l’apostrophe qui apparait avant DN2 dans l’affichage de $sqlmodif, alors qu’il n’apparait pas quand je fais un affichage de $iad seul.

L’apostrophe dans $sqlmodif, entre “aid=” et “DN2” est normal : tu l’as mis dans ton code :

$sqlmodif=" SELECT * FROM agent_reva WHERE aid='$iad' "

(et d’ailleurs il le faut cet apostrophe dans ta requête SQL)
Ce qui est anormal c’est que $sqlmodif ne contienne pas un second apostrophe, à la fin de la chaîne :etonne2:

$sqlmodif=" SELECT * FROM agent_reva WHERE aid='". $iad ."' ";

ça marchera sans-doute mieux comme ça :wink:

InSiderZ > Les variables dans une chaine en double-quote sont interprétées (normalement)

Non, mais il peut profiter de la version d’InSiderZ pour ajouter un appel à la fonction intval histoire d’éviter les injections SQL

Ouaip, mais j’ai toujours trouvé bancale l’interprétation des variables au sein des chaines en double-quote. J’préfère toujours assurer en sortant de la chaîne, et comme dit Sans-Nom, ça permet aussi de rajouter une fonction anti injection (ou autre).

Totalement d’accord, dans ce cas là autant faire :

$sqlmodif = 'SELECT * FROM agent_reva WHERE aid=\'' . $iad . '\'';

(Par contre, il semble que $iad contienne des chaînes et non pas un entier)

un truc qui s’appelle “idmodif”, moi… j’appelle ça un entier :wink:

J’appelle cela un IDentifiant (numérique comme littéral) :ange:
Edité le 02/03/2009 à 19:18

FiGHt ! :paf: !

Sauf que dans 99% des cas on utilise des entiers, ensuite si tu n’es pas content, fait appel à mysql_real_escape_string & consorts, puisque le résultat sera le même…

Je suis tout à fait d’accord avec ce que tu dis :

  • les ID/PK des tables sont généralement des entiers
  • il faut utliser des fonctions telles que mysql_real_escape_string() et intval()

Sauf que là, l’exemple montrait clairement que le champ “aid” contenait une chaine :jap:

salut,

déjà je te conseille de débugger avec var_dump() et non echo() car le résultat de echo() est interpretté comme du html et ça peut fausser l’affichage

sinon quand tu dits que ça ne retourne rien, tu veux dire quoi exactement? ton $result est une ressource ou bien “FALSE”? (car je pense que tu le sais, mais mysql_query() ne renvoie pas une liste de résultats mais une ressource mysql hein!)

et en testant la même requête dans phpmyadmin ça donne quoi?

Oui, le mieux et des faire un
var_dump($result);

après ta requette, var_dump() te donne le type de variable que tu lui a passé en paramètre ainsi que ça valeur :wink: