![](/img/trans.png)
[英]PHP Form with process on another page - But PHP validation doesn't work
[英]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.