2014-11-21 3 views
1

У меня есть форма, чем когда я представить неправильно не отображается ошибкаPHP электронной проверки не работает

<form action="emailSubs.php" method="post"> 
     <p>Would you like to subscribe to our newsletter ?</p> 
     <p>Name: <input type="text" name="name"><br /></p> 
     <p>E-mail: <input type="text" name="Email"><br /></p> 
     <p><input type="submit" name="submit"><br /></p> 
    </form> 
    <?php 
    function validateEmail($data, $fieldName) { 
     global $errorCount; 
     if(empty($data)) { 
      echo "\"$fieldName\" is a required 
      field.<br />\n"; 
      ++$errorCount; 
      $retval = ""; 
     } else { // olny clean up the input if it isn't 
       // empty 
     $retval = trim($data); 
     $retval = stripslashes($retval); 
     $pattern = "/^[\w-]+(\.[\w-]+)*@" . 
      "[\w-]+(\.[\w-]+)*" . 
      "(\[[a-z]]{2,})$/i"; 
    if(preg_match($pattern, $retval) ==0) { 
     echo "\"$fieldName\" is not a valid E-mail 
     address.<br />\n"; 
     ++$errorCount; 
     } 
    } 
    return ($retval); 
} 
    ?> 

Я думаю, что это может быть картина, но я не уверен, что проблема может быть

+1

Добавить сообщение об ошибках в верхней части файла (ов) сразу после открытия '

+0

Вам не нужно включать это, он говорит о том, что если preg_match неверно, не срабатывает эхо, а не ошибки PHP дает –

ответ

0

Проблема заключается в том, что у вас нет двух вещей, связанных должным образом ...

Оставьте свою форму в отдельном файле от emailSubs.php - Хотя это не необходимый шаг, он, надеюсь, поможет вам понять, как это работает (не упомянуть, что это гораздо аккуратнее/организованный способ сделать это)

<form action="emailSubs.php" method="post"> 
     <p>Would you like to subscribe to our newsletter ?</p> 
     <p>Name: <input type="text" name="name"><br /></p> 
     <p>E-mail: <input type="text" name="Email"><br /></p> 
     <p><input type="submit" name="submit"><br /></p> 
    </form> 

Теперь в файле emailSubs.php:

<?php 
function validateEmail($data, $fieldName) { 
    global $errorCount; 
    if(empty($data)) { 
     echo "\"$fieldName\" is a required 
     field.<br />\n"; 
     ++$errorCount; 
     $retval = ""; 
    } else { // olny clean up the input if it isn't 
      // empty 
    $retval = trim($data); 
    $retval = stripslashes($retval); 
    $pattern = "/^[\w-]+(\.[\w-]+)*@" . 
     "[\w-]+(\.[\w-]+)*" . 
     "(\[[a-z]]{2,})$/i"; 
if(preg_match($pattern, $retval) ==0) { 
    echo "\"$fieldName\" is not a valid E-mail 
    address.<br />\n"; 
    ++$errorCount; 
    } 
} 
return ($retval); 

} >

Но вы не сделали, но -! Вы видите, вы должны подключить два --- В вашей форме, вы указали method="post" - так, мы делаем это:

<?php 

$name = $_POST['name']; 
$email = $_POST['email']; 

?> 

Теперь, Есть много хороших причин, чтобы не использовать регулярное выражение для проверки вашего форма. This is a good read on that topic.

Итак, что вы можете сделать вместо этого, может выглядеть следующим образом:

<?php 

if(ctype_alnum($_POST['name']) == true){ 
$name = $_POST['name']; 

} else { 

exit("Please enter a valid name"); 

} 

if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL){ 
    $email = $_POST['email']; 
} else { 

    exit("Please enter a valid email address"); 

} 

?> 

И вы видите? Это делает более чистым способом обработки вашей проверки.

SO, Полный круг, ваш код не отображал ошибку, потому что не было ничего, чтобы отобразить эту ошибку.

0

Я заметил, что у вас есть форма и функция, но вы не вызываете функцию при отправке формы. Возможно, это то, что вы делаете за пределами кода, который вы включили, но на всякий случай я изменил его, чтобы быть полным взаимодействием между вызовом представления/функции и самой формой. Кроме того, почему бы не использовать filter_var вместо регулярного выражения?

кодекс (работает на моем локальном сервере):

<?php 
function validateEmail($data, $fieldName) 
{ 
    global $errorCount; 
    $errorCount=0; 
    if(empty($data)) 
    { 
     echo "\"$fieldName\" is a required 
     field.<br />\n"; 
     ++$errorCount; 
     $retval = ""; 
    } 
    else 
    { 
     // olny clean up the input if it isn't 
     // empty 
     $retval = trim($data); 
     $retval = stripslashes($retval); 

     if(!filter_var($_POST['Email'], FILTER_VALIDATE_EMAIL)) 
     { 
      echo "\"".$_POST['Email']."\" is not a valid E-mail 
      address.<br />\n"; 
      ++$errorCount; 
     } 
    } 
    return ($retval); 
} 
if(isset($_POST['submit'])) 
{ 
    $email=validateEmail($_POST['Email'], "Email"); 
    if(empty($errorCount)) 
    { 
     //create subscription 
     echo "Subscribed!"; 
    } 
} 
?> 
<form action="test.php" method="post"> 
    <p>Would you like to subscribe to our newsletter ?</p> 
    <p>Name: <input type="text" name="name" value="<?php echo $_POST['name'];?>"><br /></p> 
    <p>E-mail: <input type="text" name="Email" value="<?php echo $_POST['Email'];?>"><br /></p> 
    <p><input type="submit" name="submit"><br /></p> 
</form> 
+0

Мои знания PHP по-прежнему очень примитивны, и я Я не уверен, что такое filter_var. Спасибо за помощь. Я внесу ваши изменения и посмотрю, как это работает. –