2009-09-01 4 views
1

J'ai écrit une fonction de rappel simple qui ne fonctionne pas. Mes autres rappels (qui sont dans le même fichier de bibliothèque) fonctionnent bien, donc je suppose que le problème est lié à mon code.Fonction de rappel de validation de formulaire Codeigniter ne fonctionne pas

Le paramètre transmis dans la fonction de rappel prend la forme d'un fragment de PHP qui est eval() 'ed pour faire partie d'une instruction' if() 'dans la fonction elle-même.

Voici ce qui est dans le contrôleur:

$this->form_validation->set_rules('rating', 'Rating','required'); 
$condition = $this->input->post('rating') . " != 'Excellent'"; 
$this->form_validation->set_rules('details', 'Details', 'required_conditional[' . htmlentities($condition) .']'); 

Et voici la fonction de rappel lui-même:

function required_conditional($str, $condition) 
{ 
    if (eval(html_entity_decode($condition))) { 
     if ($str == '') { 
      $this->set_message('required_conditional', 'The %s field is required'); 
      return FALSE; 
     } 
     else { 
      return TRUE; 
     } 
    } 
} 

Toutes les idées pourquoi il ne toute personne qui travaille?

Merci, Matt

+0

esprit pour poster quelques exemples de l'état de $? –

+0

Voir la deuxième ligne du premier extrait de code. – user166508

Répondre

2

C'est parce que eval déclarations, non évalue les expressions. Cela vous donnera une erreur d'analyse:

$test = "1 > 0"; 
if (eval($test)) { echo "echo!"; } 

Et cela fonctionnera comme prévu à:

$test = "return 1 > 0;"; 
if (eval($test)) { echo "echo!"; } 
+0

OK, donc dans le cas de mon exemple ci-dessus, je devrais changer $ condition à: return $ this-> input-> post ('rating'). "! = 'Excellent'"; ?? J'avais créé un exemple simplifié ici. Ce que j'ai vraiment besoin de faire est: $ condition = "('". $ This-> input-> post (' exterior_condition_rating '). "'! = '-1') && ('". $ This- > input-> post ('exterior_condition_rating'). "'! =' 5 - Excellent ')"; Alors, comment est-ce que je pourrais faire fonctionner ça? – user166508

+0

Désolé, je n'avais pas réalisé que les sauts de ligne seraient supprimés. J'espère que c'est encore lisible! – user166508

+0

'$ condition =" return ('". $ This-> entrée-> post (' exterior_condition_rating ')."'! = '-1') && ('". $ This-> entrée-> post (' exterior_condition_rating ''! = '5 - Excellent'); '' – jimyi

2

ne devrait pas vous utiliser « callback_<function name> »?

+0

J'ai étendu la classe de validation et inclus la fonction là-dedans, donc il n'y a pas besoin d'utiliser le préfixe callback_. – user166508

2

Yep la syntaxe correcte pour appeler des fonctions de validation de formulaire à utiliser « callback_ »

Questions connexes