![](/img/trans.png)
[英]How to prevent google chrome from caching my inputs, esp hidden ones when user click back?
[英]How to prevent from bypassing registration form when the user's inputs are incorrect?
因此,我試圖制作我的第一份注冊表格,並且試圖找出我做錯了什么。 每當我輸入錯誤或無效的輸入或說出無效的用戶名或電子郵件時,只要填寫表格,我仍然可以注冊並將數據發送到數據庫中。 我仍然是初學者,所以不確定如何正確安排它們或我缺少什么
這是我的代碼:
<!doctype html>
<html>
<head>
<style>
form{
margin: 0px auto;
width: 470px;
margin-top:150px;
}
label{
width: 75px;
display: inline-block;
}
.error{
color: red;
}
</style>
</head>
<body>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['email'])&&isset($_POST['age'])){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password_hash = md5($password);
$age = $_POST['age'];
$gender = $_POST['gender'];
if(!empty($username)){
if (!preg_match("/^[a-zA-Z ]*$/",$username)) {
$usernameErr = " Only letters and white space allowed";
}
if(!empty($password)){
if(!empty($email)){
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = " Invalid email";
}
if(!empty($gender)){
if(!empty($age)){
if(strlen($username)>30){
$error = 'Please ahear to maxlength of fields.';
} else {
//MySQL database code goes here
}
} else {
$ageErr = ' Select your age';
}
} else {
$genderErr = ' Select your gender';
}
} else {
$emailErr = ' Enter your email';
}
} else {
$passErr = ' Enter your password';
}
} else {
$usernameErr = ' Enter your username';
}
}
?>
<span class="error"><?php echo $error?></span>
<br><br>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" autocomplete="off">
<h2>Register</h2>
<label for="username">Username</label>
<input type="text" id="username" name="username" maxlength="50" value="<?php if(isset($username)){echo $username;}?>">
<span class="error"><?php echo $usernameErr?></span>
<br><br>
<label for="password">Password</label>
<input type="password" id="password" name="password">
<span class="error"><?php echo $passErr?></span>
<br><br>
<label for="email">Email</label>
<input type="email" id="email" name="email" maxlength="30" value="<?php if(isset($email)){echo $email;}?>">
<span class="error"><?php echo $emailErr?></span>
<br><br>
<label>Gender</label>
<input type="radio" name="gender" id="male" value="male">Male
<input type="radio" name="gender" id="female" value="female">Female
<span class="error"><?php echo $genderErr?></span>
<br><br>
<label>Age</label>
<select name="age" class="age">
<option value> </option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
</select>
<span class="error"><?php echo $ageErr?></span>
<br><br>
<input type="submit" value="Register">
</form>
</body>
</html>
您可以嘗試這樣的事情。 有幾種方法可以使這種方法更有效,但是考慮到上述方法,我至少會按字段而不是如果嵌套的巨型嵌套驗證邏輯。 因此,在下面的示例中,您設置了一個主驗證布爾值,該布爾值基本上會說是提交或否。 當每種類型的字段都進行驗證時,如果發生任何錯誤,它將確保將變量設置為false。 然后在腳本末尾執行最后的if語句,以檢查驗證狀態,如果可行,則執行mysql表單提交工作。 如果不是,則繼續處理並輸出錯誤。 更改的另一件事是您的初始if語句( if(isset($_POST['username'])&&isset($_POST['password'])&&isset($_POST['email'])&&isset($_POST['age'])){
。由於每個字段都經過驗證,因此您實際上只需要檢查您是否嘗試發布表單即可,希望對您有所幫助!
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// make sure that you have posted to the file
if(count($_POST) > 0){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password_hash = md5($password);
$age = $_POST['age'];
$gender = $_POST['gender'];
// use a boolean value to catch errors
$validated = true;
// validate username
if(!preg_match("/^[a-zA-Z ]*$/",$username)){
$usernameErr = " Only letters and white space allowed";
$validated = false;
} else if(empty($username)){
$usernameErr = ' Enter your username';
$validated = false;
}
// validate username length
if(strlen($username)>30){
$error = 'Please ahear to maxlength of fields.';
}
// validate password
if(empty($password)){
$passErr = ' Enter your password';
$validated = false;
}
// validate email
if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = " Invalid email";
$validated = false;
} else if(empty($email)){
$emailErr = ' Enter your email';
$validated = false;
}
if(empty($gender)){
$genderErr = ' Select your gender';
$validated = false;
}
if(empty($age)){
$ageErr = ' Select your age';
$validated = false;
}
if($validated === true){
echo 'im here';
//MySQL database code goes here
}
}
?>
<!doctype html>
<html>
<head>
<style>
form{
margin: 0px auto;
width: 470px;
margin-top:150px;
}
label{
width: 75px;
display: inline-block;
}
.error{
color: red;
}
</style>
</head>
<body>
<span class="error"><?php echo $error?></span>
<br><br>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" autocomplete="off">
<h2>Register</h2>
<label for="username">Username</label>
<input type="text" id="username" name="username" maxlength="50" value="<?php if(isset($username)){echo $username;}?>">
<span class="error"><?php echo $usernameErr?></span>
<br><br>
<label for="password">Password</label>
<input type="password" id="password" name="password">
<span class="error"><?php echo $passErr?></span>
<br><br>
<label for="email">Email</label>
<input type="email" id="email" name="email" maxlength="30" value="<?php if(isset($email)){echo $email;}?>">
<span class="error"><?php echo $emailErr?></span>
<br><br>
<label>Gender</label>
<input type="radio" name="gender" id="male" value="male">Male
<input type="radio" name="gender" id="female" value="female">Female
<span class="error"><?php echo $genderErr?></span>
<br><br>
<label>Age</label>
<select name="age" class="age">
<option value> </option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
</select>
<span class="error"><?php echo $ageErr?></span>
<br><br>
<input type="submit" value="Register">
</form>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.