2014-07-11 127 views
1

所以我進一步進入我的學習,並跑進這個問題:從我的索引頁編輯記錄與PHP

更新記錄,我能夠插入和刪除,但努力更新它們。

因此,這顯示的鏈接記錄,以更新或刪除:

<?php 
$result = mysqli_query($con,"SELECT * FROM items"); 

$y = 'id'; 

while($row = mysqli_fetch_array($result)) { 
    echo $row['added'] . $row['content'] . $row[$y]; 

    echo "<br>"; 

    echo "Mark as complete"; 

    echo "<br>"; 

    echo "<a href='delete.php?id=" . $row['id'] . "'>Delete Item</a>"; 

    echo "<br>"; 

    echo "<a href='update.php?id=" . $row['id'] . "'>Edit Item</a>";  

    echo "<br>"; 
    echo "<br>";  

} 

mysqli_close($con); 
?> 

當用戶點擊編輯經過該項目,這是很好的ID,但我的形式更新記錄時舉止異常,提交按鈕似乎已經消失,但如果我刪除了PHP確實出現,這裏是更新形式:

<form action="insertupdate.php" method="post"> 
Content: <input type="text" name="content"> 
<input type="hidden" name="id" value='<?php $_POST ('id'); ?>'> 
<button>dsfsd</button> 
</form> 

這裏用於更新的劇本,但它似乎並沒有被進行更改:

mysqli_query($con,"UPDATE items SET content='blah blah blah' WHERE id=id"); 

if (isset($_POST['content'])) { 
    mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id=".($_POST['id'])); 
} 

header('Location: index.php'); 

mysqli_close($con); 
+0

錯誤的位檢查會幫助你很多。你也很容易受到SQL注入槽'$ _POST ['id']'的影響。 – Vatev

+0

我正在學習PHP,所以我相當新。目前安全問題不是問題,因爲這是一個本地項目供我學習。 – stack

+0

出於調試的目的,通過在查詢後添加以下內容來打印MySQL錯誤消息:'或die(mysqli_error($ con));' – entiendoNull

回答

1

更換

<input type="hidden" name="id" value='<?php $_POST ('id'); ?>'> 
<button>dsfsd</button> 

通過

<input type="hidden" name="id" value="<?php echo $_POST['id']; ?>" /> 
<input type="submit" value="Valid" /> 

你的腳本沒有得到ID,所以它永遠不會工作。

您所查詢:

mysqli_query($con, "UPDATE items SET content = '".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id = ".intval($_POST['id'])); 

intval()將其轉換成$_POST['id']一些,所以你一定會字符串或特殊字符將不被輸入。

+0

並且更新文件中的php看起來不正確? – stack

+0

那裏好眼睛。現在的問題是OP如何測試按鈕,因爲他的代碼會失敗並帶有致命錯誤。 – Vatev

+0

@stack:我製作並編輯。 – djidi

0

我以前總是這樣得到這樣的錯誤。幸運的是,MySQL中有一些非常好的錯誤處理。加入這個else條件中,如果與查詢:

if (isset($_POST['content'])) { 
     mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id='".($_POST['id'])."'"); 
    } else { 
     mysqli_error($con); 
    } 

哦,直接解決您的問題,它看起來像你需要周圍的查詢的ID部分報價:

mysqli_query($con,"UPDATE items SET content='".mysqli_real_escape_string($con, $_POST['content'])."' WHERE id='".($_POST['id'])."'"); 
+0

嗯,我的腳本仍然沒有更新記錄,它傳遞了id,它顯示沒有錯誤,但仍然沒有改變項目的內容... – stack