簡體   English   中英

PHP表單驗證不起作用

[英]PHP form validation doesn't work

我是PHP和JavaScript的新手,只是學習網絡開發,我正在業余時間嘗試各種事情,但是,有一件事我找不到解決方案。 我有一個表格,該表格將僅收集4個數據,即姓名,出生日期,電子郵件和電話號碼。 所有字段都是進行進一步數據處理所必需的。 我確實嘗試了在Google上找到的每件事,但仍然無法正常工作。 該表單僅將各種數據保存到數據庫中,而無需檢查輸入字段。

稍后,我希望代碼驗證表單,在同一頁面上而不是在不同的“ .php”上顯示任何錯誤,並發送2封電子郵件,其中一封用於確認該人,另一封用於通知我有關表單提交的信息。 。 我應該做些什么/改變才能做到這一點? 我覺得atm卡住了。

我的表格:

<form class="contactform" id="cfrm" action="process.php" method="post">
    <div class="f-data">
        <input class="f-error" name="uname" placeholder="NAME" type="text" required="required" data-error="Name is required.">
    </div>
    <div class="clear"></div>
    <div class="f-data">
        <select name="birthday" id="forminput" aria-required="true" aria-invalid="false">
            <option value="11">11</option>
            <option value="12">12</option>
        </select>
        <select name="birthyear" id="forminput" aria-required="true">
            <option value="1900" selected="selected">1900</option>
            <option value="2001">2001</option>
        </select>
    </div>

    <div class="f-data">
        <input class="f-error" name="uemail" placeholder="EMAIL" type="text" required="required" data-error="Email is required.">
    </div>

    <div class="f-data">
        <input class="f-error" name="uphone" placeholder="PHONE" type="text" required="required" data-error="Phone is required.">
    </div>

    <div class="clear"></div>

    <div class="submit">
        <p>
            <input type="submit" value="submit" name="submit">
        </p>
    </div>

和process.php

<?php

require "connection.php";
require "others/phpmailer/PHPMailerAutoload.php";

//form data
$connection = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
$Name = $connection->real_escape_string($_POST['uname']);
$DoB = $connection->real_escape_string($_POST['birthyear'] . '-' . 
$_POST['birthmonth'] . '-' . $_POST['birthday']);
$inputDoB = date("Y-m-d",strtotime($DoB));
$Email = $connection->real_escape_string($_POST['uemail']); 
$Phone = $connection->real_escape_string($_POST['uphone']);

if (strlen($agree) == 0) $agree = 0;

// validating
if(isset($_POST['submit']));
{ 
    if(empty($_POST['uname']))
    {  
        $msg_name = "You must enter name";  
        $name_subject = $_POST['uname'];  
        $name_pattern = '/^[a-zA-Z ]*$/';  
        preg_match($name_pattern, $name_subject, $name_matches);  
        if(!$name_matches[0])  
            $msg2_name = "Only alphabets and white space allowed";  
        }

        if(empty($_POST['uemail']))
        { 
            $msg_email = "You must enter your email";  
            $email_subject = $_POST['uemail'];  
            $email_pattern = '/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/';  
            preg_match($email_pattern, $email_subject, $email_matches);  
            if(!$email_matches[0]) $msg2_email = "Must be a valid email address";
        }  

        if($_POST['uphone'])  
        {  
            $phone = $_POST['uphone'];  
            preg_match('/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z {2,3})$/i', $phone, $phone_match);  
            if(!$phone_match[0]) $msg_phone = "Must be a valid phone number";   
            if(strlen($phone)!='8') $msg2_phone = "Must be at least 8 characters long";  
        }  
    }
    //save to db
    $query = "INSERT INTO form (Name,DoB,Email,Phone,Date) VALUES ('$Name','$DoB','$Email','$Phone', CURRENT_TIMESTAMP)";

    $success = $connection->query($query);

    if (!$success) {
        die("Couldn't enter data: ".$connection->error);
    }

    echo "Thank You For Contacting Us";

?>

至於您顯示的內聯錯誤消息,我建議您僅使用一頁來處理主表單“邏輯”,而使用另一個include()來表示表單本身的原始HTML標記。 您可以在“邏輯”頁面將訪問者定向為“表格”。

if(isset($_POST['submit'])) ,您將檢查提交的數據。 如果有效,則繼續進行提交。 如果無效,則會引發錯誤,然后再次顯示該表單。 默認情況下也會顯示該表格。

下面的半偽代碼顯示了這一點:

$error = ''; // Nothing is wrong at first
if(isset($_POST['submit'])) {
  // Raise error messages based on submission
  if(empty($_POST['uname'])) {  
    $error = "You must enter name";
  }
  if(empty($_POST['email'])) {  
    $error = "You must enter email";
  }

  // Show the form if there are errors
  if ($error) {
    include('form.php');
  }
  // Process the submission if there aren't
  else {
    //$query = ...
    mail($Email, $email_subject, $msg_email);
  }
}
else {
  include('form.php');
}

使用form.php有條件地檢查$error

<?php
if ($error !== '') {
  // Output the error message in a fancy way
  echo "<span class='error'>" . $error . "</span>";
}
?>
<form> ... </form>

至於發送這兩封電子郵件,您實際上就在那里! 您已經有$msg_email$email_subject$Email 您只是想利用PHP的mail()函數:

mail($Email, $email_subject, $msg_email);

請注意,您可能還希望在其中添加第四個參數(標題)。

我還注意到,您當前在if(isset($_POST['submit']));{有一個分號,這將阻止該塊被觸發。 確保將其刪除。

希望這可以幫助! :)

在設置代碼格式以解決問題時,我認為我發現了問題。

您有2個格式問題,這些問題會導致這種問題。

1)您使用分號防止if成為條件塊

if(isset($_POST['submit']));

使用該分號,該塊將分開運行,並僅充當作用域分隔符。

2)您的正則表達式不完整

preg_match('/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z {2,3})$/i', $phone, $phone_match);  

在最后一個捕獲組(.[az {2,3})中, [az]字符選擇器沒有右方括號,應該是(.[az]{2,3})

我還要指出的是,您正在設置$msg_name$msg2_name但是我看不到它們在任何地方使用,並且您不會因錯誤而停止執行,因此即使您說您希望它停止,該過程也將繼續進行到查詢。 。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM