Дамы и господа,
Я обнаружил очень странное поведение, которое я не могу объяснить:
Предположим, у вас есть
- несколько элементов формы на вашей странице,может быть обработано с помощью php
- каждая форма имеет одно поле ввода с уникальным именем
- в начале этой страницы будет запущен сеанс
- вы сохраняете каждое опубликованное входное значение впеременная $ _SESSION
примерно так:
<?php
session_start();
$_SESSION["Test"] = "Hello";
foreach ($_POST as $name => $value) {
//echo "_POST: " . $name . ":" . $value . "<br>";
$_SESSION[$name] = $value;
//session_commit();
}
for ($i = 0; $i < 10; $i++) {
echo "<form action=\"multiform.php\" method=\"post\">Value for input $i: <input type=\"text\" name=\"input".$i."\"></form>\n";
}
print_r($_SESSION);
?>
Если вы используете приведенный выше код, только «Test» = «Hallo» сохранится после обновления страницы.Независимо от того, какое входное значение было отправлено и сохранено в сеансе foreach, оно будет пропущено после обновления.
Теперь интересная часть:
Если вы добавите имя в форму, подобную этой...
echo "<form name=\"form$i\" action=\"multiform.php\" method=\"post\">Value for input $i: <input type=\"text\" name=\"input".$i."\"></form>\n";
... сохраненные значения будут сохранены.
Но почему?Как имя формы связано с постоянством $ _SESSION?
РЕДАКТИРОВАТЬ: если имя ввода содержит только цифры, проблема, похоже, возникает:
<input type=\"text\" name=\"$i\">
Спасибо за разъяснение этого.Jan
EDIT2:
Если ключ доступа для массива $ _SESSION содержит только числа, php, очевидно, не сохраняет значения, поэтому что-то вроде этого не будетбыть сохраненным:
<?php
session_start();
for ($i = 1; $i < 10; $i++)
{
$_SESSION[$i] = "Hello $i";
}
?>
Запутанная часть: если вы выполните
print_r($_SESSION)
сразу после цикла for, он покажет 1-10 с Hello 1..10 ..Хотя после обновления все прошло ...