我有一个链接到PHP $ _SESSION数据的HTML表格,我希望在每个行中添加一个删除按钮,不仅删除HTML表格中的那一行,还删除$ _SESSION变量。
这是填充我的表格的代码:
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 :(得分: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 [&#39; cityData&#39;]的范围内删除,但基本想法就在那里。
答案 1 :(得分:1)
你在这里以错误的方式混合客户端和服务器端代码:(
“客户端”类似于用户的浏览器。当用户在浏览器上单击该按钮时,它将运行客户端代码(即JavaScript) - 您的PHP将不再存在于该阶段,因此您无权访问该数组。
从服务器请求页面时执行PHP。那时你可以执行你需要的任何计算,然后将文本响应(例如通过echo
)发送回用户的浏览器或客户端。
该按钮应该向您的服务器发出另一个请求,以便您可以使用PHP删除该行。然后您的PHP服务器应该将响应回送给请求的浏览器,以便用户知道它是否有效。
按钮上的链接需要提供一些其他详细信息,例如用户想要删除的行的索引,因此PHP脚本不会删除错误的链接。有关示例代码,请参阅下面的Dave Chen的答案。