2010-10-23 6 views
0

Je suppose que j'ai un peu de compréhension sur les fonctions et comment ils fonctionnent .. Idée est d'obtenir "groupe d'utilisateurs" de la base de données, mais je ne veux pas écrire le code quand je J'en ai besoin alors j'ai décidé de le mettre en fonction.fonctions PHP - ne fonctionne pas

function get_role() 
{ 
$user_id = $_SESSION['login_ok']; 
$res = mysql_query('SELECT role FROM users WHERE id = "'.$user_id.'"') or mysql_error(); 
$row = mysql_fetch_array($res); 
$role = $row['role']; 
} 

puis quand je besoin

get_role(); 

Ce que je dois est variable $ rôle que je vais utiliser si() pour accorder l'accès à lissée. Mais quand je le fais, cela montre que $ role est Undefined variable (quand je fais cela en vérifiant si).

Désolé pour les questions probablement stupides, mais qu'est-ce que je fais mal?

Répondre

4

Ajouter return $role; à la fin de votre fonction. Vous pouvez ensuite appeler $role = get_role(); où vous appelez la fonction.

La raison pour laquelle votre code ne fonctionne pas s'appelle variable scope. La variable de rôle $ que vous créez est uniquement disponible dans la fonction. En ajoutant le code ci-dessus, vous renvoyez la valeur $role de votre fonction et l'attribuez à une variable locale dans laquelle vous avez appelé la fonction.

Vous pouvez également déclarer $role comme global qui le rendra disponible partout, mais cela est considéré comme une très mauvaise pratique.

+0

Oui, cette chose de la portée ... Enfin, je l'ai eu. Merci! – arturs

2

Tu oublies de revenir de la fonction:

return $row['role']; 

Fonctions PHP (et beaucoup d'autres langues) démarrer leur propre champ - ce qui signifie que les variables déclarées à l'intérieur existent seulement à l'intérieur de la fonction, non à l'extérieur. La seule façon de communiquer avec le "monde extérieur" sans globals est via les arguments et les valeurs de retour.

Notez que vous n'avez plus besoin de $role = $row['role'];.

Afin d'obtenir votre valeur maintenant, utilisez:

$role = get_role(); 
+0

Merci pour la réponse! – arturs