[PHP] Fonction qui ne marche pas

Résolu
Sandriine Messages postés 1255 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
afin de raccourcir mon code, j'ai voulu faire une fonction afin d'éviter les répétitions.

Voici mon code php au début :

-------------------------------------------------------------------------

<?
$affi="";
$depp=$_GET["dep"];
$x=0;
$req = "SELECT * FROM ddass WHERE numero='".$depp."'";

if($depp=="liste") //il faut toutes les afficher
{
$req="SELECT * FROM ddass ORDER BY cp";
}


$res=mysql_query($req,$cnx); //exécution de la requete
$JeuEnr=mysql_fetch_assoc($res);

While ($JeuEnr)
{
$affi=$affi."<font face='arial' size='2'><b>";
$affi=$affi.$JeuEnr["adr1"]."</b><br>";
$x=$x+1;

If (!empty($JeuEnr["adr2"]))
{
$affi=$affi.$JeuEnr["adr2"]."<br>" ;
}
If (!empty($JeuEnr["adr3"]) )
{
$affi=$affi.$JeuEnr["adr3"]."<br>";
}
If (!empty($JeuEnr["adr4"]))
{
$affi=$affi.$JeuEnr["adr4"]."<br>";
}
If (!empty($JeuEnr["adr5"]))
{
$affi=$affi.$JeuEnr["adr5"]."<br>";
}
If (!empty($JeuEnr["adr6"] ))
{
$affi=$affi.$JeuEnr["adr6"]."<br>";
}
$affi=$affi.$JeuEnr["cp"]." ".$JeuEnr["ville"]."<br>";
$affi=$affi."Téléphone : ".$JeuEnr["tel"]."<br>";
$affi=$affi."Fax : ".$JeuEnr["fax"]."<br>";

$mail=$JeuEnr["mail"];

$affi=$affi."E-mail : <a href=mailto:'.$mail.'>".$mail."</a><br>";
$affi=$affi."</font><hr color='+chr(34)+'#F3BFB2'+chr(34)+' size='+chr(34)+'3'+chr(34)+'>";

$JeuEnr= mysql_fetch_assoc($res);//enregistrement suivant
}

--------------------------------------------------------------------------------------------------------------------

J'ai ensuite ajouté une fonction :

---------------------------------------------------------------------------------------------------------------------

<?
$affi="";
$depp=$_GET["dep"];
$x=0;
$req = "SELECT * FROM ddass WHERE numero='".$depp."'";

if($depp=="liste") //il faut toutes les afficher
{
$req="SELECT * FROM ddass ORDER BY cp";
}


function TesterSiNonVide($champ)
{
If (!empty($champ))
{
$affi=$affi.$champ."<br>" ;
}
}

$res=mysql_query($req,$cnx); //exécution de la requete
$JeuEnr=mysql_fetch_assoc($res);

While ($JeuEnr)
{
$affi=$affi."<font face='arial' size='2'><b>";
$affi=$affi.$JeuEnr["adr1"]."</b><br>";
$x=$x+1;

TesterSiNonVide($JeuEnr["adr2"]);
TesterSiNonVide($JeuEnr["adr3"]);
TesterSiNonVide($JeuEnr["adr4"]);
TesterSiNonVide($JeuEnr["adr5"]);
TesterSiNonVide($JeuEnr["adr6"]);


$affi=$affi.$JeuEnr["cp"]." ".$JeuEnr["ville"]."<br>";
$affi=$affi."Téléphone : ".$JeuEnr["tel"]."<br>";
$affi=$affi."Fax : ".$JeuEnr["fax"]."<br>";

$mail=$JeuEnr["mail"];

$affi=$affi."E-mail : <a href=mailto:'.$mail.'>".$mail."</a><br>";
$affi=$affi."</font><hr color='+chr(34)+'#F3BFB2'+chr(34)+' size='+chr(34)+'3'+chr(34)+'>";

$JeuEnr= mysql_fetch_assoc($res);//enregistrement suivant
}
if ($x=0 And $depp > "")
{
$affi= "non trouvé <hr color='+chr(34)+'#F3BFB2'+chr(34)+' size='+chr(34)+'3'+chr(34)+'>";
}
echo $affi; //affichage des coordonnées en fonction du département saisit

include('rech.inc');
?>

Ma fonction ne marche pas, puisque quand j'affiche la page, il ne me met plus les adresses... (adr2 à adr6)

A voir également:

2 réponses

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

Le problème, c'est que $affi n'existe pas au niveau de la fonction !

Tu as deux solutions pour ça :

Le plus simple, demander à la fonction de renvoyer un résultat :
function TesterSiNonVide($champ)
{
    $resultat = "";
    If (!empty($champ))
    {
        $resultat = $champ."<br>" ;
    }
    return $resultat;
} 
// [...]
// et modifier les appels :
$affi .= TesterSiNonVide($JeuEnr["adr2"]);
$affi .= TesterSiNonVide($JeuEnr["adr3"]);
$affi .= TesterSiNonVide($JeuEnr["adr4"]);
// [...]
Deuxième possibilité, moins recommandée mais plus simple à mettre en oeuvre, déclarer $affi comme globale au niveau de ta fonction :
function TesterSiNonVide($champ)
{
    global $affi;
    If (!empty($champ))
    {
        $affi=$affi.$champ."<br>" ;
    }
} 
1
Sandriine Messages postés 1255 Date d'inscription   Statut Membre Dernière intervention   283
 
Merci beaucoup !

Et j'aurais voulu faire une boucle for pour éviter de répeter les TesterSiNonVide

for ($i=1;$i<7;$i++)
{
$affi .= TesterSiNonVide($JeuEnr["adr.$i"]);
}


Mais ça ne marche pas...
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Exactement !
$var .= "truc"; remplace $var = $var."truc";
$var += 5; remplace $var = $var + 5;
$var -= 5; remplace $var = $var - 5;

Et dans le même genre d'idées,
$var ++; remplace $var = $var + 1;

Dans ce dernier cas, le remplacement est également avantageux en terme de temps de calcul, puisque c'est directement le registre processeur qui est utilisé pour l'incrémentation (1 seule opération, donc), au lieu d'avoir une affectation et une addition (2 opérations). Enfin ce n'est réellement utile que dans des programmes de très haut niveau, où la moindre microseconde gagnée est appréciable. Ceci dit, c'est toujours plus simple à écrire ^^

Xavier
1