2013-05-17 5 views
0

Просто быстрый, я не могу показаться, и я надеялся, что кто-то еще обнаружит мою ошибку, у меня есть код проверки строки, написанный на PHP, и проблема, с которой я сталкиваюсь, заключается в том, что форма похоже, проверяет поле «customerfname», как только он открывается, когда не нажата кнопка отправки, как только открывается форма, появляется сообщение «Пожалуйста, введите свое имя», даже до нажатия кнопки отправки. Может ли кто-нибудь заметить мою ошибку?Форма проверяет перед отправкой

<?php 

$flag = false; 
$badchar = ""; 
$string = $_POST["customerfname"]; 
$string = trim($string); 
$length = strlen($string); 
$strmsg = ""; 

if (isset($_POST["submit"])) { 
    if ($length == 0) { 
     $strmsg = '<span class="error"> Please enter your first name</span>'; 
     $flag = true; 
     $valid = false;} 
    else if ($length > 30) { 
     $strmsg = '<span class="error"> Can not enter more than 30 characters</span>'; 
     $flag = true; 
     $valid = false; 
     } 
else{ 
    for ($i=0; $i<$length;$i++){ 
     $c = strtolower(substr($string, $i, 1)); 
     if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) === false){ 
      $badchar .=$c; 
      $flag = true; 
      $valid = false; 
     } 
    } 
    if ($flag) { 
     $strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>';} 
    } 
    if (!$flag) { 
     $valid = true; 
    } 
} 

?> 

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="custinfo"> 

<td><label for="customerfname">Customer First Name: </label></td> 
<td><input type="text" id="customerfname" name="customerfname" size=50/><?php echo $strmsg; ?></td> 

<p><input type="submit" name="submit" value="Save Data"/>&nbsp;<input type="reset" value="Clear Form" /> 

</form> 
+0

Учиться regex, вы не пожалеете об этом. – elclanrs

+0

Пробовал и не имел проблемы ... Я заметил, что не отправляется $ _POST ['submit'], поэтому даже не вводил код проверки. –

+3

у вас нет кнопки отправки? – Kuzgun

ответ

0
<?php 
$flag = false; 
$badchar = ""; 
$strmsg = ""; 
if(isset($_POST['customerfname'])) 
{ 
$string = $_POST["customerfname"]; 
$string = trim($string); 
$length = strlen($string); 
} 
if (isset($_POST["submit"])) { 
if ($length == 0) { 
$strmsg = '<span class="error"> Please enter your first name</span>'; 
$flag = true; 
$valid = false;} 
else if ($length > 30) { 
$strmsg = '<span class="error"> Can not enter more than 30 characters</span>'; 
$flag = true; 
$valid = false;} 
else { 
for ($i=0; $i<$length;$i++){ 
    $c = strtolower(substr($string, $i, 1)); 
    if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) === false){ 
     $badchar .=$c; 
     $flag = true; 
     $valid = false; 
    } 
} 
if ($flag) { 
    $strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>';} 
} 
if (!$flag) { 
    $valid = true;} 
    var_dump($valid); 
} 

?> 

<form method="POST" action="" id="custinfo"> 

<td><label for="customerfname">Customer First Name: </label></td> 
<td><input type="text" id="customerfname" name="customerfname" size=50/><?php echo $strmsg; ?></td> 
<td><input type="submit" name="submit" /></td> 

</form> 
+0

Как мне это записать? – AJJ

+0

Я vardumped $ valid, если $ _POST соответствует вашим требованиям – user2117650

+0

и для показа вашего комментария, когда он этого не делает, вы должны написать это: user2117650

0

Вы должны добавить кнопку отправки с «отправить» в качестве имени, и переместить все строки, касающиеся запроса POST под if (isset($_POST["submit"]))

Здесь является рабочим (есть намного больше улучшите, но это начало) версия вашего кода:

<?php 

$flag = false; 
$badchar = ""; 
$strmsg = ""; 

if (isset($_POST["submit"])) { 

    $string = (isset($_POST["customerfname"])) ? $_POST["customerfname"] : ''; // if customerfname wasn't sent, $string will be empty 
    $string = trim($string); 
    $length = strlen($string); 

    if ($length == 0) { 
     $strmsg = '<span class="error"> Please enter your first name</span>'; 
     $flag = true; 
     $valid = false; 
    } 
    else if ($length > 30) { 
     $strmsg = '<span class="error"> Can not enter more than 30 characters</span>'; 
     $flag = true; 
     $valid = false; 
    } 
    else { 
     for ($i=0; $i<$length;$i++) { 
       $c = strtolower(substr($string, $i, 1)); 
       if (strpos("abcdefghijklmnopqrstuvwxyz-", $c) === false) { 
        $badchar .=$c; 
        $flag = true; 
        $valid = false; 
       } 
     } 
     if ($flag) { 
      $strmsg = '<span class="error"> The field contained the following invalid characters: '.$badchar.'</span>'; 
     } 
    } 
    if (!$flag) { 
     $valid = true; 
    } 
} 

?> 

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"];?>" id="custinfo"> 

<td><label for="customerfname">Customer First Name: </label></td> 
<td><input type="text" id="customerfname" name="customerfname" size=50/><?php echo $strmsg; ?></td> 
<td><input type="submit" name="submit"></td> 

</form> 
+0

У меня есть кнопка отправки с именем «submit» и в настоящее время есть весь раздел PHP-кода (isset ($ _ POST ["submit"])), но я попробовал ваш метод в любом случае по-прежнему без везения. – AJJ

+0

Попробуйте «if (empty ($ string)) вместо« if ($ length == 0) ». Кстати, какова ваша версия PHP? – evuez

Смежные вопросы