0
나는 PHP 폼에서 작업 중이며 필수 필드와 선택적 필드의 두 부분을 만들었습니다. 다음 코드는 "email"필드와 별개로 작동합니다. 옵션 필드에 이메일 필드를 만들었지 만, 어떻게 든 옵션으로 작동하지 않습니다. 필수 필드처럼 작동합니다. 누군가 코드를 붙여넣고 시도해 볼 수 있다면?php 선택적 필드 코드 홀수 오류
의견을 보내 주셔서 감사합니다.
<?php
// Set required fields
$required_fields = array('phone');
$optional_fields = array('name','email');
// set error messages
$error_messages = array(
'name' => 'Please enter your name, letters only',
'phone' => 'Please enter a valid phone number',
'email' => 'Please enter a valid email address',
);
// Set form status
$form_complete = FALSE;
// configure validation array
$validation = array();
// check form submittal
if(!empty($_POST)) {
// Loop into required fields and make sure they match our needs
foreach($required_fields as $field) {
// the field has been submitted?
// if(!array_key_exists($field, $_POST)) array_push($validation, $field);
// check there is information in the field?
if($_POST[$field] == '') array_push($validation, $field);
// validate the phone number supplied
if($field == 'phone') if(!validate_phone_number($_POST[$field])) array_push($validation, $field);
}
//starts here for optional validation
foreach($optional_fields as $field){
if(!array_key_exists($field, $_POST)) array_push($validation, $field);
// validate the name if supplied
if($field == 'name') if(!validate_name($_POST[$field])) array_push($validation, $field);
// validate the email address supplied
if($field == 'email') if(!validate_email($_POST[$field])) array_push($validation, $field);
} // basic validation result
if(count($validation) == 0) {
$form_complete = TRUE;
}
}
//functions for validation different fields
function validate_name($phone = FALSE) {
return (!preg_match('/[^a-zA-Z ]/', $phone))? TRUE : FALSE;
}
function validate_email($email = FALSE) {
return (preg_match('/^[^@\s][email protected]([-a-z0-9]+\.)+[a-z]{2,}$/i', $email))? TRUE : FALSE;
}
function validate_phone_number($phone = FALSE) {
return (!preg_match('/\D/', $phone))? TRUE : FALSE;
}
?>
<?php if($form_complete === FALSE): ?>
<form id="form" name="form" method="post" action="">
<label for="name">Name:</label>
<input class="inter" type="text" name="name" id='name' value="<?php echo isset($_POST['name'])? $_POST['name'] : ''; ?>"/><?php if(in_array('name', $validation)): ?><span class="phperror"><?php echo $error_messages['name']; ?></span><?php endif; ?>
<p></p>
<label for="phone">Phone:</label>
<input type="text" name="phone" id='phone' value="<?php echo isset($_POST['phone'])? $_POST['phone'] : ''; ?>"/><?php if(in_array('phone', $validation)): ?><span class="phperror"><?php echo $error_messages['phone']; ?></span><?php endif; ?>
<p></p>
<label for="email">Email:</label>
<input type="text" name="email" id='email' value="<?php echo isset($_POST['email'])? $_POST['email'] : ''; ?>"/><?php if(in_array('email', $validation)): ?><span class="phperror"><?php echo $error_messages['email']; ?></span><?php endif; ?>
<p></p>
<input type="submit" value="Send" />
</form>
<?php else: ?>
<h2>Your message was sent</h2>
<?php endif; ?>
데일, 많은 도움을 주셔서 감사합니다. :-) 그냥 또 다른 빠른 질문, 왜 이름 필드가 잘 작동합니까? 귀하의 빠른 도움을 주셔서 다시 한번 감사드립니다 – olo
나는 그 중 하나를 알아낼 수 있는지 한번 살펴 보겠습니다 :) – Dale
항상 진실을 반환하는 것처럼 보입니다. 코드의 맨 아래에 추가하려고했습니다. php echo validate_name ''); echo validate_name ('dale');?>'그리고 맨 아래에'11'이 표시됩니다. 이는 양쪽 모두 유효 함을 의미합니다. – Dale