在PHP中验证数据

时间:2012-07-14 13:03:56

标签: php

我有一个类似下面的表单,我想从用户那里得到一些输入。我的目标是在提交到数据库之前验证数据。我的问题是我该怎么做?

<form action="../actions/insertcomment.php" method="post">
    <p class ="ctitle">Leave a Comment:</p>
    <p><label for="postid"><b>PostID:</b></label>
       <input type="text" id="postid" name="postid" maxlength="5" /> <br/>

        <label for="name"><b>Name:</b></label>
        <input type="text" id="name" name="name" maxlength="25" /> <br/>

        <label for="email"><b>Email:</b></label>
        <input type="text" id="email" name="email" maxlength="50" /> <br/>

        <label for="website"><b>Website:</b></label>
        <input type="text" id="website" name="website" maxlength="25" /> <br/>

        <label for="content"><b>Comment:</b></label>
        <textarea id="content" name="content" cols="10" rows="4" maxlength="100"></textarea> <br/>

        <input type="submit" value="Submit Comment" name="submit_comment" /> <br/>
    </p>
</form>

和我的insercomment.php如下:

<html>
<link rel = "stylesheet" type = "text/css"
          href = "../common/style.css" />
<?php
include("../common/dbconnect.php");
$con=new dbconnect();
$con->connect();
error_reporting(E_ALL);

 //$postid= $_GET['id'];

if($_POST) {

    $postid= $_POST['postid'];
    $users_name = $_POST['name'];
    $users_email = $_POST['email'];
    $users_website = $_POST['website'];
    $users_comment = $_POST['content'];

    $postid = htmlspecialchars($postid);
    $users_name = htmlspecialchars($users_name);
    $users_email = htmlspecialchars($users_email);
    $users_website = htmlspecialchars($users_website);
    $users_comment = htmlspecialchars($users_comment);



$sSql = "INSERT INTO comments
 ( post_id,name, email, website,content)
 VALUES ( $postid, '$users_name',
        '$users_email', '$users_website', '$users_comment' )";

    //echo $sSql;
    mysql_query($sSql);
    //$update=mysql_affected_rows();
    //echo "<h2>$update Record Inserted</h2><br />";
    echo '<h2> Your Comment is submitted</h2><br />';
}

?>

这里我没有使用&#34;方法=&#34;后&#34;&GT;任何此类代码或示例都表示赞赏。

6 个答案:

答案 0 :(得分:1)

最好的方法是在sql语句之前检查数据是否有效。

伪代码:

$data1 = $_POST['xyz']; //text
$data2 = $_POST['abc']; //number
...

errors = array
if(data1 is not text) errors[] = data1 must be text
if(data2 is not number) errors[] = data2 must be number
...

if(count(errors) > 0) return errors
else

do the sql insert
return "thank you message"

答案 1 :(得分:1)

你当然应该清理你的输入以防止注射:

    $postid= mysql_real_escape_string($_POST['postid']);

这将使您的所有输入都安全地插入数据库。

答案 2 :(得分:1)

您可以使用filter_input验证php中的数据。你可以在这里阅读更多相关信息:

filter_input in php

以下是有关如何使用它验证电子邮件的示例:

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

INPUT_POST是方法,email是字段($_POST['email'])的名称,FILTER_VALIDATE_EMAIL是验证选项。

您可能需要考虑在mysqlipdo中使用预准备语句,以使您的应用程序更安全。

要检查变量是否具有值,您可以使用函数empty

if(!empty($_POST['email']){
  //do stuff
}

您还可以添加客户端验证。一个好的库是liveValidation,顾名思义,它会在用户输入时对其进行验证,以便用户无需等待页面刷新,然后才能获得反馈,无论表单是否已成功提交。

答案 3 :(得分:1)

我的经验表明,在插入数据库之前,您应该使用if-else语句检查输入。最重要的是使用准备好的声明。不要传递那样的原始字符串。始终为表单使用预先准备好的声明。

请参阅:Best way to prevent SQL Injection

答案 4 :(得分:1)

我建议您使用mysql_real_escape_string()清理字符串以进行SQL注入。使用if else语句进行验证。前例

if ($_POST['name']...) 
{
    echo "fill in those fields!";
}
else
{
    do stuff...
}

顺便说一句,您应该使用PDO预处理语句,而不是使用PHP回显HTML。

答案 5 :(得分:0)

你可以这样做: -

if(isset($_POST))
{
     if($_POST['postid']!="" && $_POST['name']!="" &&.....)
     {
         //do your insertion here 
     }
     else
       echo "oops !! Something is missing";
}