[RESOLU] Fonction qui boucler en elle même

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Fonction qui boucler en elle même

Re: Fonction qui boucler en elle même

par Denis75018 » 10 févr. 2015, 12:24

Merci infiniment Ryle !!! :D

C'était simplement cela...
Pffff ! Quel idiot je fais des fois. :(

Merci beaucoup.
Bonne journée à vous tous
Denis.

Re: Fonction qui boucler en elle même

par Ryle » 10 févr. 2015, 12:18

Salutations !

Je n'ai pas regardé le détail de ta fonction récursive, mais à la fin de celle-ci, tu te contentes de l'appeler sans traiter la valeur qu'elle retourne :)
                else 
                {
                // Si ce nouveau produit (+1) existe on le repasse dans la moulinette.  
                $Newid_prod=$ersProd3['id_prod'];
                RechSiAjoute($Newid_prod, $id_pers) ;
                }
Il te manque à minima un " return RechSiAjoute($Newid_prod, $id_pers) ; " pour retourner le résultat de l'appel récursif de ta fonction ;)

Fonction qui boucler en elle même

par Denis75018 » 10 févr. 2015, 12:03

Bonjour A vous tous,
J'aimerais vous soumettre mon soucis pour que vous puissiez m'aider à le résoudre.

Je dois vérifier si un "produit" est déjà présent dans une table (Table1).
Si non : Je l'affiche dans un "select form".
Si oui je cherche un produit de même spécificités dont le rang est supérieur (+1)
Si ce nouveau produit dont le "rang" est "+1" :
- n'existe pas je revois "0" (zéro) pour ne rien afficher dans le "Select form" (Pas de produit en "rang" supérieur)
- existe je le repasse à la moulinette pour refaire des tests.

Il renvois bien dans la moulinette, et si pas présent dans la "Table1" il "return" l'identifiant mais "l'appel à la fonction" ne le prend pas en compte.

Je vous met ce que j'ai fait.
Mon appel à la fonction :
$idProd=RechSiAjoute($id_prod, $id_pers);

		if ($idProd!=0) 
		{					
		
		// On affiche le résultat dans un "SELECT"
		
		}
		else {
			// on fait rien !
			}
Ma fonction :
function RechSiAjoute($id_prod, $id_pers)
{

// on regarde si "id_prod" est déjà présent dans "TABLE1" : 
$sProd  = "SELECT * FROM $Table1 WHERE (id_prod='".$id_prod."') AND (id_pers='".$id_pers."') AND (provient='cure')";
$rsProd = mysql_query($sProd)or die ('ERREUR  : '.$sProd.' '.mysql_error());
$ersProd = mysql_fetch_array($rsProd); 

		
	if ($ersProd[0] == 0)
	{ 
	//  Si NON PRESENT : on retourne l'id_prod pour l'afficher
	return $id_prod; 
	}
	else 
	{
	//  Si PRESENT : on recherche un nouveau "ID Produit" 

		$sProd2  = "SELECT * FROM $Table2 WHERE (id_prod='".$id_prod."') ";
		$rsProd2 = mysql_query($sProd2)or die ('ERREUR  : '.$sProd2.' '.mysql_error());
		$ersProd2 = mysql_fetch_array($rsProd2); 
		
		// Avec des specificités précises 
		$rang=$ersProd2['rang'];
		$specs=$ersProd2['specs'];
		
		// Et dont le "RANG " est suppérieur (+1)
		$rang2=$rang+1;
		
		// Et on recherche dans la "Table2" si ce nouveau Produit (+1) existe : 
		$sProd3  = "SELECT * FROM $Table2 WHERE (specs='".$specs."') AND (rang='".$rang2."') ";
		$rsProd3 = mysql_query($sProd3)or die ('ERREUR  : '.$sProd3.' '.mysql_error());
		$ersProd3 = mysql_fetch_array($rsProd3);
		
		if ($ersProd3[0] == 0)
		{ 
		//Si il n'existe pas on renvois '0' (zero) pour ne rien afficher
		return '0';		
		}
		else 
		{
		// Si ce nouveau produit (+1) existe on le repasse dans la moulinette.	
		$Newid_prod=$ersProd3['id_prod'];
		RechSiAjoute($Newid_prod, $id_pers) ;
		}
	}
}
Auriez vous une idée ?
Merci de votre aide.
Denis.