stalak
Apr 22 2005, 12:27 PM
Bonjour à tous,
je veux afficher les villes qui sont les plus proche d'un code postal encodé par l'utilisateur
je vérifie d'abord si le code existe, si non, je fais une recherche sur le code en lui retirant le dernier chiffre, si toujours pas bon , j'en enlève un autre etc
ex : 11945 n'existe pas, je cherche 1194* puis 119** etc...
[quote]
<?php
$req );
if([/color]);
function [/color]) {
[/color]);
[/color]);
if([/color]);
else return [/color];
}
[/color]
[/quote]
ça marche quand j'apelle la fonction mais quand celle-ci se "ré-apelle", j'ai une erreur à la récup des données à while($data = mysql_fetch_assoc($req)) {
qqn aurait-il une idée ?
merci
Ldo
Apr 22 2005, 12:33 PM
function proche($code) {
$c1 = substr($code,0,strlen($code)-1);
$req = mysql_query("SELECT * FROM part WHERE part.cp like '$c1%'");
if(mysql_num_rows($req)==0) $req = proche($c1);
else return $req;
}
tu fait un return sans récupérer le contenu ^^
Ldo
Apr 22 2005, 12:35 PM
tu devrais ajouter un test dans ta fonction
car a force de retirer, il ne va plus rien rester lol
imagine
59100
5910
591
59
5
au mieux false au pire error
fait un test que le code postal contient bien au moins un caractère avec de retirer
stalak
Apr 22 2005, 01:01 PM
warf kel faute à la con... merci en tout cas !!
oui, je vais vérifier que le champ contienne bien 4 chiffres (belgique). le but est qu'il rentre SON code postal...
stalak
Apr 22 2005, 01:09 PM
je me suis un peu avancé ... j'ai tjrs la même erreur...
Ldo
Apr 22 2005, 01:14 PM
fait un copier/coller de l'erreur en question
stalak
Apr 22 2005, 01:21 PM
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/vera/ptsVt.php on line 50
et à la ligne 50, j'ai (plus) que while($data = mysql_fetch_assoc($req)) {
j'ai fait des tests en isolant les requêtes et elles sont correctes
Ldo
Apr 22 2005, 01:31 PM
le nom du champ dans la base contient un . ?
part.cp ?
évite d'utiliser le . dans le nom des champs, utilise plutot le _
le . sert dans les jointures
quand tu fait la requete dans "SELECT * FROM part WHERE part.cp like '$c1%'" dans phpmyadmin, il sort une erreur ou pas ?
Antoine
Apr 22 2005, 01:35 PM
[quote]ColoringCode[/url]"]SELECT
devrait suffire non ?
stalak
Apr 22 2005, 01:42 PM
le . c'est nomTable.nomChamp...
je l'ai viré et ça change rien...
sinon, je vois pas cmt mettre une variable dans phpMyAdmin...
en testant SELECT * FROM part WHERE cp like '10%' ça passe sans pblm
d'ailleurs ca passe une première fois mais c'est quand ça ré-apelle que ça passe plus donc la requète en elle même doit être bonne , non ??
ex : 124* ca passe et me retourne des résultats mais si y'a pas de résultat la variable devient 12* et là ça foire...
Antoine
Apr 22 2005, 01:57 PM
Montre un peu le code autour de la ligne 50
Ldo
Apr 22 2005, 02:08 PM
pour moi au lieu de
| CODE |
<?php
$req = mysql_query("SELECT * FROM part WHERE part.cp = $cp");
if(mysql_num_rows($req)==0) $req = proche($cp);
function proche($code) {
$c1 = substr($code,0,strlen($code)-1);
$req = mysql_query("SELECT * FROM part WHERE part.cp like '$c1%'");
if(mysql_num_rows($req)==0) proche($c1);
else return $req;
}
?>
|
tu devrait juste avoir :
| CODE |
<?php
$req = proche($cp);
function proche($code) {
$req =mysql_query ("SELECT * FROM part WHERE part.cp like '$code%'");
if(mysql_num_rows($req) == 0) $req = proche(substr($code, 0, strlen($code)-1));
else return $req;
}
?>
|
tu t'evite la première requete en dehors de la fonction comme ça
stalak
Apr 22 2005, 02:09 PM
y'a rien d'axtraordinaire :
if($_POST['cp']) {
while($data = mysql_fetch_assoc($req)) {
echo $data['nom'];
j'essaye de faire des tests dans tout les sens mais franchement je capte pas... pourquoi ce $req prend pas la valeur ???? je sais pas mais peut être qu'à un moment y'a qqch qui réinitialise sa valeur ou qui interfère...
Ldo
Apr 22 2005, 02:10 PM
MAIS oui !
je viens de trouver pourquoi ça ne marche pas !
je pose le code corrigé dans quelques minutes
stalak
Apr 22 2005, 02:15 PM
cool, moi j'avais laissé tombé le récursif en faisant tout à la main
[quote]
<?php
$req );
if([/color]) {
[/color]);
[/color]);
if([/color]) {
[/color]);
[/color]);
}
}
[/color]
[/quote]
etc pour arriver à 1*
Ldo
Apr 22 2005, 02:35 PM
voila la fonction qui marche
je l'ai testée
| CODE |
function proche($code) {
if(empty($code)) return false;
$req = mysql_query("SELECT * FROM isse_keyword WHERE id like '$code%'");
if(mysql_num_rows($req) == 0) $req = proche(substr($code, 0, strlen($code)-1));
return $req;
}
$result = proche(59100);
if(!is_resource($result)) echo 'aucun resultat trouvé';
else {
while($row = mysql_fetch_assoc($result)) {
}
}
|
Ldo
Apr 22 2005, 02:37 PM
c'etait juste le else en trop en fait loool
stalak
Apr 22 2005, 02:47 PM
ahh quand on a la solution c'est vrai que c'est évident... ça s'exécute et tant que la condition est remplie $req change de valeur, plus de condition, on garde la valeur...
ceci dit la fonction retourne plusieurs valeurs et c'est la dernière qui est mémorisée ou elle ne retourne qu'une valeur ?
gd merci en tt cas et bon w-e !!
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez
cliquer ici.