[RESOLU] Conserver la valeur d'un select après rechargement de la page

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Conserver la valeur d'un select après rechargement de la page

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 17:11

EDIT : Tout fonctionne, il fallait que je vide le cache du navigateur tout simplement ... Encore merci pour ton aide ! J'espère pouvoir te rendre la pareille un jour !

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 17:07

La ça à l'air bon oui par contre quand tu appelles la méthode update d'où vient le paramètre $box_id ? directement de $_POST['box_choice'] ou une variable issue de $_POST['box_choice'] mais avec des traitements intermédiaires ?

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 17:02

Pourtant sur la value de l'option je lui passe bien un id, et non une chaîne de caractère, enfin je crois ! Voici le code :
<option <?php echo (isset($_POST['box_choice']) && $_POST['box_choice'] == $box->id) || (!isset($_POST['box_choice']) && isset($users) && $users->box_id == $box->id) ? 'selected="selected"' : '' ?>"  value="<?= $box->id; ?>"

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 16:57

Bah box_id attend un integer (Incorrect integer) et la dans la variable $box_id tu as une chaine 'box2' (value: 'box2' for column 'box_id') au lieu de juste 2 à priori ? Un problème sur l'attribut value de la balise option. Logiquement avec ça value="<?= $box->id; ?>" tu ne devrais pas avoir de problème, mais peut être as tu fait une modification sur le code ?

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 16:51

Effectivement, ta solution fonctionne (un grand grand merci )! Le box est bien sauvegardé ! Mais j'ai une erreur de requête SQL quand j'essai de le sauvegarder maintenant :

Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'box2' for column 'box_id' at row 1

Voici la requête en question :
  public function update($username, $email, $box_id, $role, $statut, $id)
    {

        $req = $this->pdo->prepare("update users set username=? ,email=?, box_id = ?, role=?, statut = ?, modification_date = CURRENT_TIMESTAMP where id = ?");
        $req->execute([$username, $email, $box_id, $role, $statut, $id]);


    }
Encore merci de prendre le temps de m'aider, vraiment ! :priere:

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 16:17

Pas clair ton affaire.

Normalement en très simplifié, puisqu'il s'agit d'un formulaire d'édition tu dois avoir quelques chose du genre :

Code : Tout sélectionner

// $object : la ligne qu'on édite sous forme objet (avec un fetchObject) // $boxes : les options du select box_id // boucle de création des options du select box_id : foreach $boxes as $box <option <?php echo (isset($_POST['box_id']) && $_POST['box_id'] == $box->id) || (!isset($_POST['box_id']) && isset($object) && $object->box_id == $box->id) ? 'selected="selected"' : '' ?> ...

EDIT
J'ai relu le sujet et tu dis :
J'ai un select qui va chercher des boxs en base de donnée afin de l'attribuer à un utilisateur, jusqu'à la, tout fonctionne.
Donc s'il s'agit d'attribuer une box à un user et bien tu dois enregistrer le box_id sur le user. Et quand tu édites le user donc, tu utilises $user->box_id == $box->id en plus de la partie avec le $_POST qui reste intéréssante si soumission du formulaire mais erreur (pour restaurer la valeur sélectionnée mais non enregistrée).

En te basant sur mon exemple $object serait en fait $user dans ton cas.

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 16:14

Donc je dois trouver le moyen de sauvegarder la valeur du $_POST après rafraîchissement de la page.

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 16:11

$_POST ne contient pas l'id sauvé en base de données il contient juste la valeur soumise quand tu soumets le formulaire. Donc quand tu quittes le formulaire et que tu reviens plus tard $_POST est vide.

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 16:10

J'avoue que je suis complètement paumé pour le coup, pour moi, avec le code que j'ai posté plus haut, je compare déjà l'id sauvé ($_POST) avec l'id de la valeur courante, je ne comprend pas pourquoi le select ne se pose pas sur la valeur selectionné. J'ai vérifié dans ma BDD, et malgrés cela, l'id du box se met à jour, seul le select ne change pas

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 15:45

Je te redis pareil. La tu re-sélectionnes la valeur soumise quand on soumet le formulaire mais à aucun moment tu ne testes la valeur enregistrée en base de données. Le $entity dont je parle dans mon message et que tu dois bien entendu adapter à ton code.

Re: Conserver la valeur d'un select après rechargement de la page

par or 1 » 24 janv. 2020, 15:44

Cela me renvois l'erreur suivante : Call Stack #TimeMemoryFunctionLocation
erreur qui pourrait ne rien avoir avec le code présenté :
https://stackoverflow.com/questions/230 ... 0000143728

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 15:38

Voici le code modifié :
<option <?php echo (isset($_POST["box_choice"]) && $box->id == $_POST["box_choice"]) || $box->id == $_POST['box_choice'] ? 'selected="selected"' : '' ?> value="<?= $box->id; ?>"
Cela me renvois l'erreur suivante : Call Stack #TimeMemoryFunctionLocation
EDIT : J'ai essayé autre chose :
  <select class="form-control selectpicker" name="box_choice" data-live-search="true" data-size="10" title="Choisissez...">
                                        <?php
                                        foreach ($boxs as $box):
                                            $selected = "";
                                            if (isset($_POST["box_choice"]) and $box->id == $_POST["box_choice"]) {
                                                $selected = "selected = 'selected'";
                                            } ?>
                                            <option <?= selected; ?> value="<?= $box->id; ?>"
                                                    data-subtext="<?= $box->adresse; ?>, <?= $box->code_postal; ?> <?= $box->ville; ?>"><?= utf8_encode($box->nom); ?></option>
                                        <?php endforeach; ?>
                                    </select>
Mais là encore, j'ai la même erreur ...

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 14:51

Voici le code modifié :
<option <?php echo (isset($_POST["box_choice"]) && $box->id == $_POST["box_choice"]) || $box->id == $_POST['box_choice'] ? 'selected="selected"' : '' ?> value="<?= $box->id; ?>"
Cela me renvois l'erreur suivante : Call Stack #TimeMemoryFunctionLocation

Re: Conserver la valeur d'un select après rechargement de la page

par Saian » 24 janv. 2020, 14:23

Si c'est pas la bonne option qui est en selected c'est que tu ne compares pas les bonnes valeurs. Mais la dans ton code je ne vois pas d'attribut selected sur la balise option. Tu définis juste une variable $selected que tu n'utilises pas.

<option <?php echo (isset($_POST["box_choice"]) && $box->id == $_POST["box_choice"]) || $box->id == $entity->id ? 'selected="selected"' : '' ?> value=...
Avec $entity qui est la ligne que tu es en train de modifier.

Re: Conserver la valeur d'un select après rechargement de la page

par Mithrandyll » 24 janv. 2020, 14:15

Salut, il faut mettre sur la balise option un attribut selected="selected".
Oui j'ai testé, mais le problème c'est que ça me garde la même réponse à chaque fois (à savoir 'box 2'), quand je vais modifier les infos et que je met 'box 1', et que je valide, si je retourne sur la page, il sera de nouveau affiché 'box 2' :(
Merci de ta réponse en tout cas :D