2 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
這段代碼有很多問題,尤其是它非常不安全并且容易受到注入。在繼續(xù)之前,您應(yīng)該閱讀準(zhǔn)備好的陳述。對(duì)此的教程和答案無窮無盡,因此我不會(huì)在這里介紹它們。為了幫助新程序員(不久前我還是個(gè)新程序員),我將指出我認(rèn)為這里出現(xiàn)的問題:
$query1 = $con->query("SELECT * FROM room");
每次腳本運(yùn)行時(shí)都會(huì)運(yùn)行它。這是需要認(rèn)識(shí)到的關(guān)鍵事情。如果您加載頁面,或者提交帖子刪除,這種情況總會(huì)發(fā)生。這導(dǎo)致:
if($query1->num_rows > 0) { while($row1 = $query1->fetch_array()) { ...
您開始循環(huán),循環(huán)播放every
記錄。注意every
.
因此,對(duì)于每條記錄,您都需要檢查:
if(isset($_POST['delete'])) {...
這就是您的記錄被刪除的地方,也是 CBroe 在他的評(píng)論中所指出的。您相信(我認(rèn)為)您檢查了該個(gè)人記錄的刪除,但您只是檢查isset($_POST['delete'])
并且這樣做是為了EVERY
記錄。請(qǐng)記住,該POST
變量一直存在,直到腳本結(jié)束或刪除為止。因此,通過單擊“刪除”并提交該_POST
值,您可以為循環(huán)中的每個(gè)記錄傳遞此條件。
在進(jìn)一步討論之前,您應(yīng)該先消化一下這一點(diǎn),因?yàn)檫@是新程序員的常見錯(cuò)誤。請(qǐng)記住,計(jì)算機(jī)按順序讀取并執(zhí)行腳本,記住它也會(huì)按照
EXACTLY
您的要求執(zhí)行,僅此而已。典型的例子是描述泡一杯咖啡。如果我對(duì)你說“打開水壺,將咖啡放入杯子,加滿水,加牛奶”,你就會(huì)煮出一杯咖啡,但如果你對(duì)電腦說這句話,你最終最多只會(huì)穿著一臺(tái)電腦一個(gè)水壺正在尋找一個(gè)杯子來放咖啡并告訴你牛奶不是一個(gè)數(shù)字。
所以解決辦法。好吧,我不會(huì)為你寫它,有不同的選擇。您應(yīng)該將某種標(biāo)識(shí)符傳遞給特定于您想要的記錄的帖子,然后您需要檢查例如 isset POST[delete] && isset(POST['room_id'])
。然后,您需要決定執(zhí)行此操作的最佳位置,在腳本的開頭,在不同的腳本中,可能不在循環(huán)內(nèi)(這很少是優(yōu)秀編程的標(biāo)志)。如果您要?jiǎng)h除一條記錄,您可能應(yīng)該在為其創(chuàng)建輸出之前執(zhí)行此操作。(為什么收集一條記錄然后刪除它,這樣有效嗎?)。
如果您確實(shí)必須在循環(huán)內(nèi)執(zhí)行此操作,那么您需要在運(yùn)行刪除之前進(jìn)行某種檢查,以確保房間的 id 與帖子值的 id 相同。
希望這對(duì)您有所幫助,但請(qǐng)確保您作為緊急事項(xiàng)研究并開始使用準(zhǔn)備好的陳述 - 2020 年確實(shí)沒有理由不這樣做

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
在您的代碼中,您沒有遵循基本結(jié)構(gòu)。使用JS來實(shí)現(xiàn)編輯/刪除的點(diǎn)擊事件,并使用ajax調(diào)用來執(zhí)行操作。
這是基于您的粘貼的代碼的一種解決方案,它不是標(biāo)準(zhǔn)代碼,但可以幫助您解決問題。
$query1 = $con->query("SELECT * FROM room");
if($query1->num_rows > 0) {
while($row1 = $query1->fetch_array()) {
$idroom = $row1['idroom'];
$tr = "<tr>";
$tr .= "<td> $idroom </td>";
$tr .= "<td><form method='POST'>";
$tr .= "<input type='hidden' name='room_id' value='".$idroom."'>";
$tr .= "<input type='submit' name='delete' value='DELETE'> </form></td>";
$tr .= "</tr>";
echo $tr;
}
}
if(isset($_POST['delete'])) {
$roomId = $_POST['room_id'];
$query2 = $con->query("DELETE FROM room WHERE idroom='$roomId'");
}
- 2 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報(bào)