2015-06-24 56 views
0

我已经使用了html,css,javascript和jQuery验证,我想我已经准备好在php中加载变量了。我的网页上有大约300件(20文本(区)S,40收音机和250的复选框只需要那几个php验证初学者

我发现这个代码的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-可以清零元素经过这个清理过程,还是必须测试和删除第一个lude为null元素?

感谢,丹

回答

0

我已经基于一些假设来解答您的疑问和问题的一些变化。我假设需要“名称”字段,因此我们将检查它是否已设置。另外我假设你将这些数据存储到数据库中。如果是这样,我已经包含了一些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值。

+0

你确实需要验证来自用户的任何东西 - 复选框,收音机等。 –

+0

谢谢你的代码!所以一个未经检查的复选框A(我不知道它是空的还是空的)可以通过“清理”并产生一个空的/空的$ A变量而不会抛出错误?谢谢 – tiredeyes

+0

是的,你不必担心产生错误的NULL值变量;正如达伦的回答所述,你应该检查所有的用户输入,包括复选框。我忽略了这一点,因为当我编写这样的代码时,我实际上并没有使用它们的输入。我只检查他们是否检查了框(布尔值)。 –

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

是的,你应该确保所有,我的意思是所有用户输入进行验证。

Inspect element

正如你可以在上面的图片中看到,它不是很难在所有更改复选框值你想要什么。

为什么要为null元素做?你的意思是空的元素?清理任何和所有的用户输入总是很好,但如果它理论上是null你不会使用它,对吧?

+0

几乎所有的复选框都会被使用,无论它们是选中还是未选中。最终将使用一组复选框A-F来形成一个像这样的句子;他们有A,C,E和F,但不是B或D.我还没有想出我想要在Web服务器,办公服务器还是我的桌面客户端上进行级联。这有什么区别吗? – tiredeyes

+0

根本没有任何区别,您只需将这些输入中的每一个存储在某个地方供以后参考! – Darren

+0

谢谢你的代码! – tiredeyes