php - 在这个 PHP 示例中我做错了什么?
问题描述
我已经用 w3schools 研究 php 2 天了,我试图重写表单示例而不查看其中的示例代码。但是当我点击提交按钮时,我无法得到结果。我正确地得到了错误,但是当我正确填写输入字段时,页面只是更新本身,没有任何反应。我将我的代码与 w3schools 中的原始代码进行了比较,但我没有发现任何错误。我在这里做错了什么?
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$name = $gender = $email = "";
$nameErr = $genderErr = $emailErr = "";
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(empty($_POST["name"])){
$nameErr = "Name cannot be empty.";
}
else{
$name = test_input($name);
if(!preg_match("/^[a-zA-Z ]*$/",$name)){
$nameErr = "The name is not valid, name cannot contain special characters.";
}
}
if(empty($_POST["email"])){
$emailErr = "E-Mail cannot be empty.";
}
else{
$email = test_input($email);
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErr = "The E-Mail is not valid";
}
}
if(empty($_POST["gender"])){
$genderErr = "Gender is required.";
}
else{
$gender = test_input($gender);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
<label for="name">Name : </label>
<input id="name" type="text" name="name" value="<?php echo $name;?>"><span>* <?php echo $nameErr;?></span><br>
<label for="email">E-Mail : </label>
<input id="email" type="email" name="email" value="<?php echo $email;?>"><span>* <?php echo $nameErr;?></span><br>
<span>* <?php echo $genderErr;?></span>
<label>Gender : </label>
<input type="radio" name="gender" <?php if (isset($gender) && $gender == "female") echo "checked"; ?> value="female"> Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender == "male") echo "checked"; ?> value="male"> Male
<input type="submit" name="submit" value="Enter">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $gender;
?>
</body>
</html>
解决方案
看看这一行:$name = test_input($name);
.
$name
以上是:$name = $gender = $email = "";
因此test_input
,无论$_POST
. 应该是$name = test_input($_POST["name"]);
。电子邮件和性别字段相同:$email = test_input($email);
->$email = test_input($_POST['email']);
和$gender = test_input($gender);
->$gender = test_input($_POST['gender']);
推荐阅读
- node.js - 代理不可用(loadMetadataForTopics) - kafka-node
- r - 理解 R 中的 Pretty()
- r - 将列添加到R中列表中的多个数据框
- python - Python - 随机化给定键的值,如果有任何重复的键,则再次随机化
- python - 如何在python中使用正则表达式提取第一段
- html - 怎么上色
- 计数器除了它们的内容吗?
- python - 如何使用 tkinter 在透明窗口上的不同位置创建 3 个(红色)不透明矩形轮廓?
- android - 有没有办法仅在使用 Android API 级别 28 上的 KeyStore 的软件中存储加密密钥?
- javascript - JavaScript 中的面向对象编程:如何从其他文件调用函数?
- python - 理解下面这段代码