2012-09-07 112 views
0

我有這樣的代碼至今: 是一個查詢循環如何從HTML表中刪除記錄?

while ($row = mysql_fetch_assoc($result)) { 
    echo "<tr>"; 
    echo "<td>" . $row['name'] . "</td>"; 
    echo "<td>" . $row['age'] . "</td>"; 
    echo "<td>" . $row['breed'] . "</td>"; 
    if($row['neuteredOspayed']=="1"){ 
    echo "<td>" . "neutered" . "</td>"; 
    }else 
    echo "<td>" . "spayed". "</td>"; 
    echo "<td>" . $row['priceFee'] . "</td>"; 
    if($row['housebroken']=="1"){ 
    echo "<td>" . "yes" . "</td>"; 
    }else 
    echo "<td>" . "no". "</td>"; 
    if($row['goodwithdogs']=="1"){ 
    echo "<td>" . "yes" . "</td>"; 
    }else 
    echo "<td>" . "no". "</td>"; 
    if($row['goodwithcats']=="1"){ 
    echo "<td>" . "yes" . "</td>"; 
    }else 
    echo "<td>" . "no". "</td>"; 
    echo "<td>" . $row['status'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 

現在過程中產生的這種形式,有沒有辦法把一個鏈接說「刪除」旁邊的每個結果的方法嗎?例如旁邊的狀態字段? 這是它的樣子:enter image description here

爲了讓這個刪除,我想我需要以某種方式發現記錄。我需要的是採取動物的名字。例如,如何從表中獲取「Sparky」值並將其分配給變量?如果我有名字,我將能夠進行檢查並運行查詢,女巫將刪除該記錄。

+0

阿賈克斯是你的朋友 – Wearybands

+0

你需要一個主鍵爲你的表,你有它嗎? – Jaanus

+0

是不是有辦法做到這一點與PHP? –

回答

1

你必須提交表格,做這個動作....

<input type="submit" name="submit" value="Delete" /> 

提交表單會重定向到一些頁之後。在該頁面中,您獲得了所有發佈的值。在這種情況下,您可以通過使用記錄ID刪除記錄,否則使用名稱進行適當的記錄。

$query = "DELETE FROM table_name WHERE name='$_POST['name']'"; 

         (or) 

$query = "DELETE FROM table_name WHERE id='$_POST['id']'"; 

執行此操作後,您必須將URL重定向到該頁面。

      (or) 

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

在這個文件中,你必須這樣寫的......

$id = $_REQUEST['id']; 
$query = "DELETE FROM table_name WHERE id='$id'"; 
2

您將不得不使用Javascript和AJAX。

基本上,您需要在單元格中放置一個按鈕,每行一個,並且單擊時,將要刪除的記錄的id通過AJAX傳遞迴PHP腳本,然後將記錄從數據庫。當它被點擊時它也應該隱藏該行。

我建議使用jQuery的.ajax(),因爲原始的XHR充其量是痛苦的。

只有PHP才能做到這一點,因爲HTTP是無狀態的。一旦你的網頁被加載,HTML和PHP部分就完成並修復了。您必須使用Javascript才能發出連續的請求。

另外,正如bcmcfc指出的那樣,您也可以只有一個指向腳本的超鏈接,它將刪除數據庫中的記錄。

+0

只要頁面不必實時更新,完全可以在沒有JavaScript的情況下完成此操作。只需提供一個按鈕,將瀏覽器發送到刪除記錄並重新加載頁面的腳本。 –

+0

絕對不需要使用Ajax來做到這一點。您*可以*使用Ajax以更好的方式更新頁面,但它不是'必須的'。 – GolezTrol

2

你會需要像這樣在你的while循環:

echo '<td><a href="path/to/delete.php?name='.$row['name'].'">Delete</a></td>'; 

使用表的主鍵會比名字更好,但 - 這個名字在DB獨特之處?假設有一個PK,這就是所謂id

echo '<td><a href="path/to/delete.php?id='.$row['id'].'">Delete</a></td>'; 
+2

@Aelios OP專門詢問了一個刪除他的記錄的非JavaScript PHP方法。 – bcmcfc

+0

是的,每個用戶都可以擁有獨特名字的寵物。但它不是一個很好的解決方案,因爲他可以有幾個同名的寵物,誰知道,:) –

+1

@Aelios:但仍然是一個合理的解決方案。事實上,爲了使網站在沒有JavaScript的情況下優雅地退化,無論如何,這個機制*應該到位。 –

0

你添加一個「elemID」屬性,每個<tr> S和一個新的類,這將是個人的每一行(例如,ELEM + the id):

<tr elemId="12" class="elem12">...</tr> 

然後,刪除鏈接,你可以使用AJAX調用從您的數據庫中刪除該行的頁面,傳遞elemID作爲參數傳遞給這個函數:

function deleteRow(thisElemID) { 
$.ajax({ 
    url: yourURL, 
    data: {'elemID', thisElemID }, 
    success: function() { 
     $('.elem'+thisElemID).remove(); 
    } 
}); 
} 

更多關於$ .ajax here

2

Php只是用於頁面生成,一旦您生成了該表,您將無法修改它。 但是,您可以創建一個新的get請求,並指定一個要刪除的行名的參數,但您必須更改服務器的php代碼才能考慮此參數。

據我所知,最好的是使用javascript:你爲每一行分配一個td id,然後你編寫一個簡單的函數來刪除該行。

0

在表格中創建另一個單元格並調用該按鈕的ajax onclik。裏面的Ajax調用刪除pecific行

0

使用「刪除」表格的每一行。

最好的方法是爲每一行添加一個帶有提交按鈕的表單。每個表單都有一個隱藏字段,其中包含要刪除的記錄的標識(或名稱,如果必須的話)。將表單的方法設置爲'post'。

原因:

  • 刪除鏈接(A HREF)可以被索引,方便地添加書籤。您每次瀏覽Google歷史記錄時都不希望寵物被刪除,或者用戶瀏覽其歷史記錄。
  • method ='get'form也可能導致 url被標記和/或顯示在歷史記錄中。帶表格的方法 將完全不使用Javascript。

除此之外,

  • 任何解決方案(包括形式和鏈接)可以很容易地「升級」與阿賈克斯的解決方案更好的用戶體驗,但是這始終是一個額外的,沒有核心功能。
  • 如果您願意,可以將提交按鈕設置爲鏈接樣式。
  • 如果您實施此解決方案,請使用post-redirect-get pattern

也就是說,假設你想從數據庫中實際刪除記錄。如果你只是想改變HTML,Javascript解決方案會更有意義。

+0

刪除不應該是POST請求。在一個RESTful服務中,它應該是一個DELETE請求,但在這種情況下,GET請求更合適。如果Googlebot能夠通過點擊鏈接刪除記錄,那麼就有更大的問題需要擔心 - 刪除操作應該要求正確的身份驗證! – WildlyInaccurate

+0

當然,但它不僅僅是Google。同時登錄的用戶將能夠保存刪除URL,或者意外打開它們,因爲瀏覽器會保存它們。在一個純粹的RESTful場景中,你是對的,但有一些例外需要記住,其中之一就是瀏覽器的設計更多的是瀏覽而不是完整的數據管理Web應用程序。但是你是對的,DELETE更純粹,也應該是冪等的,所以如果你可以設法使用method ='delete'來實現它,那確實是更好的選擇。 – GolezTrol

1
//Add this form before the end of the while loop 

    <form action="#" method="post"> 
    <input type="hidden" name="name" value="<?php echo $row['name']?>"> 
    <input type="submit" name="delete" value="delete"> 
    </form> 

//Add this at the end of the coding 

<?php 

    if(isset($_POST['delete'])) 
    { 
    //database connection 
    $sql="DELETE FROM `table_name` WHERE `name`='{$_POST['name']}'"; 
    $queryEXE=mysql_query($sql); 
    } 

?> 
+0

我得到了一個內部服務器錯誤:( –