Voilà mon script assure le suivit documentaire d’assurance de véhicules endommagés.
Pour un lot, j’ai de multiples véhicules.
Pour ces véhicules je stocke dans ma base un marqueur de leur état (normal / anormal) qui est quelque chose qui ne changera jamais.
En revanche je veux aussi stocker la nature de l’avarie, et bien que partiellement standardisé, cela pourra évoluer avec le temps.
J’ai donc une seconde table qui stocke mes natures d’avaries, avec un formulaire pour en rajouter.
La liaison se fait par une clef primaire : 1 = porte rayée, donc dans ma table véhicules à la colonne nature j’ai 1 si mon véhicule a sa porte rayée.
J’espère que sur le principe je suis clair, maintenant la partie qui nous intéresse : il était nécessaire de pouvoir ‘mass changer’ l’état, ou encore la nature d’avarie de nombreux véhicules, et ce à la volée… donc j’ai une checkbox et ensuite une liste déroulante, hop ca change mon état sans problème…
SAUF QUE :
Ma nature d’avarie va évoluer avec le temps… Et que donc mon menu déroulant évolue également
Voici mon menu déroulant :
<input type="hidden" value="<?php echo $idLot ?>" name="idLot">
<select name="massificatorAction">
<optgroup label="Marqueur">
<option value="Normal">Normal</option>
<option value="Anormal">Anormal</option>
<option value="Annulé">Annulé</option>
</optgroup>
<?php include("optgroup.php"); ?>
<optgroup label="Lieu Avarie">
<option value="Approche">Approche</option>
<option value="Port">Port</option>
<option value="Port Final">Port Final</option>
</optgroup>
<optgroup label="Effacer">
<option value="Effacer">Effacer</option>
</optgroup>
</select>
<input type="submit" class="button" value="Mass Change">
Comme vous pouvez le voir, j’ai utilisé optgroup pour raison de présentation, l’inclusion correspond au chargement des natures d’avaries, il s’agit en fait d’un fichier texte généré par le script quand on modifie les natures d’avaries (ca limite les requêtes SQL ainsi).
Après pour gérer toute ces possibilités de modification de mes véhicules, j’ai utilisé un switch :
if (isset($_POST['massificatorAction']))
{
foreach ($_POST['massificator'] as $value)
{
switch ($_POST['massificatorAction'])
{
// Marqueur du véhicule
case "Normal":
$sql = "UPDATE vehicules SET MarqueurV='Normal' WHERE idVehicule='$value'";
break;
case "Anormal":
$sql = "UPDATE vehicules SET MarqueurV='Anormal' WHERE idVehicule='$value'";
break;
case "Annulé":
$sql = "UPDATE vehicules SET MarqueurV='Annulé' WHERE idVehicule='$value'";
break;
// Lieu de l'avarie
case "Approche":
$sql = "UPDATE vehicules SET Lieu='Approche' WHERE idVehicule='$value'";
break;
case "Port":
$sql = "UPDATE vehicules SET Lieu='Port' WHERE idVehicule='$value'";
break;
case "Port Final":
$sql = "UPDATE vehicules SET Lieu='Port Final' WHERE idVehicule='$value'";
break;
// Nature de l'avarie
case "nature":
$sql = "UPDATE vehicules SET Nature='$value' WHERE idVehicule='$value'";
break;
// Effacer les véhicules
case "Effacer":
$sql = "DELETE FROM vehicules WHERE idVehicule='$value'";
break;
}
mysql_query($sql);
}
Sauf que pour :
case "nature":
$sql = "UPDATE vehicules SET Nature='$value' WHERE idVehicule='$value'";
cela ne fonctionne pas, j’ai tenté diverses méthodes mais je ne sais pas trop comment gérer ce truc là en fait, est-il possible de faire intervenir mon optgroup ? parce que pour mes autres changements il s’agit d’informations qui sont déjà déterminées et qui ne changeront jamais, et donc on écrit direct dans la base ce dont on a besoin, là je peux pas faire autant de possibilités de requêtes SQL qu’il y aura d’avaries possibles.
comment m’en sortir ?
PS : a propos j’ai un minibug avec mon switch : si on a rien coché ca donne une erreur, comme éviter ca ?