【问题标题】:PHP Implode not separating the array [closed]PHP Implode不分离数组[关闭]
【发布时间】:2013-01-24 17:21:17
【问题描述】:

我正在使用 $_POST 从表单页面中提取 MySQL 查询。上一页正在发送来自数据库的 ID 列表。但是,当我使用 implode 时,它​​会回显一个字符串:

2210222022362244

即使我使用的是 Implode 函数:

$variable = implode(',' ,$_POST['job_ids']);
echo $variable

我也尝试过变体:

$variable = implode(',' ,(array)$_POST['job_ids']);
echo $variable

但是,这会回显相同的字符串。我还尝试了一个“get”,它产生了这个 URL 字符串,它产生了相同的:“2210222022362244”字符串:

testing.php?job_ids%5B%5D=%0D%0A%09%09%09%09%09++%09%09%0D%0A%09%09%09%09%09++% 09%092210222022362244%09%09%09%09%09++%09%09%0D%0A%09%09%09%09%09++%09%09&supervisorid=58

我正在寻找的输出是:

2210,2220,2236,2244

我想将这些值存储在一个变量中,然后在 MySQL 更新查询中使用它们。我假设这意味着我从上一页发送的数组有问题。我在该页面上使用的代码在这里:

<form action="testing.php" method="post">
<input type="hidden" name="job_ids[]" value="

<?php
$senditbaby=0;

while ($senditbaby < $num)                      
{
$senditbabyID=mysql_result($result,$senditbaby,"job_id");                       
echo $senditbabyID;                     
$senditbaby++;
}

?>
">

<div class="modal-footer">
<input type="submit" class="btn btn-primary" value="Approve all tickets">
</div></form>

非常感谢您的帮助!

【问题讨论】:

  • 首先在变量中构建值,然后进行输出。这允许您在输出它之前调试变量。 - 错误很简单:您只是缺少添加逗号。
  • 离题但很重要:首先,mysql_xxx() 函数已被弃用;代码应改为使用mysqli_xx()PDO。其次,请确保传递给查询的 ID 已经过清理。如果您没有正确逃避它们,您的网站将面临被 SQL 注入攻击入侵的严重风险。

标签: php html mysql arrays


【解决方案1】:

job_ids[]只有一个输入,所以$_POST['job_ids']只有一个值。因此,没有什么可以内爆的。您为job_ids[] 创建值的循环只是在一个接一个地呼应这些值,而不是以任何方式将它们拆分。

【讨论】:

    【解决方案2】:

    试试这个:

    $variable = implode(',', str_split($_POST['job_ids'], 4));
    echo $variable
    

    【讨论】:

      【解决方案3】:

      你真的为一个简单的错误写了一个很长的问题:你错过了输出逗号,所以没有。

      不过我的建议是:先收集数据,再关注输出:

      function get_job_ids_array($num, $result)
      {
          $ids = array();
          $senditbaby = 0;
      
          while ($senditbaby < $num)                      
          {
               $senditbabyID = mysql_result($result, $senditbaby, "job_id");
               $ids[] = $senditbabyID;
               $senditbaby++;
          }
      
          return $ids;
      }
      

      并获得逗号分隔的列表:

      echo implode(', ', get_job_ids_array($num, $result));
      

      【讨论】:

        【解决方案4】:

        当您手动解码输入时,它确实是“2210222022362244”,没有任何分隔符。所以没有办法告诉你的数字在输入中彼此分开。如果每个数字都是四位数字,则需要为此编写特定代码,因为这是 php 无法猜测的。

        此外,php 将 $_POST['job_ids'] 视为字符串,您需要先将其分解为数组。这仅仅是因为没有通过 HTTP 直接传输数组的概念。

        可能只是示例中的错误:您使用 $_POST,但示例 url 使用 GET,因此您实际上需要 $_GET['job_ids']

        【讨论】:

          【解决方案5】:

          您可以使用GROUP_CONCAT 在单个查询中获取逗号分隔的job_id。这种方式有助于避免内爆和多重查询。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-10-12
            • 2013-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多