Вы перезаписываете массив каждый раз:
$persons = $_SESSION['val'];
Чтобы отправить данные в массив в php, вы должны сделать это следующим образом:
$persons[] = $_SESSION['val'];
Если вы хотитесохранить все участники сеанса, не перезаписывая их каждый раз, когда вам сначала нужно проверить, существует ли сеанс, если нет, то создать его.
if(!isset($_SESSION['persons'])){
$_SESSION['persons'] = array()
}
А затем изменить способ хранения информации в сеансе, например:
$_SESSION['persons'][] = $_POST['val'];
Тогда вы можете сделать:
foreach($_SESSION['persons'] as $d){
echo $d;
echo '</br>';
}
Таким образом, код будет выглядеть так:
session_start();
$persons=array();
if(!isset($_SESSION['persons'])){
$_SESSION['persons'] = array();
}
if (isset($_POST)) {
$_SESSION['persons'][] = $_POST['val'];
}
foreach($_SESSION['persons'] as $d){
echo $d;
echo '</br>';
}
<form action="exam.php" method="post">
Enter a new Person: <input type="text" name = "val">
<input type="submit" name = "send">
</form>
Я не скомпилировал код, проверьте синтаксисошибки, но процедура правильная.