2013-05-19 244 views
0

我遇到了一個問題,我試圖從Mysql表中刪除一行。這是我寫的代碼:刪除行留下空單元格?

$sql = "DELETE FROM members WHERE name='$_POST[delmember]'"; 
$retval = mysql_query($sql); 
if(!$retval) { 
    die("Couldn't delete data: " . mysql_error()); 
} 

代碼打印我的數據庫:

$sql = 'SELECT name FROM members'; 
$retval = mysql_query($sql, $conn); 
if(!$retval) { 
     die("Couldn't get data: " . mysql_error()); 
    } 
while($row = mysql_fetch_array($retval, MYSQL_NUM)) { 
    if($col == $cols) { 
      $col = 0; 
      echo '</tr><tr>'; 
     } 
     echo '<td align="center"><a class="stats" href="members.html?stats='.$row[0].'">' . $row[0] . '</a></td>'; 
     $col++; 
} 

這實際上「清空」行,但留下當我打印我的數據,實際上顯示了一個空單元格。我必須然後去phpMyAdmin手動刪除空的空間。我不明白爲什麼會這樣做。

我還是個初學者,程序設計真的只是我的一個愛好,但如果有人會給我提供線索並指向正確的方向,我將不勝感激。

非常感謝!

+1

如果你運行'SELECT * FROM成員會發生什麼情況,其中name = '{$ _ POST [' delmember ']}''並獲得關聯數組** **後,你已經刪除的行? –

+1

**不要**從'$ _POST'將用戶變量注入查詢字符串。你必須使用[適當的SQL轉義方法](http://bobby-tables.com/php)轉義任何和所有的值。您還將使用在未來版本的PHP中將被刪除的不推薦使用的'mysql_query'接口。如果你想讓你的代碼繼續工作,你需要切換到支持的東西,如[PDO](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps- PDO換數據庫訪問/)。如果你剛剛開始使用PHP,[嘗試遵循最佳實踐](http://biasedphp.com/php-commandments)。 – tadman

+0

我知道我做錯了很多事情,我會研究一下你們先生們的建議,以使我的代碼合適和清潔。然而,我仍然有我的下面的代碼(目前'工作',尚未棄用)的問題。另外爲什麼你建議不在我的查詢字符串中使用$ _POST?是關於SQL注入攻擊嗎?如果是這樣,你建議使用什麼? –

回答

1

爲了更好地學習MySQL語法,請啓動控制檯到MySQL會話並直接輸入一些命令。您的語法看起來正確,但我們不知道您使用的數據庫規則或您正在查看的視圖。

很難判斷您是否看到phpMyAdmin的工件,或者這是數據庫某些其他方面的後果,或者是您用來「打印」數據的代碼的結果。

+0

感謝您的及時回覆。有關更多信息,我只使用一個名爲name的字段。我沒有附加任何ID,所以我會假設通過刪除這個名稱字段,整個行將被刪除。我將添加我用於在原始帖子上打印數據的代碼。 –

+0

@JonathanLachapelle我們仍然無法看到用來打印數據的代碼,'(代碼來組織和打印我的數組)'實際上沒有幫助。 –

+0

@Jake Ball我只是把整個事情,但這真的不是這裏的問題。我的數組格式工作起來非常好,問題在於從我的數據庫中刪除條目,當我嘗試這樣做時,它不會刪除字段,只會清空數據並留下空行,然後由我的打印顯示。 –

1

嘗試這樣。

$sql = "DELETE FROM members WHERE name='" . mysql_real_escape_string($_POST["delmember"]) . "'"; 

順便說一句,如果name場不是唯一的話,就不是一個好主意按名稱刪除用戶,你應該使用id字段作爲主鍵,用ID來進行操作。

另一件事是使用mysqli或pdo代替mysql。

read the warning

+1

將** mysql_real_escape_string **添加到被訪問的變量在這件事上沒有任何區別。 –

+0

我沒有添加轉義功能,他使用發佈數據錯誤,我實際上糾正了它。 – rcpayan

+0

事實上@rcpayan OP的工作原理,即使它確實會發出警告。 –