Приянка,
Вы на правильном пути. То, что вы пытаетесь реализовать, - это на самом деле хорошо известный шаблон, используемый в веб-разработке, который называется POST / Redirect / GET pattern . (В наши дни шаблон - это немного модное слово, так что, возможно, парадигма - лучшее слово для этого).
Обычная реализация этого паттерна / парадигмы состоит в том, чтобы просто иметь только одну точку входа.
Делая это, add_user.php
теперь может выглядеть следующим образом (это все еще не самое элегантное, но, надеюсь, это даст вам представление о том, как его реализовать):
<?php
// is this a post request?
if( !empty( $_POST ) )
{
/*
process the form submission
and on success (a boolean value which you would put in $success), do a redirect
*/
if( $success )
{
header( 'HTTP/1.1 303 See Other' );
header( 'Location: http://www.example.com/add_user.php?message=success' );
exit();
}
/*
if not successful, simply fall through here
*/
}
// has the form submission succeeded? then only show the thank you message
if( isset( $_GET[ 'message' ] ) && $_GET[ 'message' ] == 'success' )
{
?>
<h2>Thank you</h2>
<p>
You details have been submitted succesfully.
</p>
<?php
}
// else show the form, either a clean one or with possible error messages
else
{
?>
<!-- here you would put the html of the form, either a clean one or with possible error messages -->
<?php
}
?>
Итак, как это в основном работает, так это:
- Если запрос к сценарию НЕ является запросом POST (то есть форма не была отправлена), и к URL-адресу не добавлено
?message=success
, просто отобразите чистую форму.
- Если запрос к сценарию является запросом POST, обработайте форму.
- Если обработка формы прошла успешно, снова перенаправьте на тот же скрипт и добавьте
?message=success
- Если запрос к сценарию является запросом с добавлением
?message=success
, к которому отображается только сообщение с благодарностью, не показывайте форму.
- Если обработка формы завершилась неудачно, то пусть она «провалится» и снова покажет форму, но на этот раз с некоторыми описательными сообщениями об ошибках и с элементами формы, заполненными тем, что пользователь уже заполнил.
Надеюсь, это, наряду с примером, который я привел, имеет достаточно смысла.
Теперь, причина, по которой вы получили печально известное Warning: headers already sent
сообщение, объясняется в этом ответе, который я дал на другой вопрос о том, почему определенные вызовы php лучше ставить вверху скрипта он не обязательно должен быть сверху, но он должен вызываться до того, как ЛЮБОЙ вывод (даже (случайный) пробел) будет выводиться).