Доброго дня.
1. Объявите $mess и $error перед условием, иначе после выполнения какая-либо из них не будет существовать и вы получите ошибку/предупреждение/ничего.
2. Зачем тут ещё одно условие:
else{
if ($rand > $change && $participant < $rival) {
$mess = "Проигрыш rand: ".$rand.", вы: ".$participant.", он: ".$rival;
}
}
Может возникнуть ситуация, когда ни то ни то не выполнится.
А точнее, всегда из-за $rand > $change.
3. У Вас нет валидации $participant ( хотя бы intval($participant)), а так же проверки за выход из диапазона (иначе всё, что >=12 будет чаще выигрывать (зависимость только от шанса), при <0 всегда проигрывать , а при 0 вообще выдавать ошибку о незаполненности поля).
4. Проверка if ($_SERVER['REQUEST_METHOD'] == "POST") { как бы не имеет смысла особого, т.к. Вы до неё узнаёте $participant = $_POST['participant'];. Поставьте просто проверку на наличие в _POST либо сразу валидацию или хз какая у Вас задача и зачем тут она вовсе.