2012-10-12 44 views
0

首先,我很抱歉的问题是标题没有解释太多,我是PHP新手,发现很难说出问题,因为我甚至不确定哪里出了什么问题。身份不明的索引/非法字符串偏移量

这里是PHP

<?php 
    include 'includes/connection.php'; 

    $pName = $_POST['pName']; 
    $pAuth = $_POST['pAuth']; 
    $pCon = $_POST['pCon']; 
    $Page = $_POST['Page']; 
    $id = $_POST['id']; 

    $update = "UPDATE content SET POST_TITLE = '$pname(pname)',POST_AUTHOR = '$pauth(pauth)',POST_CONTENT = '$pcon(pcon)',PAGE = '$page(page) WHERE ID = '$id[id]'"; 

    $result = mysql_query($update) or die (mysql_error()); 

    Header("Location:admin.php?refer=editsuccess"); 
?> 

和错误,

Notice: Undefined index: pauth in C:\xampp\htdocs\cms\editp.php on line 5 

Warning: Illegal string offset 'id' in C:\xampp\htdocs\cms\editp.php on line 10 

感谢您的帮助

+0

你在做什么是令人难以置信的不安全。如果你还没有被注册,你可能会被**攻击。学习如何使用PDO或类似的准备好的查询,并完全避免这个问题。 – Brad

+0

感谢您的建议,我将从现在开始这样做,我正在使用一个教程来创建一个简单的CMS,我认为如果我这样做,这是学习PHP/MySQL的好方法。我会查找准备好的查询。 –

回答

1

我觉得你的MySQL查询应该是这样的:

$update = "UPDATE content SET POST_TITLE = '$pname',POST_AUTHOR = '$pauth',POST_CONTENT = '$pcon',PAGE = '$page' WHERE ID = '$id'"; 
+0

这是行得通的,我会用你给我的建议。谢谢朋友! –

+0

这是开放给SQL注入。至少逃避你的输入! – Brad

2

有几件事要注意 这里。

由于试图将变量插入查询字符串的方式,您正在收到警告和通知。你首先将变量从$ _POST中提取出来并放到局部变量中。但是,不是使用这些变量,而是尝试访问它们,就好像它们是函数和数组一样。记住PHP中的变量名称区分大小写也很重要。你也错过了一两个报价。

查询应看起来更像是这样的:

$update = "UPDATE content SET POST_TITLE = '$pName', POST_AUTHOR = '$pAuth', POST_CONTENT = '$pCon', PAGE = '$Page' WHERE ID = '$id'";

话虽这么说,这个查询本质上是不安全的,因为用户可以很容易alter your query和做各种有害的东西到你的数据库。

mysql_功能被认为是不安全的,过时的,所以你可以通过两种更现代的mysql包装的一个代替他们解决有关SQL注入的问题:mysqliPDO

+0

您不能简单地通过使用新的包装来解决SQL注入问题。您也必须使用预先准备好的查询,并努力研究如何构建您的应用程序。 – Brad