我的网站上有一个简单的表单,我需要进行服务器端验证。如果用户输入的数据不正确或将字段留空,则应重新向用户显示表单,并将其提交的数据预填充到字段中。
我的表单代码如下所示
<!--Contact form-->
<form name="contactform" action="validate.php" method="post">
Name:
<input type="text" name="name" value=""><br>
<span class="error">* <?php echo $nameError; ?></span><br>
Email:
<input type="text" name="email" value="">
<span class="error">* <?php echo $emailError; ?></span><br>
Category:
<select name="category">
<option value="" disabled selected>Select</option>
<option value="shipping">Sales</option>
<option value="returns">Returns</option>
<option value="shipping">Shipping</option>
<option value="other">Other</option>
</select><br>
<textarea rows="10" cols="40" name="message" placeholder = "Send us a message"></textarea><br>
<input type="submit" name="submit" value="Submit" onclick="validate()">
</form>
目前,我要进行的所有测试都是名称和电子邮件字段。我的问题是,当我加载页面时,我立即得到错误说&#34;注意:未定义的变量:nameError&#34;这与代码中的这些行有关
<span class="error">* <?php echo $nameError; ?></span><br>
<span class="error">* <?php echo $emailError; ?></span><br>
但是我知道验证工作正常,因为我在我的validate.php文件中放置了echo语句来测试它。如果我提交的表格中包含不正确或正确的数据,我将转到一个空白的validate.php页面,该页面只显示echo语句
这是我的validate.php代码
## Initialise varialbes to null ##
$nameError ="";
$emailError ="";
$categoryError ="";
$messageError ="";
$name = $_POST['name'];
## On submitting form below function will execute ##
if(isset($_POST['submit'])){
if (empty($_POST["name"])) {
$nameError = "Name is required";
echo "name required";
echo " ";
} else {
//$name = test_input($_POST["name"]);
//check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/", $name)) {
$nameError ="Only letters and white space allowed";
echo "Invalid name";
}
}
if(empty($_POST["email"])) {
$emailError = "Email is required";
echo "email required";
} else {
//$email = test_input($_POST["email"]);
//check if email syntax is valid or not
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]/", $email)) {
$emailError = "You did not enter a vaild email";
echo "invalid email";
}
}
}
?>
所以我知道我的验证工作正常,问题是它们没有显示在表单本身上。任何人都可以提供解决方案如何解决这个问题? 我已经包含了我在加载页面时收到的错误消息之一的图片Error message on page load
答案 0 :(得分:1)
我猜你不会在初始页面调用时触发validate.php。在这种情况下,$nameError
未定义。添加条件检查此变量是否已设置到表单代码中。
像这样:
if ( isset( $nameError ) ) { echo $nameError; }