EDIT
Вивин заметил, что мое предположение относительно header
было неверным, и он был прав в этом. Более того, похоже, что OP делает то, что я изложил ниже, хотя и менее структурированно. Далее Вивин - поймал, что, скорее всего, является реальной проблемой здесь - имя HTML и ключ массива $ _POST не совпадают.
Вытерто, потому что вы используете header
для перенаправления на другую страницу. Как правило, у вас будет одна страница, которая проверяет данные и, если все в порядке, что-то делает с ними и возвращает какое-то представление об успешном выполнении, или это возвращает представление об ошибке, непосредственно отображающее форму снова. Используя header
, вы фактически перенаправляете браузер на другую страницу (т. Е. Запускаете совершенно новый запрос).
Например:
// myform.php
if(strtolower($_SERVER['REQUEST_METHOD']) == 'get')
{
ob_start();
include('form.inc.php'); // we load the actual view - the html/php file
$content = ob_get_clean();
print $content; // we print the contents of the view to the browser
exit;
}
elseif(strtolower($_SERVER['REQUEST_METHOD']) == 'post')
{
$form = santize($_POST); // clean up the input... htmlentities, date format filters, etc..
if($data = is_valid($form))
{
process_data($data); // this would insert it in the db, or email it, etc..
}
else
{
$errors = get_errors(); // this would get our error messages associated with each form field indexed by the same key as $form
ob_start();
include('form.inc.php'); // we load the actual view - the html/php file
$content = ob_get_clean();
print $content; // we print the contents of the view to the browser
exit;
}
}
так что это предполагает, что ваш form.inc.php
всегда имеет закодированные выходные сообщения об ошибках - он просто не отображает их. Так что в этом файле вы можете увидеть что-то вроде:
<fieldset>
<label for="item_1">
<?php echo isset($error['item_1']) ? $error['item_1'] : null; ?>
Item 1: <input id="item_1" value="<?php echo $form['item_1'] ?>" />
</label>
</fieldset>