Code PHP :
<?php
$soldat = (((int)($_POST['soldat'])) != 0);
$archer = (((int)($_POST['archer'])) != 0);
if (($total = $soldat + $archer))
$_SESSION['nombre_type_unites'] = $total;
$soldat contiendra 1 si on a $_POST['soldat'] non nul, et $archer contiendra 1 si on a $_POST['archer'] non nul.
$_POST['soldat'] contient une chaine de caractères qui est issue du formulaire HTML.
(int)* se charge de transformer ce qui suit en un entier
(int)($_POST['soldat']) est donc la valeur du formulaire, convertie en un entier (en cas de valeur incorrecte, cette conversion renvoie 0).
* != 0 renvoie "true" si * est non nul, et renvoie false si * est nul.
Donc, (((int)($_POST['soldat'])) != 0) renvoie true si on a choisit un soldat.
Idem pour la ligne suivante.
$total = $soldat + $archer assigne la valeur de $soldat + $archer à la variable $total. L'opération "+" génère une conversion implcite: les "true" deviennent un entier "1" et les falses deviennent un entier "0", donc, on est dans le cas 1+1 ou 1+0 ou 0+1 ou 0+0. DOnc $total contiendra 2 si on a choisit archer et soldat, 1 si on a choisit un des deux (on sait pas lequel), 0 si on n'a rien choisit.
Lors d'un assignement "=", la valeur de l'assignement est retournée. Donc, ($total = $soldat + $archer) assigne la valeur à $total, comme indiquée plus haut (2, 1 ou 0), et le parenthèse renvoie cette même valeur. Le test "if" est donc "false" si et seulement si $total est nul
$_SESSION['nombre_type_unites'] = $total; assigne la valeur de $total à la variable de session.
Note que ta variable de session ne se créera pas "lors de l'envoie du POST", mais lorsque le serveur reçoit ce POST et le traite.