preg_ replace preg_split et substr : la difference?

Eléphanteau du PHP | 23 Messages

12 oct. 2010, 00:10

bjr,
Voilà j'ai une variable $ville qui a pour valeur 1235400 essai et je veux récupérer essai.
Après une journée de torture je parviens au résultat avec substr. Avec preg_ replace ou preg_split le echo $ville; donne bien essai mais la requête ne fonctionne pas???

$pos = strpos(".$ville.", " ");
if ($pos!=0) {$pos = $ville=substr ($ville, $pos);}

//marche pas pourtant $ville ok!!!!!!!!!!
//$lettres = preg_split("##", $ville);
//$ville = explode("",$lettres);

//marche pas pourtant $ville ok!!!!!!!!!!
//$ville=preg_replace("/[0-9]/", '',$ville); 

$req=mysql_query("select * from article where ville='$ville'") or die (mysql_error());

$res=mysql_fetch_array($req);

$id = $res['id'];
j'aimerai comprendre #-o
merci d'avance

Eléphant du PHP | 288 Messages

12 oct. 2010, 03:38

Salut déjà pour recupérer essai ici, j'aurais fais
$tableau = explode(" ",$ville);
echo $tableau[1];  //affichera  essai si ville contenait "1235400 essai"
Pour la requête, y a t-il une erreur ?

Eléphanteau du PHP | 23 Messages

12 oct. 2010, 15:47

merci damaskinos de t'être penché sur le problème...
Je ne pense pas qu'il y ait une erreur dans la requête car comme je le disais elle fonctionne bien avec :
$pos = strpos(".$ville.", " ");
if ($pos!=0) {$pos = $ville=substr ($ville, $pos);}
mais même si ça marche c'est pas très propre mais comme on dit en informatique "si tu passes pas par la porte passes par la fenêtre" :lol:

depuis j'ai trouvé une autre solution mais là encore un "gremlins" s'est glissé dans le bordel :wink:
-en local je teste mon site avec easyphp 5.3.1.0
-sur le web je suis chez free (php5)
Pour que ça tourne en local il faut que je glisse un addslashes de plus avant la requête : c'est incompréhensible
$ville=addslashes($ville);
est-ce que cela peut venir d'une différence entre free et easyphp ?
merci d'avance pour vos contributions...

Eléphanteau du PHP | 23 Messages

12 oct. 2010, 15:51

ps : je ne mets pas ma nouvelle solution sur le forum car elle concerne le traitement depuis la source googlemap.js...

Eléphant du PHP | 288 Messages

12 oct. 2010, 17:00

Salut,

Il te faut vérifier si tes magic quote sont activés. Regarde dans ton php.ini. Ou dans ton script si tu veux être propre et parer le problème peu importe sa valeur dans le php.ini, tu fais comme ça.

if (get_magic_quotes_gpc()) {
    $variable = stripslashes($_POST['nom_input']);
}
else {
    $variable = stripslashes($_POST['nom_input']);
}

Jette un coup d'oeil ici à la doc http://php.net/manual/fr/function.get-m ... es-gpc.php

Ensuite je te conseillerais de toujours nettoyer tes variables qui proviennent d'un formulaire avant de les mettre dans une requête.
Dans ton cas utilise
mysql_real_escape_string
Je te laisse lire la doc ici : http://php.net/manual/fr/function.mysql ... string.php

Bonne continuation.

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2010, 19:33

Salut,

Il te faut vérifier si tes magic quote sont activés. Regarde dans ton php.ini. Ou dans ton script si tu veux être propre et parer le problème peu importe sa valeur dans le php.ini, tu fais comme ça.

if (get_magic_quotes_gpc()) {
    $variable = stripslashes($_POST['nom_input']);
}
else {
    $variable = stripslashes($_POST['nom_input']);
}

Jette un coup d'oeil ici à la doc http://php.net/manual/fr/function.get-m ... es-gpc.php
Bah ce n'est pas ce qu'il faut faire car dans ton code tu appliques stripslashes à tous les coups :?

Mieux vaut une petite fonction
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

$var1 = Verif_magicquotes($_POST['var1']);

$var2 = Verif_magicquotes($_POST['var2']);
//...
Ensuite je te conseillerais de toujours nettoyer tes variables qui proviennent d'un formulaire avant de les mettre dans une requête.
Dans ton cas utilise
mysql_real_escape_string
Je te laisse lire la doc ici : http://php.net/manual/fr/function.mysql ... string.php

Bonne continuation.
Plus exactement, si tu lis la doc il ne s'agit pas de "nettoyer" les variables mais de protéger les caractères spéciaux de la chaine :)

ViPHP
AB
ViPHP | 5818 Messages

12 oct. 2010, 19:44

Ah oui donc en appliquant les deux fonctions ci-dessus cela donne typiquement :

function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
} 

$ville = Verif_magicquotes($_POST['ville']);

$query = "SELECT * FROM article WHERE ville='".mysql_real_escape_string($ville)."'";

$req = mysql_query($query) or die (mysql_error());
Modifié en dernier par AB le 13 oct. 2010, 00:31, modifié 1 fois.

Eléphant du PHP | 288 Messages

12 oct. 2010, 19:57

Oh désoler,

Copier / coller. voilà ce que je voulais écrire :
if (get_magic_quotes_gpc()) {
    $variable = stripslashes($_POST['nom_input']);
}
else {
    $variable = $_POST['nom_input'];
}
Pour la deuxième partie je voulais écrire " escaper " mais c'est de l'anglicisme je crois. Et je ne trouvais pas le mot.

Voilà et merci pour les corrections et précision.

Eléphant du PHP | 288 Messages

12 oct. 2010, 20:03

$query = "SELECT * FROM article WHERE ville='".mysql_real_escape_string."'";
Devient plus tôt
$query = "SELECT * FROM article WHERE ville='".mysql_real_escape_string($ville)."'";
:wink:

ViPHP
AB
ViPHP | 5818 Messages

13 oct. 2010, 00:32

Corrigé :wink:

Eléphanteau du PHP | 23 Messages

13 oct. 2010, 17:47

merci merci je vais tester tout ça =D>
AB vos sites : travail impressionnant
damaskinos : je suis allé voir le site et j'ai compris ce que tu vends mais ce doit être normal
tchô
et merci encore

Eléphanteau du PHP | 23 Messages

13 oct. 2010, 17:48

damaskinos : je suis allé voir le site et j'ai PAS compris ce que tu vends mais ce doit être normal