我使用过html,css,javascript和jQuery验证,我想我已经准备好在php中加载变量了。我的网页有大约300个元素(20个文本(区域),40个广播和250个复选框,只需要几个。
我发现这个代码用于php验证,并有3个新手问题:
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
1-我遗漏了任何重要的步骤吗?
2-只有文本(区域)需要这种服务器验证,还是我需要为收音机和复选框执行此操作?
3- null元素是否可以通过此清理过程,或者我是否必须首先测试和排除null元素?
谢谢,Dan
答案 0 :(得分:1)
我首先要说明的是:您永远不会相信任何用户输入。 绝不相信任何用户输入。您应该根据以下观点进行编程:访问您的表单的每个用户都是出于恶意的意图。(即他们想破解您的网站)
1 是的,你遗漏了重要的一步。你没有阻止SQL Injection。 (如果要将详细信息保存到数据库中。)。如果要将其保存到数据库,最好使用旨在通过正确使用来保护您的库,例如PDO或MySQLi Prepared Statements。实际上这很简单:
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$statement = $link->prepare("INSERT INTO testtable(`name`, `lastname`, `age`)
VALUES(:fname, :sname, :age)");
$statement->execute(array(
"fname" => "Bob",
"sname" => "Desaunois",
"age" => "18"
));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
2 是的,您应确保全部,并且我的意思是所有用户输入已经过验证。
正如您在上图所示,将复选框值更改为您想要的内容并不难。
3 为什么要为null
元素执行此操作?你的意思是空元素吗?清除任何和所有用户输入总是好的,但如果理论上它是null
你不打算使用它,对吗?
答案 1 :(得分:0)
我根据一些假设做了一些改变,以解决您的疑虑和问题。我假设&#34;名称&#34;字段是必需的,所以我们将检查它是否已设置。另外我假设您将这些数据存储到数据库中。如果是这样的话,我已经包含了一些MYSQL来帮助清理存储到MYSQL数据库中。
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if (isset($_POST["name"])) {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
else
{
// tell the user they missed something.
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
$data = mysql_real_escape_string($data);
return $data;
}
?>
要解决您的其他问题,您不需要验证复选框和单选按钮等字段,但请注意,用户可以在关闭Javascript的情况下将自己的值发布到您的表单,从而规避您的Javascript检查表单验证。因此,在存储到数据库之前,应该清除您认为用户可能为选择菜单提供信息的任何内容。您不需要检查NULL值。