if else dans function

Eléphant du PHP | 59 Messages

19 avr. 2010, 16:34

Bonjour,

je débute en php. j'ai ecrit ce petit bout de code qui fonctionne très bien:

Code : Tout sélectionner

<?php if ( $mySobi->id == 0) { $database = & JFactory::getDBO(); $user =& JFactory::getUser(); $sql = "SELECT cb_city FROM #__comprofiler WHERE id= {$user->id} LIMIT 1"; $database->setQuery( $sql ); echo $database->loadResult(); } else { $database = & JFactory::getDBO(); $user =& JFactory::getUser(); $sql = "SELECT data_txt FROM #__sobiagenda2_fields_data WHERE itemid= {$mySobi->id} AND fieldid= 1 LIMIT 1"; $database->setQuery( $sql ); echo $database->loadResult(); } ?>
mais je souhaiterais l'inclure dans une function comme ceci, ce qui me permettra après d'inclure des variables entre ()

Code : Tout sélectionner

<?php function Load_field() { if ( $mySobi->id == 0) { $database = & JFactory::getDBO(); $user =& JFactory::getUser(); $sql = "SELECT cb_city FROM #__comprofiler WHERE id= {$user->id} LIMIT 1"; $database->setQuery( $sql ); echo $database->loadResult(); } else { $database = & JFactory::getDBO(); $user =& JFactory::getUser(); $sql = "SELECT data_txt FROM #__sobiagenda2_fields_data WHERE itemid= {$mySobi->id} AND fieldid= 1 LIMIT 1"; $database->setQuery( $sql ); echo $database->loadResult(); }} ?>
Le problème c'est que le code m'affiche toujours le même résultat celui de la condition if. Il ne prend plus en comte le else.

Pourquoi?


Merci

Eléphant du PHP | 86 Messages

19 avr. 2010, 16:46

Parce que tu dois passer ($mySobi->id) à ta fonction et effectuer le test sur la variable récupérée.
($mySobi->id == 0) est toujours vrai puisque la variable n'existe pas dans la fonction.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

19 avr. 2010, 16:47

Bonjour,

Ta variable $mySobi n'est plus accessible quand tu la passes dans une fonction si elle n'est pas déclarée en global ou passée en paramètre.
La page suivante de la doc sur la portées des variables en PHP devrait t'aider à résoudre ton problème :
http://php.net/manual/fr/language.variables.scope.php

##edit : grillé par Skikit, bien joué ;)
Quand tout le reste a échoué, lisez le mode d'emploi...