我有一个类似下面的表单,我想从用户那里得到一些输入。我的目标是在提交到数据库之前验证数据。我的问题是我该怎么做?
<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;任何此类代码或示例都表示赞赏。
答案 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中的数据。你可以在这里阅读更多相关信息:
以下是有关如何使用它验证电子邮件的示例:
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
INPUT_POST
是方法,email
是字段($_POST['email'])
的名称,FILTER_VALIDATE_EMAIL
是验证选项。
您可能需要考虑在mysqli或pdo中使用预准备语句,以使您的应用程序更安全。
要检查变量是否具有值,您可以使用函数empty:
if(!empty($_POST['email']){
//do stuff
}
您还可以添加客户端验证。一个好的库是liveValidation,顾名思义,它会在用户输入时对其进行验证,以便用户无需等待页面刷新,然后才能获得反馈,无论表单是否已成功提交。
答案 3 :(得分:1)
我的经验表明,在插入数据库之前,您应该使用if-else语句检查输入。最重要的是使用准备好的声明。不要传递那样的原始字符串。始终为表单使用预先准备好的声明。
答案 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";
}