【问题标题】:How to store data to MySQL for array input如何将数据存储到 MySQL 以进行数组输入
【发布时间】:2011-03-06 00:10:45
【问题描述】:

希望我的问题对帖子是正确的。

  <form action="process.php?id=<?php echo intval($order['id']);?>" method="post">
  <ul>
  <?php
  $sd = 'SELECT * FROM download WHERE pid IN ('.$order['pid'].') ORDER BY pid ASC'; // pid IN (3,4,5)
  $qd = $db->rq($sd);
  $no = 1; while($download = $db->fetch($qd)) {
  ?>
  <li>
  <?php echo $no; ?> <?php echo $download['title']; ?>
  <input type="hidden" name="mid[]" value="<?php echo $order['mid']; ?>" />
  <input type="hidden" name="pid[]" value="<?php echo $download['pid']; ?>" />
  </li>
  <?php $no++; } ?>
  </ul>
  <input type="submit" name="submit" value="Submit" /> 
  </form>

输出

  1. 索尼爱立信驱动程序
  2. 索尼爱立信应用
  3. 三星驱动程序
  4. 摩托罗拉驱动程序

问题

  1. 如何将数据Output 存储(保存)到process.php 下方的表结构中
  2. 数据将被保存在这样的地方。

    id | mid | pid | title
    -----------------------------------------
    1  |  1  |  3  |  Sony Erricson Drivers
    -----------------------------------------
    2  |  1  |  3  |  Sony Erricson Apps
    -----------------------------------------
    3  |  1  |  4  |  Samsung Drivers
    -----------------------------------------
    4  |  1  |  5  |  Motorola Drivers  
    -----------------------------------------
    

process.php

if (isset($_POST['submit']) && !empty($_POST['submit'])) {
// I'm blur how to get dynamic mid[] & pid[] here
}

【问题讨论】:

    标签: php mysql arrays normalization


    【解决方案1】:

    您可以简单地对 $_POST['mid'] 和 $_POST['pid'] 数组进行循环,如下所示:

    for ($i=0; $i<count($_POST['mid']); $i++)
    {
      $mid = $_POST['mid'][$i];
      $pid = $_POST['pid'][$i];
    }
    

    如果您也想传递项目的名称,您可以像发送“mid”和“pid”字段一样传递它。

    【讨论】:

      【解决方案2】:

      为标题创建第三个隐藏字段,例如:

       <input type="hidden" name="title[]" value="<?php echo $download['title']; ?>" />
       <input type="hidden" name="mid[]" value="<?php echo $order['mid']; ?>" />
       <input type="hidden" name="pid[]" value="<?php echo $download['pid']; ?>" />
      

      现在你可以像这样存储它,假设你的页面被提交到process.php,这就是你应该放在那里的:

      if (isset($_POST['submit']))
      {
        for($i = 0; $i<=count($_POST['title']); $i++)
        {
           $title = mysql_real_escape_string($_POST['title'][$i]);
           $mid = intval($_POST['mid'][$i]);
           $pid = intval($_POST['pid'][$i]);
      
           // database code
           $query = "insert into table set title = '$title', mid = $mid, pid = $pid";
           // mysql_query and/or more code....
        }
      }
      

      【讨论】:

      • 感谢代码和解释。它工作得很好。只有一个问题,当存储到 db 的数据在自动增量的last id 上有空的mid pid title
      • @kampit:不能说,你应该检查你的代码,知道这些数组中有多少东西。
      • 好的,已修复。我更改了for($i = 0; $i &lt; count($_POST['title']);) 并将$i++; 放在最后一个} 之前
      • @kampit:很高兴知道,我现在正要写这个:)
      【解决方案3】:

      通过访问POST 变量,您可以像检查submit 一样获得mid[]pid[] 的值:

      $mid = $_POST['mid'];
      $pid = $_POST['pid'];
      

      由于它们是作为数组发布的,因此它们将是 $_POST 变量中的数组。您还可以通过以下方式检查单个 $_POST 变量或整个 $_POST 变量的结构:

      var_dump($_POST['mid']);
      var_dump($_POST);
      

      这是一个有用的函数,可用于调试或找出您不确定其内容的变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-18
        • 2012-04-28
        • 2021-11-06
        • 2011-03-25
        • 2014-06-02
        • 2011-06-09
        • 1970-01-01
        相关资源
        最近更新 更多