2011-11-01 47 views
2

我知道我只是想念这里最简单的东西,但似乎无法弄清楚。

因此增加的WHERE子句时,就像如下

这一点也适用此代码,但改变了数据库中的所有行,而不是仅仅是一个与页面ID ...

<? $pageid= $_GET["id"]; 
$sql = "SELECT id, first_name, last_name, email, bio, job, job2, job3 FROM `".weapons."`   WHERE id = $pageid"; 


if(isset($_POST['Update'])) 
{ 

$first_name = $_POST['first_name']; 
$last_name = $_POST['last_name']; 
$job = $_POST['job']; 
$job2 = $_POST['job2']; 
$job3 = $_POST['job3']; 
$bio = $_POST['bio']; 
$email = $_POST['email']; 
$sql = "UPDATE weapons SET first_name='$first_name', email='$email' , job='$job',  job2='$job2', job3='$job3', bio='$bio', last_name='$last_name'"; 
if (@mysql_query($sql)) { 
echo('<p>Update Complete</p>'); 
    } else { 
    echo('<p>Error updating: ' . mysql_error() . '</p>'); 
    } 

}else{ ... 

然而,

$sql = "UPDATE weapons SET first_name='$first_name', email='$email' , job='$job',  job2='$job2', job3='$job3', bio='$bio', last_name='$last_name' WHERE id = $pageid"; 

我得到一个错误

更新错误:您的SQL语法错误;检查对应于你的MySQL服务器版本在1号线

任何帮助将是巨大的,用“”附近正确语法手册,感谢

编辑

我居然错过了一个超级简单事情,这是我最初假设,我起初在我的形式有<form method='post' enctype='multipart/form-data' action='submit.php'>然而,显然搞砸了获得ID,因为没有一个想法,所以即使该网页是submit.php?id = 4当您提交它不会运行,因为id会消失。

切换代码到<form method='post' enctype='multipart/form-data' action='#'>只是一个窍门。

感谢您的帮助,我现在正在研究sql注入并致力于如何更好地保护我的网站。

+0

任何帮助将是伟大的,我知道问题在于获取页面ID传递到sql作为编号 –

回答

3

请在创建SQL语句之前转义您的字符串。输入值中的各种字符都会打破您的查询并打开一个巨大的安全漏洞。这可能是你的问题。看看这个职位的详细信息How can I prevent SQL injection in PHP?

enter image description here

总之,你的任务是这样的:

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

echo $sql;你运行它,并张贴的内容输出之前。

+0

打我,但是,尝试转义输入。 – MrE

+0

更新武器SET first_name ='Shane',email='[email protected]',job ='Director',job2 ='编辑器',job3 ='',bio ='bio将于不久的将来到这里',last_name = 'McLafferty'WHERE id = –

+0

它似乎是一个问题,它可以使用if(isset($ _ GET ['id'])&& $ _ GET ['id']!='')来测试以获得id –