初学者的php验证

时间:2015-06-24 00:25:19

标签: php validation

我使用过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

2 个答案:

答案 0 :(得分:1)

我首先要说明的是:您永远不会相信任何用户输入。 绝不相信任何用户输入。您应该根据以下观点进行编程:访问您的表单的每个用户都是出于恶意的意图。(即他们想破解您的网站

1 是的,你遗漏了重要的一步。你没有阻止SQL Injection。 (如果要将详细信息保存到数据库中。)。如果要将其保存到数据库,最好使用旨在通过正确使用来保护您的库,例如PDOMySQLi 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();
}

Source

2 是的,您应确保全部,并且我的意思是所有用户输入已经过验证。

Inspect element

正如您在上图所示,将复选框值更改为您想要的内容并不难。

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值。