2010-12-02 7 views
0

J'ai index.php et function.php.PHP: retour tableau?

En index.php j'ai inclus function.php

Dans im index.php appelant login("Bla","123"); qui existe dans function.php

En index.php J'ai un if (!empty($err)){ foreach(..) echo $err ... }

login() devrait renvoyer un tableau appelé $ err, (avec return $ err;) s'il y a des erreurs, et puis il devrait se répercuter dans le foreach dans index.php ..

Mais de toute façon je ne peux pas le faire fonctionner . Tu ne peux pas le faire comme ça? Je ne reçois rien en retour.

J'ai la connexion():

$err = array(); 
    $err[] = "Something went wrong"; 
     return $err; 
     exit(); 

Quel est le problème ici? Ou toute autre solution pour le faire?

+2

Pourquoi 'exit()' 'après return'? Pouvez-vous nous montrer toute la fonction «login»? – Skilldrick

+0

À quoi ressemble le code dans index.php qui définit $ err? –

+0

PS il serait vraiment utile de fournir du code que nous pouvons réellement utiliser pour reproduire le problème. – Hamish

Répondre

3

return return renvoie la valeur de $err. Il ne rend pas la variable $err globalement disponible.

Essayez d'utiliser:

$err = login('Bla', '123'); 
+0

Nice, j'ai oublié ça, merci – Karem

1

remplacer le exit() avec justereturn;

function login() 
{ 
    //Blah 
    exit(); 
} 
login(); 

echo 'You shall never see this.'; 

c'est ce que vous devez faire:

$errors = array(); 
function login($user,$pass) 
{ 
    global $errors; 
    if(empty($user) || empty($pass)) 
    { 
     $errors[] = "username/Password invalid"; 
    } 

    //More Checks 

    //at the end. 
    if(count($errors) == 0) /*no errors*/ 
    { 
     return true; 
    } 
} 

puis dans votre index.php

if(!login("user","pass")) 
{ 
    foreach($errors as $error) 
    { 
     echo $error . "<br />"; 
    } 
    exit(); 
} 

//Successful login 
+0

J'ai déjà créé une réponse similaire, mais je me suis rendu compte que 'exit()' n'est jamais exécuté car Karem a utilisé le mot-clé 'return' (qui termine la fonction).Je pense que Hamish a raison. – rhino

+0

oui, je voulais dire remplacer la sortie avec juste 'retour; – RobertPitt

0

Je recommande la lecture sur la portée des variables: http://www.php.net/manual/en/language.variables.scope.php

Sur la base de ce que vous avez dit que vous essayez de retourner une variable d'un champ d'application et l'utiliser dans un autre champ en utilisant le même nom, mais sans le définir explicitement.

function login() { 
    $var = 123; 
    return $var; 
} 

login(); // $var won't exist. 
$abc = login(); // To login() it is called $var 
// but here $abc has the same value as $var inside of login() because it was returned. 
// not because it has the same name. 
0

J'ai déjà ajouté une réponse mais je pense que cela ajoute une autre façon de décrire la POO.

Créer un fichier appelé login.class.php et créer une classe comme si

class Login 
{ 
    var $username,$password; 

    public function __cosntruct($username,$password) 
    { 
     $this->username = $username; 
     $this->password = $password; 
    } 

    //Checks 
    public function isValidUsername() 
    { 
     return strlen($this->username) > 8; 
    } 

    //..Etc 
} 

vous pouvez faire:

$Login = new Login("Username","Password"); 

if(!$Login->isValidUsername()) 
{ 
    echo 'username invalid'; 
}