2014-02-06 23 views
1

我已經嘗試了以下php腳本來驗證用戶輸入。但是表單發送到數據庫時沒有提示用戶填寫必填字段,即如果用戶離開一個或多個字段空,表單被提交時沒有要求填寫字段。在每個表單字段的條件滿足之前,如何停止提交?表單發送時未經驗證:php mysql

這裏是代碼: -

<?php 
$fnameErr=$lnameErr=$emailErr=$passwordErr=$cpasswordErr=""; 
if ($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    if(empty($_POST["fname"])) 
    { 
     $fnameErr="First name is Required"; 
    } 
    else 
    { 
    $fname = $_POST["fname"]; 
    } 
    if (empty($_POST["lname"])) 
    { 
    $lnameErr = "Last Name is required"; 
    } 
    else 
    { 
    $lname = $_POST["lname"]; 
    } 
    if (empty($_POST["email"])) 
    { 
    $emailErr = "Email is required"; 
    } 
    else 
    { 
    $email = $_POST["email"]; 
    } 
    if (empty($_POST["password"])) 
    { 
    $passwordErr = "Password is required"; 
    } 
    else 
    { 
    $password = $_POST["password"]; 
    } 
    if (empty($_POST["cpassword"])) 
    { 
    $cpasswordErr = "Confirm Password"; 
    } 
    else 
    { 
    $cpassword = $_POST["cpassword"]; 
    } 

    //Create connection 
$con=mysqli_connect("localhost","root","p11","daot"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    $sql="INSERT INTO registration (FirstName, LastName, EmailAddress,Password,ConfirmPassword) 
VALUES 
('$_POST[fname]','$_POST[lname]','$_POST[email]','$_POST[password]','$_POST[cpassword]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
    mysqli_close($con); 
} 

?> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="mastercss.css"> 
<title>SIGN UP PAGE</title> 
</head> 
<body> 
<?php include 'header.php'; ?> 
<div class="leftbar"> 
</div> 
<div class="content"> 
<h1 class="h1">complete the following form to register</h1> 
<fieldset style="width:450px; background:gray;"> 
<form autocomplete="on" method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <label for="fname">First Name:</label> 
    <input type="text" name="fname"><?php echo $fnameErr;?><br><br> 
    <label for="lname">Last Name:</label> 
    <input type="text" name="lname"><?php echo $lnameErr;?><br><br> 
    <label for="email">Email:</label> 
    <input type="email" name="email"><?php echo $emailErr;?><br><br> 
    <label for="password">Password:</label> 
    <input type="password" name="password"><?php echo $passwordErr;?><br><br> 
    <label for="cpassword">Confirm Password</label> 
    <input type="password" name="cpassword"><?php echo $cpasswordErr;?><br><br> 
    <!--<label for="sex">Sex</label><input type="radio" name="sex" value="female"> Female 
    <input type="radio" name="sex" value="male">Male<br> 
    <label for="select">Birthday</label> 
<select name="birthday_Month" id="month"> 
<option value="0" selected="1">Month</option> 
<option value="1">January</option> 
<option value="2">February</option> 
<option value="3">March</option> 
</select> 
<select name="birthday_day" id="month"> 
<option value="0" selected="1">Day</option> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select> 
<select name="birthday_year" id="year"> 
<option value="0" selected="1">year</option> 
<option value="2010">2010</option> 
<option value="2011">2011</option> 
<option value="2012">2012</option> 
</select><br><br>--> 
<input type="submit" value="SIGN UP" style="width:100: height:100" name="Submit"> 
</form> 
</fieldset> 
</div> 
<div class="rightbar"><br><br> 
<a href="https://www.twitter.com"><img src="tw1.jpg"> 
<a href="https://www.facebook.com"><img src="fb2.jpg"></a> 
</div> 
<?php include "footer.php";?> 

</body> 
</html> 
+0

根據你的代碼運行 –

+0

如果你想在表單提交前通知用戶,你需要使用javascript。 – Kuzgun

+0

我知道我可以使用Java腳本,但我想驗證使用PHP代碼 – user3279301

回答

2

窗體被沒有顯示,因爲它甚至在執行驗證條件之後執行碼的下面的行驗證提交的。如果通過退出代碼段驗證不正確,則需要避免執行代碼。

if(empty($_POST["fname"])) 
    { 
     $fnameErr="First name is Required"; 
     exit; 
    } 
1

你應該爲其餘的條件做到這一點,而不是

if(empty($_POST["fname"])) 
    { 
     $fnameErr="First name is Required"; 
     echo $fnameErr; 
exit(); 
    } 

相同。

+0

我想顯示錯誤消息在同一頁面上,即在每個文本框的右側,而不是在另一頁上。 – user3279301

+0

對於你需要使用javascript –

+0

你確定沒有辦法在PHP? – user3279301

0

這將顯示您的所有錯誤:

在你PHP

$error = array(); //save all errors into one array, later we will check if this array is empty to proceed with saving into DB 
if(empty($_POST["fname"])) 
    { 
     $error['fname']="First name is Required"; 
    } 
    else 
    { 
    $fname = $_POST["fname"]; 
    } 
    if (empty($_POST["lname"])) 
    { 
    $error['lname'] = "Last Name is required"; 
    } 
    else 
    { 
    $lname = $_POST["lname"]; 
    } 
    if (empty($_POST["email"])) 
    { 
    $error['email'] = "Email is required"; 
    } 
    else 
    { 
    $email = $_POST["email"]; 
    } 
    if (empty($_POST["password"])) 
    { 
    $error['password'] = "Password is required"; 
    } 
    else 
    { 
    $password = $_POST["password"]; 
    } 
    if (empty($_POST["cpassword"])) 
    { 
    $error['cpassword'] = "Confirm Password"; 
    } 
    else 
    { 
    $cpassword = $_POST["cpassword"]; 
    } 

if (empty($errors)) { 
//if there are no errors, save into DB 
//Create connection 
$con=mysqli_connect("localhost","root","p11","daot"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    $sql="INSERT INTO registration (FirstName, LastName, EmailAddress,Password,ConfirmPassword) 
VALUES 
('$_POST[fname]','$_POST[lname]','$_POST[email]','$_POST[password]','$_POST[cpassword]')"; 

if (!mysqli_query($con,$sql)) 
    { 
    die('Error: ' . mysqli_error($con)); 
    } 
    mysqli_close($con); 
} 
} 

而在你HTML

<label for="fname">First Name:</label> 
    //checking if error message is set, if yes display it 
    <input type="text" name="fname"><?php echo isset($error['fname'])?$error['fname']:'' ;?><br><br> 
    <label for="lname">Last Name:</label> 
    <input type="text" name="lname"><?php echo isset($error['lname'])?$error['lname']:'' ;?><br><br> 
    <label for="email">Email:</label> 
    <input type="email" name="email"><?php echo isset($error['email'])?$error['email']:'' ;?><br><br> 
    <label for="password">Password:</label> 
    <input type="password" name="password"><?php echo isset($error['password'])?$error['password']:'' ;?><br><br> 
    <label for="cpassword">Confirm Password</label> 
    <input type="password" name="cpassword"><?php echo isset($error['cpassword'])?$error['cpassword']:'' ;?><br><br> 
+0

它與我的代碼具有相同的結果,沒有任何更改。 – user3279301

+0

哦,等一下 - 我以爲你不想讓它保存到數據庫中,除非你的錯誤得到糾正。 Look @ user3279301只有在您的PHP代碼完成後,HTML代碼纔會在瀏覽器上輸出,現在,如果您要檢查PHP上的錯誤,除非您重新提交表單,否則它將不會被執行PHP代碼首先在HTML之前執行),因此這將成爲客戶端驗證,如果不刷新,那麼您必須使用AJAX(另一種形式的PHP代碼)或使用javascript/jQuery進行驗證。我寫了一個很長的評論,因爲我想要XD –