【发布时间】:2015-05-13 18:34:15
【问题描述】:
我正在尝试仅验证字母和破折号的表单字段(用于名字),但无论我如何实现代码,$player_name 的值仍在设置中。
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["player_name"])) {
$nameErr = "Name is required";
} else {
$player_name = test_input($_POST["player_name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z -]+$/",$player_name)) {
$nameErr = "Only letters and white space allowed";
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
表单已使用以下代码实现:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Registration Date: <input type="text" name="date_captured" id="date_captured" value="<?php echo $current_date; ?>">
<br><br>
Name: <input type="text" name="player_name" id="player_name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $date_captured;
echo $player_name;
echo "<br>";
?>
即使设置并显示了“Only letter and white space allowed”错误,$player_name 的值仍然设置。
【问题讨论】:
-
该值是较早分配的,然后正在验证。您应该改为验证
test_input($_POST["player_name"])。 -
@user2696851 请方舟并投票给答案。它会帮助别人。谢谢。
标签: php regex validation preg-match