2014-10-19 117 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的回答。

相关问题