(10-08-2013, 01:34 PM)Sephi-Chan a écrit : Si on génère un doublon après avoir casté des caractères de toute façon interdits, il y a de toute façon un problème (les caractères interdits).Alors logiquement j'arrive a cela :
Je pense qu'il faut développer dans un style fail fast : arrêter le script le plus vite possible en cas de soucis et ne pas essayer de réparer les problèmes.
Si tu veux t'assurer de la bonne forme des données. Tu peux les vérifier et les convertir.
$selected_ids = array(1, 2, '3', '#', 4, 4);
$sane_selected_ids = array_filter($selected_ids, 'is_numeric'); // array(1, 2, '3', 4, 4)
$cast_selected_ids = array_map('intval', $sane_selected_ids); // array(1, 2, 3, 4, 4)
$unique_selected_ids = array_unique($cast_selected_ids); // array(1, 2, 3, 4)
Bien sûr, ça fait de nombreux traitement. Ça ne devrait pas poser de problème sur de faibles volumes.
Et après il faut bien sûr vérifier que l'utilisateur possède bien chacune de ces divisions !
Quand je vois ce genre de choses, je suis bien content d'utiliser un framework ! C'est tellement ennuyeux, répétitif et sans aucune valeur ajoutée !
if(isset($_POST['attack']))
{
$selected_ids = array_values($_POST['attack']['lines']);
$sane_selected_ids = array_filter($selected_ids, 'is_numeric');
$cast_selected_ids = array_map('intval', $sane_selected_ids);
$hasDuplicates = count($cast_selected_ids) != count(array_unique($cast_selected_ids));
if(empty($hasDuplicates))
{
$count = $_POST['nombre_division_max'];
echo $_POST['attack']['target'].'<br />';
while ($count > 0)
{
echo $_POST['attack']['lines'][$count].'<br />';
$count--;
}
}
else
echo 'Vous avez fait une erreur ! nom de gu, d\'nom de gu';
}
Ca marche au moins j’espère ne rien oublier ...PS: j'ai un pb avec un # !
j'ai ajouté un champ a ma liste pour permettre au joueur de ne sélectionner aucune division !
<option value="#">Aucune</option>
sauf que le retraitement n'enlève pas le # ...