problème de fonction et paramètres

Mammouth du PHP | 702 Messages

27 juin 2012, 16:42

Bonjour à tous, je souhaite afficher des informations de ma base de donnée, pour cela je fais ma requête et fais mon while, jusque la il n'y a aucun soucis.

Le soucis qui m'oppose est que j'ai une colonne dans la table qui est un décimal enregistré entre 0 et 5 par palier de 0.5 points.

Voila j'ai donc tenté de créer la fonction suivante:
<?php function note($note) {
	$note=$donnees['note'];
	if($note=='0.00')
		{echo '<img src="images/rate/0.gif">' ;}
	if($note=='0.50')
		{echo '<img src="images/rate/05.gif">' ;}	
	if($note=='1.00')
		{echo '<img src="images/rate/1.gif">' ;}
	if($note=='1.50')
		{echo '<img src="images/rate/15.gif">' ;}
	if($note=='2.00')
		{echo '<img src="images/rate/2.gif">' ;}
	if($note=='2.50')
		{echo '<img src="images/rate/25.gif">' ;}
	if($note=='3.00')
		{echo '<img src="images/rate/3.gif">' ;}
	if($note=='3.5')
		{echo '<img src="images/rate/35.gif">' ;}
	if($note=='4.00')
		{echo '<img src="images/rate/4.gif">' ;}
	if($note=='4.5')
		{echo '<img src="images/rate/45.gif">' ;
	if($note=='5')
		{echo '<img src="images/rate/5.gif">' ;}
?>

le soucis c'est que si je le met dans le while, ça me dit can not redeclare note()
et c'est normal je ne peux pas redéclarer la fonction autant de fois que j'ai de redondance.

Mais alors comme j'ai une requête de type $donnees= mysql_fetch_assoc($result); alors ma note est de la forme $donnees['note']
mais quand je met cette variable la dans la fonction j'ai un message d'erreur d'une part car la variable n'est pas définie
au moment ou je l'utilise.

du coup je ne sais pas comment procéder.

Quelqu'un saurait il m'aider?

Par avance merci.

ViPHP
xTG
ViPHP | 7331 Messages

27 juin 2012, 16:45

Aille aille aille, pas tout compris aux fonctions semblerait. ^^
Voilà la démarche :
// déclaration de la fonction
function maFonction($monParam){
  echo $monParam;
}

// .. tout ce que l'on peut imaginer après tout cela, peu importe...

$sql = '....';
$res = mysql_query($sql);
while($data = mysql_fetch_assoc($res) ){
  // appel de la fonction avec notre paramètre
  maFonction($data['maColonne']);
}
Résultat : 1 déclaration, X appels à la fonction.

Mammouth du PHP | 702 Messages

27 juin 2012, 16:50

non ça je l'ai bien compris mais le soucis viens justement du fait que mon paramètre $note n'est pas reconnu et si je met $note=$donnees['note']; avant le while, alors il me dit que $donnees['note']; est indéfini, ce qui est normal.

ViPHP
ViPHP | 2577 Messages

27 juin 2012, 17:08

faire $note = $donnee['note'] au début de ta fonction n'as pas de sens.

Il faut appeler la fonction avec XXX($donnee['note']) comme paramètre
et dans function XXX($note) {...}, $note a la bonne valeur

Mammouth du PHP | 702 Messages

27 juin 2012, 17:08

en fait j'ai fais un select * et puis la quand je mets la déclaration de fonction rien ne s'affiche alors que quand j'exécute la requete dans phpmyadmin j'ai bien des résultats pour les même paramètres et que avec la fonction rien ne s'affiche ni ne s'exécute./

Mammouth du PHP | 2278 Messages

27 juin 2012, 17:11

Je suppose que tu as un code qui ressemble à ceci:
$resultat = mysql_query ($requete);
while ($ligne = mysql_fetch_array($resultat)
{
// c'est ici qu'il faut récupérer chaque note puis
$note = $ligne['note'];
note($note);
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Mammouth du PHP | 702 Messages

27 juin 2012, 17:13

comme ça précisément:
</fieldset>
<?php 
function note($note) {

	if($note=='0.00')
		{echo '<img src="images/rate/0.gif">' ;}
	if($note=='0.50')
		{echo '<img src="images/rate/05.gif">' ;}	
	if($note=='1.00')
		{echo '<img src="images/rate/1.gif">' ;}
	if($note=='1.50')
		{echo '<img src="images/rate/15.gif">' ;}
	if($note=='2.00')
		{echo '<img src="images/rate/2.gif">' ;}
	if($note=='2.50')
		{echo '<img src="images/rate/25.gif">' ;}
	if($note=='3.00')
		{echo '<img src="images/rate/3.gif">' ;}
	if($note=='3.5')
		{echo '<img src="images/rate/35.gif">' ;}
	if($note=='4.00')
		{echo '<img src="images/rate/4.gif">' ;}
	if($note=='4.5')
		{echo '<img src="images/rate/45.gif">' ;
	if($note=='5')
		{echo '<img src="images/rate/5.gif">' ;}
}
echo $_GET['categorie'];
if(isset($_GET['categorie']) AND $_GET['categorie']=="avocat")
{
	echo "<fieldset style='background-color:#FFF'><legend style='background-color:#FFF'><strong>Tiers S&eacute;lectionn&eacute; : ".strtoupper($_GET['categorie'])."</strong></legend>" ;

$sql="SELECT * FROM tiers WHERE `categorie`='avocat'";

$result= mysql_query($sql) or die(__LINE__.mysql_error().$sql); 
echo "<table width='100%' id='box-table-a' align='center'>";
echo "<thead><tr><th scope='col' width='5%'><strong>ID</strong></th><th scope='col' width='15%'><strong>TYPE</strong></th><th scope='col' width='15%'><strong>CODE LETTRE</strong></th><th scope='col' width='35%'><strong>TITRE</strong></th><th scope='col' width='30%'><strong>ACTIONS</strong></th></tr></thead><tbody>";


while($donnees = mysql_fetch_assoc($result)) {
?>
	<tr>
    	<td><?php echo strtoupper($donnees['id']) ; ?></td>
        <td><?php echo strtoupper($donnees['ref']) ; ?></td>
        <td><?php echo strtoupper($donnees['raison_sociale']) ; ?></td>
        <td><?php echo strtoupper($donnees['adresse'])."<br>".strtoupper($donnees['suite'])."<br>".strtoupper($donnees['cp'])." - ".strtoupper($donnees['ville']) ; ?></td>
        <td><?php echo note($donnees['note']) ; ?></td>
		<td><a href="index.php?p=visualiser-courrier&id=<?php echo $donnees['id'] ; ?>"><img src="images/search.png" width="24" height="24" border="0" /></a> <a href="index.php?p=editer-courrier&id=<?php echo $donnees['id'] ; ?>"><img src="images/list-edit.png" width="24" height="24" border="0" /></a> <a href="javascript:confirmDelete('delete-courrier.php?id=<?php echo $donnees['id'] ; ?>')"><img src="images/list-delete.png" width="24" height="24" border="0" /></a> <a href="index.php?p=nouveau-courrier-type"><img src="images/list2-add.png" width="24" height="24" border="0" /></a> <a href="duplicate-courrier.php?id=<?php echo $donnees['id'] ; ?>" ><img src="images/copy.png" width="24" height="24" border="0" /></a></td></tr>
<?php }
	}

	
echo "</fieldset></tbody></table>";
}
?>   

Mammouth du PHP | 2278 Messages

27 juin 2012, 18:08

Commence par modifier ta fonction (je me suis peut-être planté dans un copier/coller et teste ce truc complètement bêteau pour compendre où je veux en venir:
<?PHP 
function note($note) 
{
	if ($note=='0.00')
	{
	    echo '<img src="images/rate/0.gif">' ;
	}
	if($note=='0.50')
	{
		echo  '<img src="images/rate/05.gif">' ;
	}	
	if($note=='1.00')
	{
		echo   '<img src="images/rate/1.gif">' ;
	}
	if($note=='1.50')
	{
		echo '<img src="images/rate/15.gif">' ;
	}
	if($note=='2.00')
	{
		echo  '<img src="images/rate/2.gif">' ;
	}
	if($note=='2.50')
	{
		echo  '<img src="images/rate/25.gif">' ;
	}
	if($note=='3.00')
	{
		echo '<img src="images/rate/3.gif">' ;
	}
	if($note=='3.5')
	{
		echo  '<img src="images/rate/35.gif">' ;
	}
	if($note=='4.00')
	{
		echo  '<img src="images/rate/4.gif">' ;
	}
	if($note=='4.5')
	{
		echo  '<img src="images/rate/45.gif">';
	} // ajouté
	if($note=='5')
	{
		echo  '<img src="images/rate/5.gif">' ;
	}

}
note(1);
note(5);
echo (note(3));
?>
puis une version que je préfère:
<?PHP 
function note($note) 
{
	if ($note=='0.00')
	{
	$retour = '<img src="images/rate/0.gif">' ;
	}
	if($note=='0.50')
	{
		$retour = '<img src="images/rate/05.gif">' ;
	}	
	if($note=='1.00')
	{
		$retour =  '<img src="images/rate/1.gif">' ;
	}
	if($note=='1.50')
	{
		$retour =  '<img src="images/rate/15.gif">' ;
	}
	if($note=='2.00')
	{
		$retour =  '<img src="images/rate/2.gif">' ;
	}
	if($note=='2.50')
	{
		$retour =  '<img src="images/rate/25.gif">' ;
	}
	if($note=='3.00')
	{
		$retour =  '<img src="images/rate/3.gif">' ;
	}
	if($note=='3.5')
	{
		$retour =  '<img src="images/rate/35.gif">' ;
	}
	if($note=='4.00')
	{
		$retour =  '<img src="images/rate/4.gif">' ;
	}
	if($note=='4.5')
	{
		$retour =  '<img src="images/rate/45.gif">';
	} // ajouté
	if($note=='5')
	{
		$retour =  '<img src="images/rate/5.gif">' ;
	}
return $retour;
}
echo (note(3));
?>
quand tu l'appelles de ton while, ajoute:
$la_note = $donnees['note'];
suivi de
print "<br>note ==>$la_note<=="; // pour vérifier que tout va bien
et remplace
note($donnes['note'] par note($la_note);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

27 juin 2012, 18:23

A noter aussi que ta fonction n'a aucun retour, elle affiche d'elle même du contenu.
Donc echo note(); n'a aucun sens. ;)

Mammouth du PHP | 2278 Messages

27 juin 2012, 18:33

une variante:
<?PHP
function note($note) 
{
	
	$str_note = $note."";
	$str_note = str_replace(".", "", $str_note);
	$chemin = "images/rate/";
	$retour = "<img src = '>".$chemin.$str_note.".gif' />" ;
	return $retour;
}
for ($i =0; $i<=5; $i +=0.5)
{
	echo (note($i));
}
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 2577 Messages

28 juin 2012, 08:53

Il est possible que dans la fonction, tu ne passes dans aucun "if"

if ($note == '1.00') : pas sur qu'avec $notes = 1 ca passe.
<?PHP 
function note($note) 
{
     switch ($note) {
        case 0 :
            echo '<img src="images/rate/0.gif">' ;
            break:
        case 0.5 :
            echo  '<img src="images/rate/05.gif">' ;
            break;
        ...
        default :
                echo   'non trouvé "'.$note.'"' ;
   }
}
?>