Page 1 sur 2
Conserver la valeur d'un select après rechargement de la page
Posté : 24 janv. 2020, 14:08
par Mithrandyll
Bonjour à tous,
Je viens vers vous car je rencontre un petit problème. J'ai un select qui va chercher des boxs en base de donnée afin de l'attribuer à un utilisateur, jusqu'à la, tout fonctionne. Mais j'aimerais qu'au rechargement de la page, la valeur du select soit conservé, car je dois re-sélectionner à chaque fois le box avant de valider la modification. Voici le code que j'ai fais :
<select class="form-control selectpicker" name="box_choice" data-live-search="true" data-size="10" title="Choisissez...">
<?php foreach ($boxs as $box): ?>
<?php $selected = "";
if (isset($_POST["box_choice"]) and $box->id == $_POST["box_choice"]) {
$selected = "selected";
} ?>
<option value="<?= $box->id; ?>"
data-subtext="<?= $box->adresse; ?>, <?= $box->code_postal; ?> <?= $box->ville; ?>"><?= utf8_encode($box->nom); ?></option>
<?php endforeach; ?>
</select>
Merci d'avance pour votre aide !

Re: Conserver la valeur d'un select après rechargement de la page
Posté : 24 janv. 2020, 14:12
par Saian
Salut, il faut mettre sur la balise option un attribut selected="selected".
Re: Conserver la valeur d'un select après rechargement de la page
Posté : 24 janv. 2020, 14:15
par Mithrandyll
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

Re: Conserver la valeur d'un select après rechargement de la page
Posté : 24 janv. 2020, 14:23
par Saian
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
Posté : 24 janv. 2020, 14:51
par Mithrandyll
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
Posté : 24 janv. 2020, 15:38
par Mithrandyll
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
Posté : 24 janv. 2020, 15:44
par or 1
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
Posté : 24 janv. 2020, 15:45
par Saian
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
Posté : 24 janv. 2020, 16:10
par Mithrandyll
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
Posté : 24 janv. 2020, 16:11
par Saian
$_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
Posté : 24 janv. 2020, 16:14
par Mithrandyll
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
Posté : 24 janv. 2020, 16:17
par Saian
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
Posté : 24 janv. 2020, 16:51
par Mithrandyll
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 !

Re: Conserver la valeur d'un select après rechargement de la page
Posté : 24 janv. 2020, 16:57
par Saian
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
Posté : 24 janv. 2020, 17:02
par Mithrandyll
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; ?>"