j'ai essayé de mettre le nom de mon select comme ceci : selected_adresses[] mais alors ma fonction JavaScript ne fonctionne plus :/
C'est en effet la bonne syntaxe si tu veux que ton serveur reçoive toutes les données. En JavaScript, c'est toujours possible d'accéder au <select> mais il faut ruser un petit peu. Remplace :
document.contacts.search_results
par :
document.contacts['search_results[]']
Et ça devrait marcher.
Il reste un problème avec ce search_results[-1]. Il n'y a pas d'index -1 dans un <select>. Je suppose que tu as voulu dire « le dernier sélectionné », mais ce n'est pas aussi simple : le navigateur ne mémorise pas quelle est la dernière option sélectionnée. Il faudrait que tu compares les entrées actuellement sélectionnées dans le <select> de gauche avec celles présentes dans le <select> de droite… Ou alors je n'ai pas compris ce que tu voulais faire.
PS: Quand on passe le formulaire en GET on peut voir dans la barre de lien tout les adresses !
Oui, c'est tout à fait normal.
Edit: dans le lien posté par Sekaijin il est souligné que les <select> multiples ne sont pas très ergonomiques et qu'il est préférable d'utiliser des checkboxes à la place. Voici un exemple minimaliste :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| <?php
error_reporting(E_ALL);
// classe stub en remplacement de la base de données
class QueryClubStub {
private $i;
public function __construct() {
$this->i = 0;
}
// génère des données fictives
public function fetch() {
if (isset(self::$clubs[$this->i])) {
$nom = self::$clubs[$this->i];
$this->i++;
return [
'mail_club' => preg_replace('/[. ]+/', '-', strtolower($nom)) . '@example.com',
'nom_club' => $nom
];
}
return null;
}
private static $clubs = [
'Judo St Genis Pouilly',
'J.C.A.S. Peronnas',
'Judo club Bagesien',
'Saint Denis dojo',
'Judo Kodokan Amberieux'
];
}
$query_club = new QueryClubStub();
?>
<!DOCTYPE html>
<html lang=fr>
<head>
<meta charset=utf-8>
<title>Select multiple</title>
</head>
<body>
<form method="POST">
<ul>
<?php while($liste_club = $query_club->fetch()) {
echo "<li>
<label>
<input type='checkbox' name='search_results[]' value='{$liste_club['mail_club']}'>
{$liste_club['nom_club']}
</label>
</li>";
} ?>
</ul>
<input type="submit">
</form>
<?php if (isset($_POST['search_results'])) {
echo '<pre>';
print_r($_POST['search_results']);
echo '</pre>';
} ?>
</body>
</html> |
Avec ça, il est toujours possible de rajouter du CSS pour que ça ressemble à un select, et éventuellement cacher les checkboxes.
Partager