2013-11-02 3 views
0

У меня есть файл inc (test_form4.inc), который определяет форму, которая собирает имя пользователя и номер телефона.Ошибка проверки шаблона телефона PHP

<!doctype html> 
<?php 
/* Program name: form_test4.inc 
    * Description: Defines a form that collects a user's 
    *    name and phone number. 
    */ 
$labels = array("first_name" => "First Name", 
       "middle_name" => "Middle Name", 
       "last_name" => "Last Name", 
       "phone" => "Phone"); 
$radios = array("New", "Changed"); 

$submit = "Submit Phone Number"; 
?> 
<html> 
<head> 
<title>Form 2</title> 
    <style type='text/css'> 
    <!-- 
     form { 
     margin: 1.5em 0 0 0; 
     padding: 0; 
     } 
     .field {padding-bottom: 1em;} 
     label { 
     font-weight: bold; 
     float: left; 
     width: 20%; 
     margin-right: 1em; 
     text-align: right; 
     } 
     .submit { 
     margin-left: 35%; 
     } 
    --> 
</style> 
</head> 

<body> 
<h3>Please enter your phone number below</h3> 
<?php 
/* loop that displays the form */ 
    echo "<form action='$_SERVER[PHP_SELF]' method='POST'>"; 
    foreach($labels as $field => $label) 
    { 
    echo "<div class='field'><label for='$field'>$label</label> 
      <input id='$field' name='$field' type='text' value='"[email protected]$$field."' 
      size='50%' maxlength='65' /></div>\n"; 
    } 
    echo "<div class='field'> 
      <input type='radio' name='status' checked='checked' 
      value='new' style='margin-left: 25%'/>$radios[0] 
      <input type='radio' name='status' 
      value='changed' style='margin-left: 1em' />$radios[1]</div>\n"; 
    echo "<div><input type='hidden' name='submitted' value='yes' /></div>\n"; 
    echo "<div class='submit'> 
      <input type='submit' name='phoneButton' value='$submit'></div>"; 
?> 
</form> 
</body> 
</html> 

... и PHP-файл, который проверяет наличие пробелов или проверяет форму, которая называется (checkBlankOnly2.php)

<?php 
/* Program name: checkBlankOnly_2.php 
* Description: Program displays the blank form and checks 
* all the form fields for blank fields. 
*/ 
if(isset($_POST['submitted']) and $_POST['submitted'] == "yes") 
{ 
    foreach($_POST as $field => $value)   
    { 
    if(empty($value)) 
    { 
     if($field != "middle_name") 
     { 
     $blank_array[] = $field; 
     } 
    } 
    else              
    { 
     $good_data[$field] = strip_tags(trim($value)); 
    } 
    } 
    if(@sizeof($blank_array) > 0) 
    { 
    $message = "<p style='color: red; margin-bottom: 0; 
       font-weight: bold'> 
       You didn't fill in one or more required fields. 
       You must enter: 
       <ul style='color: red; margin-top: 0; 
       list-style: none' >"; 
/* display list of missing information */ 
    foreach($blank_array as $value) 
    { 
     $message .= "<li>$value</li>"; 
    } 
    $message .= "</ul>"; 
    echo $message; 
    extract($good_data); 
    include("form_test4.inc"); 
    exit();  
    } 
foreach($_POST as $field => $value) 
{ 
    if(!empty($value)) 
    { 
    $name_patt = "/^[A-Za-z' -]{1,50}$/"; 
    $phone_patt = "/^[0-9)(xX -]{7,20}$/"; 
    $radio_patt = "/(new|changed)/"; 
    if(preg_match("/name/i",$field)) 
    { 
     if(!preg_match($name_patt,$value)) 
     { 
     $error_array[] = "$value is not a valid name"; 
     } 
    } 
    if(preg_match("/phone/i",$field)) 
    { 
     if(!preg_match($phone_patt,$value)) 
     { 
     $error_array[] = "$value is not a valid phone number"; 
     } 
    } // endif phone format check 
    if(preg_match("/status/i",$field)) 
    { 
     if(!preg_match($radio_patt,$value)) 
     { 
     $error_array[] = "$value is not a valid status"; 
     } 
    } 
    } 
    $clean_data[$field] = strip_tags(trim($value)); 
} 
if(@sizeof($error_array) > 0) 
{ 

    $message = "<ul style='color: red; list-style: none' >"; 
    foreach($error_array as $value) 
    { 
    $message .= "<li>$value</li>"; 
    } 
    $message .= "</ul>"; 


    echo $message; 
    extract($clean_data); 
    include("form_test4.inc"); 
    exit(); 
} 
else 
{ 
echo "Data is all okay"; 
} 
} 
else 
{ 
    include("form_test4.inc"); 
} 
?> 

Я не могу понять, где идет моя ошибка, что я уверен, проблема связана с номером телефона. Мой урок сказал, что номер телефона preg_match для форматов чисел 555-5555 или (888) 555-5555, все еще, когда я вставляю все свои данные, такие как: имя, фамилия и номер телефона в этих форматах, я получил ошибку «не действительный номер телефона ". Пожалуйста, помогите мне, я не могу понять это.

Спасибо.

+0

Почему вы используете подавление ошибок ('@') на 'sizeof' функции? Это вообще хорошая идея не использовать его. –

+0

php скрипты - это не программы .. – Joren

ответ

0

Поле phoneButton рассматривается как номер телефона, потому что оно передает ваше состояние if (preg_match("/phone/i",$field)), это значение «Отправить номер телефона» затем получает подтверждение в качестве номера телефона, таким образом генерируя ошибку «Отправить номер телефона не является допустимым номером телефона», ,

Переименуйте поле «phoneButton», например, «submitButton», и все должно быть в порядке.

-1

Заменить

$phone_patt = "/^[0-9)(xX -]{7,20}$/"; 

с

$phone_patt = "/^([1]-)?[0-9]{3}-[0-9]{3}-[0-9]{4}$/"; 
Смежные вопросы