서버 논리와 클라이언트 논리를 혼합하지 마십시오. 똑같은 스크립트가 양식을 출력하고 입력을받을 수 있습니다. 입력이 성공적으로 확인되면 계속 진행됩니다. 그렇지 않은 경우 양식을 다시 표시합니다. 이번에는 오류 메시지와 이미 입력 된 데이터가 표시됩니다.
사용자가 다음 번에 양식을 제출하면 유효성 검사가 성공적으로 통과 될 때까지 유효성 검사가 다시 시작됩니다.
입력 값과 오류 메시지가 포함 된 양식을 확장했지만 플래그가 지정된 경우에만 표시합니다.
이 $_POST
옆에 추가 변수를 바로 수행 할 수 있습니다 - 또는 당신이 그것을 좋아하는 경우 - (당신이 좋아하는 것에 대해 부담이 될 수 있음) 젠드 프레임 워크와 같은 프레임 워크에서 완전한 형태의 추상화를 사용하거나 단지와 인기있는 HTML_QuickForm2과 같은 라이브러리/구성 요소.
편집 :
이 전반적인 방법론을 입증하는 매우 베어 코드가 라이브러리를 사용하는 경우가 훨씬 좋네요, (그리고 당신이 그것을 대신 실제에 집중할 수 코딩 할 필요가 없습니다 상단의 정의와 같은 형식). 이 코드는 사용하는 것보다 흐름을 읽고 이해하는 데 더 유용합니다. 신속하게 입력하여 구문 오류가 발생했으며 기능이 완벽하지는 않습니다. 이것은 단지 하나의 이메일 필드가, 심지어 제출 버튼을 누락되었습니다
/* setup the request */
$request->isSubmit = isset($_POST['submit']);
/* define the form */
$form->fields = array
(
'email' => array
(
'validate' => function($value) {return filter_var($value, FILTER_VALIDATE_EMAIL);},
'output' => function($value, $name) {return sprintf('<input type="text" value="%s" id="%s">', htmlspecialchars($value), htmlspecialchars($name)},
'default' => '[email protected]',
),
);
/**
* Import form data from post request
*
* @return array data with keys as field names and values as the input strings
* or default form values.
*/
function get_form_post_data($form, $request)
{
$data = array();
foreach($form->fields as $name => $field)
{
$data[$name] = $field->default;
if ($request->isSubmit && isset($_POST[$name]))
{
$data[$name] = $_POST[$name];
}
}
return $data;
}
/**
* Validate form data
*/
function validate_form_data($form, $data)
{
foreach($form->fields as $name => $field)
{
$value = $data[$name];
$valid = $field['validate']($value);
if (!$valid)
{
$form->errors[$name] = true;
}
}
}
function display_form($form, $data)
{
foreach($form->fields as $name => $field)
{
$value = isset($data[$name]) ? $data[$name] : '';
$hasError = isset($form->errors[$name]);
$input = $field['output']($name, $value);
$mask = '%s';
if ($hasError)
{
$mask = '<div class="error"><div class="message">Please Check:</div>%s</div>';
}
printf($mask, $input);
}
}
// give it a run:
# populate form with default values -or- with submitted values:
$form->data = get_form_post_data($form, $request);
# validate form if there is actually a submit:
if ($request->isSubmit)
{
validate_form_data($form, $form->data);
}
# finally display the form (that can be within your HTML/template part), works like echo:
display_form($form, $form->data)
"사용자가 뒤로 버튼 누르기"부분을 제외하고 대부분의 질문을받는 것 같습니다. 그들이 그렇게 할 때 당신은 무엇을하고 싶니? 일반적으로이 동작은 브라우저에서 제어합니다. – NullUserException
"back"이라고하는 html 버튼이있는 화면을 표시하는 것은 on.click = "location = ''"으로 프로그래밍되고 내 페이지 URL로 다시 가리키는 것을 의미합니다. – Chiubaka