将PHP数组名称转换为字符串的最佳方法

时间:2014-10-19 06:59:47

标签: php html arrays session

我有一个链接到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。我知道,我应该让它调用其他一些执行这两项任务的函数,只是,如果我像我一样传递数组,它会抱怨“数组到字符串转换”。有没有办法干净地做我想做的事情?

2 个答案:

答案 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的答案。