2010-01-19 177 views
2

問候我做了以下的PHP腳本,以便我可以編輯文本,它會保存到數據庫以備將來使用。不過,我在更新/插入查詢中遇到了一些問題。我不知道我在做什麼錯,但只有一個命令會執行。我不確定這是一個託管問題還是我做錯了什麼。PHP插入數據庫不工作

任何想法?

if(isset($_SESSION["logged"]) && $_SESSION["logged"]==1){ 
if($_POST['action']=="edit"){ 
    $query=mysql_query("select * from page where active=1 AND heading='".$_POST['selectedpage']."'"); 
    $row = mysql_fetch_array($query, MYSQL_ASSOC); 

    echo "<h1>HTML Editor </h1><br>"; 
    echo "<form name='saveform' action='./action.php' method='post'>"; 
    echo "<textarea rows='100' cols='100' name='updateBox'>".$row['content']."</textarea>"; 
    echo "<br><input name='action' type='submit' value='save edit'>"; 
    echo "<input name='heading' type='hidden' value='".$row['heading']."'>"; 
    echo "</form>"; 
} 
else if($_POST['action']=="save edit"){ 

    $query=mysql_query("UPDATE page SET active='0' where heading='".$_POST['heading']."'"); 
    $query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."','1')"); 
    echo "<p>Changes saved succesfully!</p>"; 
    echo "$_POST['updateBox'] 
} 
+0

最後兩行確實有一些語法錯誤。 – JAL 2010-01-19 22:43:26

+0

我厭倦了看到這些類型的問題。它使PHP社區看起來很糟糕。使用Wampserver或XAMMP創建您自己的開發環境並測試代碼! – Yada 2010-01-19 22:45:57

+1

哪些命令有效,哪些不會?此外,您還有一些主要的SQL注入漏洞。切勿直接從用戶提供的輸入(POST,GET,COOKIE等)直接插入數據,而無需先使用mysql_real_escape_string或使用預準備語句。 – JAL 2010-01-19 22:46:39

回答

6

如果您在每次運行查詢後稱echo mysql_error($query),你將能夠看到是否有與查詢時出現錯誤。查詢內容可能有問題。

您沒有對SQL注入進行任何清理,因此如果您的內容中有引號,則會破壞您的查詢。這是相當危險的(您的查詢很容易受到來自用戶輸入的SQL注入的影響),您應該考慮在所有查詢變量上使用mysql_real_escape_string,或者切換到PDOMySQLi驅動程序。這些驅動程序支持查詢綁定,這是防止SQL注入的極好方法。

編輯爲editorialism :)

順便說一句,這是通常很容易想出一個快速的數據庫包裝或功能的處理程序來自動處理這些樣的錯誤你。我使用的是基於類的包裝,但如果你不想去那麼遠就在剛纔,你可以做這樣的事情:

//very quick-and-dirty 
function queryOrDie($query) 
{ 
    $query = mysql_query($query); 
    if (! $query) exit(mysql_error()); 
    return $query; 
} 

你可以只通過你的所有疑問,你會有一個更容易的時間來調試它。有很多數據庫包裝類也在那裏,我強烈建議你捅一捅。他們讓生活變得更容易。 :)

3

什麼是錯誤?

在腳本的開頭添加此PHP:

ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

也試試這個:直接插入查詢

$query=mysql_query("INSERT into page(heading,content,active) values('".$_POST['heading']."','".$_POST['updateBox']."',1)"); 

而且:)使用從POST數據是安全威脅: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

+1

PHP的錯誤報告功能和設置對數據庫錯誤沒有影響,數據庫錯誤通過MySQL(et.al)模塊中的特定功能進行報告。 – zombat 2010-01-19 22:50:41

0

確保heading未被定義爲密鑰或唯一。這可能會導致您的情況下出現問題。

0

(我的名字是湯姆LY)

我也有PHP(INSERT INTO)查詢不工作: 我原來的查詢是:

mysql_query("INSERT INTO `videousers` (`user_id`,`user_name`,`user_password`,`contact_person`,`organisation`,`contact_tel`,`email`) VALUES ('','{$user}','{$pass}','{$cperson}','{$organ}','{$cphone}','{$email}'"); 

它不工作,所以我已經改變下面的查詢:

mysql_query("INSERT videousers SET user_name='$user',user_password='$pass', contact_person='$cperson', organisation='$organ', contact_tel='cphone', email='$email'"); 

和它的工作。我不知道爲什麼,但是因爲它有效,我用它來完成我的工作。

+0

如果您查看mysql_error,您可以看到第一條語句的問題。在你的第二個陳述中,你並沒有試圖在user_id中添加任何東西 - 我懷疑這是問題所在。 – andrewsi 2013-09-14 15:04:11