IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Fonction récursive


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut Fonction récursive
    Bonjour à tous,

    Je fais appel à vous pour la première fois directement car je sèche vraiment et que je dois trouver une solution très rapidement.

    Voici mon pb :

    Je réalise une application flash avec une passerelle PHP pour accéder à ma BDD nommé AMFPHP. J'ai donc une classe PHP qui fonctionne trés bien avec plusieurs fonctions dedans sans pb.

    J'ai dû rajouter une fonction récursive en plus qui a pour but de générer un login et un pwd automatiquement et d'en faire un nouveau dans le cas où il existe déjà. Le pb est que dès que la récursivité s'enclenche ($this->generateLog($log2) ça me retourne null.

    Voici le code qui va plus vous parler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function generateLogPwd($nom, $prenom, $date) {
    		$log=strtolower(substr($prenom, 0, 1).$nom);
    		$pwd=strtolower($prenom.$date);
    		$logGenerate=$this->generateLog($log);
    		$tab=array(login=>$logGenerate, pwd=>$pwd);
    		return $tab;
    	}
    	function generateLog($log2) {
    		static $nb=0;
    		$sql=mysql_query('SELECT login FROM member WHERE login="'.$log2.'"');
    		if(!mysql_num_rows($sql)){
    			return $log2;
    		}else{
    			$nb2++;
    			$log2=$log2.$nb2;
    			$this->generateLog($log2);
    		}
    	}
    Merci d'avance pour vos réponses.

    Stéphane.

  2. #2
    Membre chevronné Avatar de binouzzz19
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    385
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 385
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function generateLog($log2) {
    		static $nb=0;
    		$sql=mysql_query('SELECT login FROM member WHERE login="'.$log2.'"');
    		if(!mysql_num_rows($sql)){
    			return $log2;
    		}else{
    			$nb2++;
    			$log2=$log2.$nb2;
    			$this->generateLog($log2);
    		}
    	}
    Est-ce normal que tu aies $nb2 au lieu de $nb ?

    Cordialement.

  3. #3
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Bonjour,


    Tout d'abord il vaudrait mieux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql=mysql_query('SELECT COUNT(login) as nb FROM member WHERE login="'.$log2.'"');
    $result = mysql_fetch_array($sql);
    	if($result['nb'] == 0){
    Ensuite, tu incrémente $nb2 dans ton else alors que c'est $nb que tu as déclaré plus haut. :/

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Tout d'abord merci pour vos réponses.

    J'ai fait les modifs selon vos dires mais rien de mieux.

    Je pense que le pb vient plutôt de la définition de la récursivité dans le else de generateLog.

    Voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function generateLogPwd($nom, $prenom, $date) {
    		$date=str_replace("/", "", $date);
    		$log=strtolower(substr($prenom, 0, 1).$nom);
    		$pwd=strtolower($prenom.$date);
    		$logGenerate=$this->generateLog($log);
    		$tab=array(login=>$logGenerate, pwd=>$pwd);
    		return $tab;
    	}
    	function generateLog($log2) {
    		static $nb2=0;
    		$sql=mysql_query('SELECT COUNT(login) as nb FROM member WHERE login="'.$log2.'"');
    		$result = mysql_fetch_array($sql);
    		if($result['nb'] == 0){
    			return $log2;
    		}else{
    			$nb2++;
    			$log2=$log2.$nb2;
    			$this->generateLog($log2);
    		}
    	}

  5. #5
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Salut,
    Il faudrait que tu nous donne le résultat de la fonction pour mieux déterminer le pb...
    Mais essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    function generateLogPwd($nom, $prenom, $date) {
    		$date=str_replace("/", "", $date);
    		$log=strtolower(substr($prenom, 0, 1).$nom);
     		$pwd=strtolower($prenom.$date);
    		$logGenerate=$this->generateLog($log);
    		$tab=array(login=>$logGenerate, pwd=>$pwd);
    		return $tab;
    	}
    function generateLog($log2,$nb2=0) {
     
    		$sql=mysql_query('SELECT COUNT(login) as nb FROM member WHERE login="'.$log2.'"');
    		//$result = mysql_fetch_array($sql);
    		$result=mysql_count_rows($sql);
                    if($result != 0){
    			return $log2;
    		}else{
    			$nb2++;
    			$log2=$log2.$nb2;
    			$this->generateLog($log2, $nb2);
    		}
    	}
    A voir, car sans avoir le resultat c pas simple...

    Guigo

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Merci pour la réponse.

    J'ai mis le résultat que cela me renvoyé.

    Lorsque dans la fonction récursive je passe dans le if il n'y a pas de pb mais lorsque je passe dans le else (que le login existe déjà) là ça me renvoie null au lieu de rajouter le chiffre $nb au bout du login déjà existant et de réessayer voir si il existe également.

    N.B. : mysql_count_rows n'existe pas !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 8
    Par défaut
    Même résultat avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?
    class Tuteur {
    function Tuteur(){
    		include ("../includes/config.php");
    		$logAll="";
    	}
    function generateLog($log2,$nb2=0) {
    		$sql=mysql_query('SELECT COUNT(login) as nb FROM member WHERE login="'.$log2.'"');
    		$result = mysql_fetch_array($sql);
    		if($result['nb'] == 0){
    			$logAll=$log2;
    			return $logAll; //retourne (null) si il est passé une fois dans le else avant, et renvoi bien $log2 si il n'y passe pas
    		}else{
    			$nb2++;
    			$log2=$log2.$nb2;
    			$logAll=$this->generateLog($log2, $nb2);
    		}
    	}
    }

Discussions similaires

  1. fonction récursive: erreur
    Par calla29 dans le forum Débuter
    Réponses: 3
    Dernier message: 16/05/2006, 11h51
  2. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27
  3. [XSLT] fonction récursive à N niveaux
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/03/2006, 12h30
  4. Fonction récursive renvoi sur page d'erreur
    Par peck dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 10h08
  5. Problème de fonction récursive avec un TcxDBTreeList
    Par isachat666 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 05/12/2005, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo