想知道如何验证此提交表单的输入。通过验证我的意思是保护它免受SQL注入。任何帮助将非常感激。谢谢。
<?php
session_start();
if(!session_is_registered(ausername)){
header("location:main_login.php");
}
include ("header.php");
include ("../db.php");
$catname = $_POST['catname'];
$catdisc = $_POST['catdisc'];
$id = $_GET['id'];
if (isset($id))
{
$query = "SELECT * FROM categories WHERE catid='$id'";
$result= mysql_query($query) or die ('Mysql Error');
}
//Get category name and discription
while($row = mysql_fetch_array($result)){
$cname = $row['catname'];
$cdisc = $row['catdisc'];
}
?>
<?php
$result= mysql_query ("UPDATE categories SET catname='$catname', catdisc='$catdisc' WHERE catid='$id'")
or die ('Error Updating');
?>
<h1>Edit Categories</h1>
<form method="post" action="../admin/edit_cat.php?id=<?php echo $id;?>">
Category Name: <input type="text" name="catname" value="<?php echo $cname;?>"><br/>
Category Discription: <TEXTAREA NAME="catdisc"ROWS="3" COLS="25"><?php echo $cdisc;?></TEXTAREA><br/><br/>
<input type="submit" value="Update Category"/>
</form>
<?php
include ("footer.php");
?>
答案 0 :(得分:4)
字符串(在查询中必须是单引号/双引号!) - &gt; mysql_real_escape_string();
整数(可以没有引号) - &gt; intval();
$catname = mysql_real_escape_string($_POST['catname']);
$catdisc = mysql_real_escape_string($_POST['catdisc']);
$id = intval($_GET['id']);
$result= mysql_query ("UPDATE categories SET catname='$catname', catdisc='$catdisc' WHERE catid=$id")
答案 1 :(得分:2)
为所有查询变量添加mysql_real_escape_string调用,请参阅http://php.net/manual/en/function.mysql-real-escape-string.php
答案 2 :(得分:2)
请参阅PHP SQL Injection文档中的“规避技术”。
答案 3 :(得分:0)
使用数据库库使用占位符。更好的API,它免费处理SQL注入。
例如,请参阅准备并执行MDB2
答案 4 :(得分:0)
在处理用户可以更改的值时使用预准备语句:http://us2.php.net/manual/en/pdo.prepare.php
他们无法进行SQL注入。