[英]Problems with PHP & JavaScript form validation script
我在使用此腳本進行表單驗證時遇到了一些麻煩,最初使用JavaScript,然后再次進行驗證,然后使用PHP提交。 有人可以在這里看到問題嗎? 打開文件時我什么也沒看到。 我對PHP相當陌生。 忽略表格格式。 這是一本書的實驗室,因此重點是PHP和JavaScript。 我知道CSS布局等。
任何幫助將不勝感激。 提前致謝
<?php
error_reporting(~0); ini_set('display_errors', 1);
//PHP adduser.php
//Start with the PHP code
$forename=$surname=$password=$age=$email="";
if(isset($_POST['forename']))
$forename = fix_string($_POST['forename']);
if(isset($_POST['surname']))
$surname = fix_string($_POST['surname']);
if(isset($_POST['password']))
$password = fix_string($_POST['password']);
if(isset($_POST['age']))
$age = fix_string($_POST['age']);
if(isset($_POST['email']))
$email = fix_string($_POST['email']);
$fail= validate_forename($forename);
$fail.= validate_surname($surname);
$fail.= validate_password($password);
$fail.= validate_age($age);
$fail.= validate_email($email);
echo "<html><head><title>An example form</title></head><body>";
if($fail==""){
echo "Form data successfully validated: $forename,
$surname, $password, $age, $email";
}
//This is where you'd enter post fields to the DB
exit;
//Now the HTML & JavaScript goes here
回聲<<< _ SOQ
<style type="text/css">.signup{
border:1px solid #999999;
font:normal 14px helvetica;
color:#444444;
}
</style>
<script type="text/javascript">
function validate(form){
fail = validateForename(form.forename.value);
fail += validateSurname(form.surname.value);
fail += validatePassword(form.password.value);
fail += validateAge(form.age.value);
fail += validateEmail(form.email.value);
if(fail=="") return true;
else alert(fail); return false;
}
</script>
</head>
<body>
<table class="signup" border="0" cellpadding="2" cellspacing="5"
bgcolor="#eeeeee">
<th colspan="2" align="center">Sign up form</th>
<tr>
<td colspan="2">Sorry, the following errors were found<br/>
in your form: <i>$fail</i>
</td>
</tr>
<form method="post" action="adduser.php" onsubmit="validate(this.form)">
<tr><td>Forename:</td><td><input type="text" maxlength="32"
name="forename" value="$forename"/></td>
</tr>
<tr><td>Surname:</td><td><input type="text" maxlength="32"
name="surname" value="$surname"/></td>
</tr>
<tr><td>Password:</td><td><input type="text" maxlength="32"
name="password" value="$password"/></td>
</tr>
<tr><td>Age:</td><td><input type="text" maxlength="32"
name="age" value="$age"/></td>
</tr>
<tr><td>Email:</td><td><input type="text" maxlength="32"
name="email" value="$email"/></td>
</tr>
<tr><td colspan="2" align="center">
<input type="submit" value="Sign-up"/></td>
</tr>
</form>
</table>
<script type="text/javascript">
function validateForename(field){
if(field=="") return "No surname was entered";
return "";
}
function validateSurname(field){
if(field=="") return "No surname was entered";
return "";
}
function validatePassword(field){
if(field=="") return "No surname was entered";
else if(field.length<6) return "Passwords, must be at least 6 characters";
else if([^/a-zA-Z0-9_-/]) return "Only a-zA-Z0-9_- characters are allowed ";
return "";
}
function validateAge(field){
if((field=="") || (isNaN(field)) return "No age was entered";
else if((field<18) || (field>101)) return "Age must be between 18 and 101 years";
else if(/[^a-zA-Z0-9_-]/.test(field))
return "Only a-zA-Z0-9_- characters are allowed ";
return "";
}
function validateEmail(field){
if(field=="") return "No surname was entered";
else if(!((field.indexOf('@')>0) && (field.indexOf('.')>0)) ||
/[^a-zA-Z0-9-]/.test(field)) return "E-mail address invalid";
return "";
}
</script>
</body>
</html>
_SOQ;
//最后是PHP函數
function validate_forename($field){
if($field=="") return "No forename was entered";
return "";
}
function validate_surname($field){
if($field=="") return "No surname was entered";
return "";
}
function validate_password($field){
if($field=="") return "No password was entered";
elseif(strlen($field) <6) return "Passwords, must be at least 6 characters";
elseif(!preg_match("/[^a-zA-Z0-9_-]/", $field))
return "Only a-zA-Z0-9_- characters are allowed ";
return "";
}
function validate_age($field){
if($field<18 || field>101) return "Age must be between 18 and 101 years";
return "";
}
function validate_email($field){
if($field=="") return "No surname was entered";
elseif(!(strpos($field, ".")>0) &&
(strpos($field, "@")>0) ||
preg_match("/[^a-zA-Z0-9_]/",$field))
return "E-mail address invalid";
return "";
}
//sanitise the PHP input
function fix_string($string){
if(get_magic_quotes_gpc($string)) stripslashes($string);
return htmlentities($string);
}
?>
如果您什么都沒有看到,則說明您的PHP錯誤
轉到php.ini並將錯誤報告設置為E_ALL並將錯誤顯示為on或
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
?>
if($fail=""){
您分配而不是檢查是否相等。 然后,由於分配的值為false,因此將永遠不會執行相應的成功代碼。
當您實際上想要$fail==""
時,您似乎正在使用$fail=""
$fail==""
。 第一個是賦值表達式,第二個帶有==
的表達式是比較表達式。 不管之前將$fail
設置為什么,您的用法將始終解析為false
(通過您剛剛設置的空字符串),因為您只是將其重置:
$fail = "hello";
var_dump($fail); //string(5) "hello"
var_dump($fail=""); //string(0) ""
var_dump(""); //string(0) ""
所以你的if語句就變成
if("") {
//never get here
} else {
//always get here, but you have nothing defined
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.