Bonjour,

Je viens vers vous car je suis bloqué avec mon formulaire, je m'explique :

J'ai créer un formulaire de recherche avec un champ texte, plusieurs checkbox et deux select.

Donc la personne remplie les informations qu'il souhaite et envoie le formulaire, les résultats retournés sont correct le problème c'est que le formulaire revient entièrement vide, le champ, les chexbox cochées et les selects choisient se remettre par défaut soit le champ texte vide, les checkbox décochées et les selects revenu à la valeur null.

Le formulaire passe par la méthode GET.

J'ai chercher un peu partout mais sans résultat.
Je n'ai pas trop envie de mettre sur chaque input des conditions par rapport au valeur à mon GET. Je pense que sous cakephp il existe une méthode toute simple pour pré-remplir les infos déjà données.

J'espère que l'on pourra m'aider.

Cordialement,

9 réponses


Tchoupi
Auteur
Réponse acceptée

J'ai tout changer pour passer par la méthode POST, et tout fonctionne, je vais rester comme ça du coup.

Bonsoir.
Comme ceci par exemple depuis le controller :

if ($this->request->is('get') && !empty($this->request->data)) {
    /* code de traitement */
    $this->request->data['Search'] = $this->request->data;
    $this->set(compact('/* variable */'));
    return $this->redirect($this->referer());
}

vue

echo $this->Form->create('Search', ['type' => 'get']);
/* reste du formulaire */

Non ?

Tchoupi
Auteur

Ça n'a pas l'air de fonctionner, aucune erreur apparente.

Avec ta condition et en remplissant par exemple le champ texte, il ne fais pas le code de traitement or si la condition est

if($this->request->query)

ça fonctionne mais sans remplir le formulaire.

Edit : tu as éditer après, je n'ai pas vu du coup.

Sinon mon formulaire est déjà de type get évidemment. Et moi il se nomme 'Equipement' et non Search donc j'ai changer pour moi mais rien n'y change.

Sinon mon formulaire est déjà de type get évidemment. Et moi il se nomme 'Equipement' et non Search

J'ai mis Search en exemple, vu que je n'avais pas plus de précision, mais tu mets le nom que tu as mis à la place de Search, ce n'est pas un problème ça.
Ce serait plus simple pour nous et moins hasardeux, si tu nous montrais un peu ton code, sinon nous ne pouvons pratiquement que te répondre approximativement.

Tchoupi
Auteur

Je ne laisse pas le code longtemps par contre.

Le formulaire :
...
Côté controller
...

Attends.
Un input de type checkbox, doit contenir une valeur de type boolean ou tynint(1) (0 ou 1), mais pas une valeur numérique comme tu le fais.
Car une checkbox, lorsqu'elle est cochée, elle prend la valeur 1 en général.
Ensuite, pour que les valeurs des champs du formulaire se remplissent selon ce qui est soumis par l'utilisateur, avant la fin de la boucle du $this->request->query, si tu n'as que se formulaire sur la page, il te suffit de redéfinir les données postées comme j'ai mis plus haut :

$this->request->data = $this->request->data['Equipement']; /* par exemple */

Et tu fais le redirect.
La condition du $this->request->is('get') elle n'est bien sûr prise en compte que dans le cas où le formulaire est soumis, si l'utilisateur ne fait que rafraîchir la page, ce ne sera pas pris en compte, c'est certain.
Le :

$this->request->is('post');
/* ou */
$this->request->is('get');

Ne se réfèrent qu'à des données soumises par formulaire et :

$this->request->query /* par exemple */

à des données dans l'url.

Tchoupi
Auteur

Bon... Je vais regarder ça, vu que j'apprends "sur le tas" :/

Je comprends pas encore toutes les mécaniques du système...

Oups, désolé, je t'ai un peu trop répondu à la va-vite, tu peu mettre des valeurs autre que boolean en checkbox.

Tchoupi
Auteur

Ah c'est bien ce qu'il me semblait car ça fonctionne avec les valeurs que j'ai mise.