0 votes

La fonction de rappel de la validation du formulaire de Codeigniter ne fonctionne pas

J'ai écrit une simple fonction de rappel qui ne fonctionne pas. Mes autres fonctions de rappel (qui sont dans le même fichier de bibliothèque) fonctionnent bien, donc je suppose que le problème vient de mon code.

Le paramètre passé dans la fonction de rappel prend la forme d'un morceau de PHP qui est évalué par eval() pour faire partie d'une instruction "if()" dans la fonction elle-même.

Voici ce qu'il y a 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 elle-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;
        }
    }
}

Quelqu'un a-t-il une idée de la raison pour laquelle ça ne fonctionne pas ?

Merci, Matt.

1voto

jimyi Points 13032

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

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

Et cela fonctionnera comme vous l'attendez :

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

1voto

Neeraj Kumar Points 211

Ne devriez-vous pas utiliser " callback_<function name> " ?

1voto

Timur Asaliev Points 1

La syntaxe correcte pour appeler les callbacks de validation de formulaire est d'utiliser "callback_".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X