[PHP] Fonction qui ne marche pas

Résolu/Fermé
Sandriine Messages postés 1255 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 - 5 mars 2008 à 13:43
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 5 mars 2008 à 14:19
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 mars 2008 à 14:02
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 samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 283
5 mars 2008 à 14:10
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 jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
5 mars 2008 à 14:19
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