2014-10-19 116 views
0

我有一個鏈接到PHP $ _SESSION數據的HTML表,我希望向每個行添加一個Delete按鈕,該按鈕不僅從該行刪除該行HTML表格,而且還來自$ _SESSION變量。將PHP數組名稱轉換爲字符串的最佳方法

這是我的填充表的代碼:

tableData.php

// echo the table headings 
echo <<<HERE 
<tr> 
    <th>CityID</th> 
    <th>State</th> 
    <th>City</th> 
    <th></th> 
</tr> 
HERE; 

if (isset($_SESSION['cityData'])) 
{ 

    foreach($_SESSION['cityData'] as $city) 
    { 
     echo "<tr>"; 
     // print each row of data 
     foreach($city as $data) 
     { 
      echo "<td>" . $data . "</td>"; 
     } 
     //echo '<td><button action="<?php unset(' . $_SESSION['cityData'][key($_SESSION['cityData'])] . ')?>">Delete Row</button></td>'; 
     echo "</tr>"; 
    } 

} 

我註釋掉線, echo '<td><button action="<?php unset(' . $_SESSION['cityData'][key($_SESSION['cityData'])] . ')?>">Delete Row</button></td>'; 是創造,我想創建按鈕行,做我想做的事情。我試圖找出命名我想要的數組的最佳方法。

P.S.我知道,我應該讓它調用一些執行這兩個任務的其他函數,只是,如果像我那樣傳遞數組,它會抱怨「數組到字符串轉換」。有沒有辦法做到我想要做的,乾淨?

+0

呵呵,我知道implode()函數,以及它需要一個令牌參數的事實:http://us1.php.net/manual/en/function.implode.php – 2014-10-19 07:04:17

+0

這是生成一個靜態HTML文件並將其發送到瀏覽器。如果你想要做某件事,你需要提交一份表格。您無法通過網頁瀏覽器直接在頁面上執行服務器上的PHP代碼。 – miken32 2014-10-19 07:32:56

回答

1

這並不是那麼簡單。您需要讓按鈕提交到鏈接,然後讓PHP取消設置內容。

foreach($_SESSION['cityData'] as $index => $city) //added $index => 
{ 
    echo "<tr>"; 
    // print each row of data 
    foreach($city as $data) 
    { 
     echo "<td>" . $data . "</td>"; 
    } 
    echo '<td><form method="post" action=""><input type="hidden" name="delete" value="' . $index . '"><input type="submit" value="Delete Row"></form></td>'; 
    echo "</tr>"; 
} 

所以我增加了一個表格,一個按鈕,將提交給數據表示的行數,所以當你的客戶端點擊該按鈕,它會提交問題,行號將作爲POST變量傳遞。

tableData.php的頂部,你可以有邏輯處理刪除。只需檢查是否設置了刪除,然後嘗試從那裏取消設置。

if (isset($_POST['delete'])) 
    unset($_SESSION['cityData'][$_POST['delete']]); 

你會希望有進一步的驗證,檢查是否POST的$ _SESSION [「cityData」]的範圍之內刪除,但其基本思想是存在的。

+0

有沒有什麼辦法讓它POST? – 2014-10-19 07:24:26

+0

是的沒問題。你將只有很多帶有按鈕的小表單,邏輯保持不變(只需使用$ _POST而不是$ _GET)。我更新了上面的代碼以反映這些更改。 – 2014-10-19 07:28:04

+0

該元素不可見,不可點擊.... – 2014-10-19 07:37:16

1

你混合客戶端和服務器端的代碼在這裏走錯了路:(

的「客戶」是有點像一個用戶的瀏覽器。當用戶點擊瀏覽器上的按鈕,它會運行客戶端代碼(即JavaScript) - 您的PHP將不再存在於該階段,因此您無法訪問該陣列。

PHP在您的服務器請求頁面時執行。可以執行任何您需要的計算,然後將文本響應(例如,通過echo)發送回用戶的瀏覽器或任何客戶端。

該按鈕應該向您的服務器發出另一個請求,以便您可以使用PHP刪除該行。然後你的PHP服務器應該回應請求瀏覽器的迴應,以便用戶知道它是否有效。

該按鈕上的鏈接將需要提供一些額外的細節,如用戶想要刪除的行的索引,所以PHP腳本不會刪除錯誤的。有關示例代碼,請參閱Dave Chen的回答。

相關問題