Aide - Recherche - Membres - Calendrier
Version complète : recup de données d'une fonction récursive
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
stalak
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
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
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 biggrin.gif

fait un test que le code postal contient bien au moins un caractère avec de retirer
stalak
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
je me suis un peu avancé ... j'ai tjrs la même erreur...
Ldo
fait un copier/coller de l'erreur en question
stalak
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
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
[quote]ColoringCode[/url]"]SELECT devrait suffire non ?
stalak
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
Montre un peu le code autour de la ligne 50
Ldo
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
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
MAIS oui !

je viens de trouver pourquoi ça ne marche pas !

je pose le code corrigé dans quelques minutes wink.gif
stalak
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
voila la fonction qui marche
je l'ai testée wink.gif

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
c'etait juste le else en trop en fait loool smile.gif
stalak
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 !! biggrin.gif biggrin.gif
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.
Invision Power Board © 2001-2009 Invision Power Services, Inc.