2011-07-09 4 views
2

J'ai une fonction qui vérifie la validation du formulaire. S'il y a une erreur, il y a une variable appelée $ error. Comment puis-je faire en dehors de cette fonction et le reste de cette page indépendamment de l'intérieur d'une fonction ou non, sachez que $ error est défini?passer des variables en dehors des fonctions php

Je ne veux pas que cela se répercute sur une autre page. Je sais que c'est global mais puisque je lance l'erreur $ dans une fonction je suppose qu'elle n'est pas disponible dans d'autres fonctions.

Des idées?

+0

Vous voulez une variable accessible globalement qui n'est pas globale? –

+0

Vous pouvez rechercher une bibliothèque de formulaires qui traite de manière cohérente et accessible. – hakre

Répondre

2

Si vous souhaitez définir et utiliser une variable globale via le superglobal $GLOBALS array PHP Manual:

$GLOBALS['error'] = value; 

Ce tableau est disponible partout. Alors prends soin de toi.

+0

donc si la valeur est $ error, ce qui est une chaîne, alors $ _GLOBALS ['error'] est maintenant disponible partout même s'il a été créé dans une fonction? Une fois que j'ai mis $ _GLOBALS ['erreur'] dans ma fonction, il voit que c'est réglé mais quand j'appelle la même chose dans une autre fonction, il ne sait pas que c'est réglé. Et bien sûr j'appelle la fonction postérieure après la fonction initiale qui l'a définie. – michael

+0

C'est un global. c'est visible partout (à travers le superglobal). pourquoi ne l'essayez-vous pas? –

+0

SO typique. répondu à la question et a été downvoted. Oui, ce n'est pas une bonne pratique d'utiliser des globals, mais la question était de savoir comment accéder aux résultats de validation * partout * dans le code. –

2

je ferais cette façon
function validate($form, &$errors)
{
// some code that sets the erros variable
return false;
}

Depuis erros $ est passé par référence, la fonction peut définir sa valeur. Mais la variable elle-même reste dans la portée du code appelant.

0

Je préfère le retourner, et vérifie son compte() (je place habituellement des erreurs dans le tableau). Si c'est> 0 alors il y a des erreurs, sinon il n'y a pas.

+0

donc si vous le retournez vous rendez cette variable disponible à n'importe quelle page appelée la fonction originale en premier lieu? Le problème est la fonction qui vérifie la validation puis voit s'il y a des erreurs et si c'est le cas, il envoie ces erreurs à une autre fonction pour afficher correctement les messages d'erreur. Donc si je devais le retourner dans la dernière fonction, le retournerait-il à l'autre fonction ou à la page principale? – michael

+0

Je ne suis pas très clair sur votre question (trop) @. @. Cependant, c'est quelque chose comme (à l'intérieur de valider l'appelant, le pseudo-code): errors = validate (...); si count (erreurs)> 0 alors displayerrors (erreurs); – LeleDumbo

1

J'ai une classe de formulaire avec une variable statique à l'intérieur de celle-ci qui enregistre les erreurs. Par exemple:

<?php 
class form { 
    //this is our array to hold fields that have errored so we can apply an error class to the input fields 
    static public $errors = array(); 
    static public function setError($error) { 
    self::$errors[] = $error; 
    } 
    static public function parseErrors() { 
    $output .= '<ul>'; 
    foreach(self::$errors as $message) { 
     $output .= '<li>'.$message.'</li>'; 
    } 
    $output .= '</ul>'; 
    return $output; 
    } 
    //... other functions 
} 
?> 

ensuite enregistrer les erreurs à partir de vos fonctions de validation, vous pouvez faire quelque chose comme ceci:

<?php 
function myvalidate($value) { 
    // if this validation fails 
    form::setError('Field is required'); 
} 
?> 

Ensuite, il suffit d'appeler les parseErrors à cracher sur vos erreurs. S'il vous plaît noter que ce ne sont que des extraits. J'ai en fait une classe logger qui interagit avec la classe de formulaire, l'a modifiée pour la consolidation.

Je préfère faire des choses comme celle-ci que d'utiliser GLOBALS, cela peut devenir très compliqué en utilisant GLOBALS ou la SESSION d'ailleurs, ce qui est une autre option.

+0

De plus, vous pouvez passer le nom_de_champ à travers tout ceci et le booster de manière à ce que vous puissiez cibler des champs d'entrée pour ajouter des classes "d'erreur" au champ lorsque la validation échoue. – iLLin

Questions connexes