2012-10-12 48 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