2013-07-16 267 views
0

對不起,這裏的業餘問題,但我創建了一個表格,在我的生活中,我無法調試爲什麼它不會將更新提交到數據庫的原因。爲什麼我的表單沒有更新數據庫?

一個例子是在這裏:www.dominicharrison.co.uk/projects/Portfolio/admin

代碼:

<?php 
require_once('../_inc/glob.php'); 

$query = mysql_query("SELECT * FROM `pages`"); 

echo "<table border=\"1\"><tr><td>ID</td><td>Name</td><td>Location</td><td>Edit</td><td>Delete</td></tr>"; 

while($array = mysql_fetch_assoc($query)) { 

    echo "<tr><td>" . $array['id'] . "</td><td>" . $array['name'] . "</td><td>" . $array['location']; 
    echo "</td><td><a href=\"?editid={$array['id']}\">Edit</a></td>"; 
    echo "<td><a href=\"?delete={$array['id']}\">Delete</a></td></tr>"; 

} 

echo "</table>"; 

// Defines the edit and delete functions 

$edit = mysql_real_escape_string($_GET['editid']); 
$delete = mysql_real_escape_string($_GET['delete']); 

// Edit function! 

$query2 = mysql_query("SELECT * FROM `pages` WHERE `id` = '{$edit}'"); 
$array2 = mysql_fetch_assoc($query2); 

if($edit != "") { 
    ?> 
    <p> 
    <form method="POST" action=""> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
    </form></p> 

    <?php 
    if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 

} 
+0

檢查您的查詢是否成功 - 如果不成功,將會在'mysql_error()'中出現一條有用的錯誤消息。你還應該看看使用mysqli_或PDO--它們會幫助你編寫更安全的代碼。 – andrewsi

+0

作爲回報,這可能是一個奇怪的問題,你準確地提交到哪裏? – dmaij

+0

@dmaij - 如果您將動作留空,表單將提交回自己的URL。 – andrewsi

回答

0

你的形式不提交ID,所以你的SQL不能匹配WHERE id=條款中的任何內容。

1)。向表單添加一個隱藏字段以提交您從$ _GET數組獲得的editID:

<form method="POST" action=""> 
    <input type="hidden" name="id" value="<?php echo $edit; ?>" /> 
    <input name="name" value="<?php echo $array2['name']; ?>" type="text"><br /> 
    <input name="location" value="<?php echo $array2['location']; ?>" type="text"><br /> 
    <input type="submit" value="Edit!"> 
</form> 

2)。在提交邏輯中捕獲編輯ID:

if($_POST['submit']) 
    { 
     $name = mysql_real_escape_string($_POST['name']); 
     $location = mysql_real_escape_string($_POST['location']); 
     $edit = mysql_real_escape_string($_POST['id']); 

     mysql_query("UPDATE `pages` SET id = '{$edit}', name = '{$name}', location = '{$location}' WHERE id = '{$edit}'"); 
    } 
+0

已經完成了,它仍然沒有給我任何東西。 – futureslay

1

您沒有$ _POST ['submit'];

var_dump($_POST); 

添加名稱到您的提交按鈕。這會創建你缺少的post變量。

<input type="submit" name="submit" value="Edit!"> 

然後您的表格會更新。但是,您需要刷新頁面,因爲您在致電更新之前很久纔打電話給該選擇。

+0

請在提交按鈕中指出缺少的「名稱」屬性。這首先是造成問題的原因。 – Luceos

2

由於您的表單提交到同一頁面,這是發生了什麼......

$edit = mysql_real_escape_string($_GET['editid']); // THIS IS NULL FOR POSTS 

... 

if($edit != "") { // THIS WON'T BE TRUE FOR POSTS 

,因此,它永遠不會讓你的腳本的POST過程。重新組織您的腳本 - 您的POST處理代碼應該位於頂部(如果您繼續使用這種單腳本業務......您不應該這樣做)。

+0

另請參閱@Rob Adams的答案;提交不會發布,因爲沒有該名稱的輸入。 – Luceos

相關問題