【问题标题】:How to make array for add multiple row in a sql table by same form如何以相同的形式制作数组以在sql表中添加多行
【发布时间】:2015-03-23 10:31:55
【问题描述】:

我想通过表格在表格中添加多行。

我知道如何只创建一个数据数组,但在所有名称数组、所有详细信息数组、所有联系人数组的情况下,我不能这样做。

我也在这里阅读并在谷歌上搜索了很多文章,但我没有得到任何结果。

所以请帮我创建它?

所以我的发件人是:

<form action="" method="POST">
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<br />
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<br />
Name:    <input type="text" name="name[]" value="">
Detail:  <input type="text" name="detail[]" value="">
Address: <input type="text" name="add[]" value="">
<input type="submit" name="submit" id="submit" value="Submit">

我的 php 在 sql 中插入

include("../db.php");
global $dbh;
if(isset($_POST['submit'])){
$data = array(); // now how to do all single post array?
$name = mysqli_real_escape_string($_POST['name']);
$detail = mysqli_real_escape_string($_POST['detail']);
$add = mysqli_real_escape_string($_POST['add']);

$result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$name','$detail','$add')");

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    用这个替换你的代码:

    include("../db.php");
    global $dbh;
    if(isset($_POST['submit'])){
       $data = array(); // now how to do all single post array?
       $names = $_POST['name'];
       $details = $_POST['detail'];
       $adds    = $_POST['add'];
    
       for($i = 0; $i < count($names); $i++)
    
          $curr_name = mysqli_real_escape_string($names[$i]);
          $curr_detail = mysqli_real_escape_string($details[$i]);
          $curr_add = mysqli_real_escape_string($adds[$i]);
    
          $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','$curr_name','$curr_detail','$curr_add')");
       }
    
    }
    

    如果您的 id 字段是自动递增字段,我建议您不要手动插入 id,尤其是当您传递一个空字符串时。相反,将插入代码替换为:

    $result=mysqli_query($dbh,"INSERT INTO varify (name,detail,add) VALUES('$curr_name','$curr_detail','$curr_add')");
    

    【讨论】:

      【解决方案2】:

      当然首先你需要循环它们,你可以使用foreach。然后您可以使用 foreach 中的键来访问表单上其他排列的索引:

      粗略的例子:

      if(isset($_POST['submit'])) {
      
          foreach($_POST['name'] as $k => $name) {
              $name = mysqli_real_escape_string($dbh, $name);
              $detail = mysqli_real_escape_string($dbh, $_POST['detail'][$k]);
              $add = mysqli_real_escape_string($dbh, $_POST['add'][$k]);
      
              // continue insertion
          }
      }
      

      或者使用准备好的语句:

      if(isset($_POST['submit'])) {
          foreach($_POST['name'] as $k => $name) {
              $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)');
              $insert->bind_value('sss', $name, $_POST['detail'][$k], $_POST['add'][$k]);
              $insert->execute();
          }
      }
      

      另一种选择是在您的 html 标记表单中创建分组结构。

      使用名称分组内的键对它们进行分组。所以标记看起来像这样:

      <form action="" method="POST">
      Name:    <input type="text" name="input[0][name]" value="">
      Detail:  <input type="text" name="input[0][detail]" value="">
      Address: <input type="text" name="input[0][add]" value="">
      <br />
      Name:    <input type="text" name="input[1][name]" value="">
      Detail:  <input type="text" name="input[1][detail]" value="">
      Address: <input type="text" name="input[1][add]" value="">
      <br />
      Name:    <input type="text" name="input[2][name]" value="">
      Detail:  <input type="text" name="input[2][detail]" value="">
      Address: <input type="text" name="input[2][add]" value="">
      <br />
      <input type="submit" name="submit" id="submit" value="Submit">
      

      当你在 PHP 中处理它时,现在它们按行分组并且可以像这样访问:

      <?php
      
      if(isset($_POST['submit'])) {
          $input = $_POST['input'];
      
          foreach($input as $values) {
              if(!empty($values['name']) && !empty($values['detail']) && !empty($values['add'])) {
                  $insert = $db->prepare('INSERT INTO varify (id, name, detail, add) VALUES('', ?, ?, ?)');
                  $insert->bind_value('sss', $values['name'], $values['detail'], $values['add']);
                  $insert->execute();
              }   
          }
      }
      

      【讨论】:

      • 好的,先生,如果我填写 2 个字段,如(名称、详细信息、添加)添加前 2 个输入并保持最后一个为空白,它也会在 sql 中添加一个空白行。如何预防?
      • @koc 您指的是这个答案中的哪个 PHP 代码 sn-p?这样我也可以在这个答案中添加它
      • 对不起,这是我的附加问题。你能给我一个解决它的参考吗?谢谢你,先生。
      • @koc 我稍微修改了一下,最后一个使用分组行输入的 sn-p,所以它必须处理一个空集
      【解决方案3】:

      这样使用

         <?
      if(isset($_POST['submit'])){
              $1=0;
              foreach($_POST['name'] as $key=>$inp)
              {
              $name = mysqli_real_escape_string($_POST['name'][$i]);
              $detail = mysqli_real_escape_string($_POST['detail'][$i]);
              $add = mysqli_real_escape_string($_POST['add'][$i]);
              $result=mysqli_query($dbh,"INSERT INTO varify (id,name,detail,add) VALUES('','".$name."','".$detail."','".$add."')");
      
              }
              $1++;
      }
              ?>
      

      【讨论】:

        【解决方案4】:

        使用foreach循环创建一个数组

        $data = '(';
        foreach($_POST['name'] as $key => $name){ //here use a mandatory field as foreach paremeter
           $data .= "'".mysqli_real_escape_string($name)."'", "'".mysqli_real_escape_string($_POST['detail'][$key])."'", "'".mysqli_real_escape_string($_POST['add'][$key])."'";
           $data .= '),';
        }
        $data = rtirm($data, ',');
        $result=mysqli_query($dbh,"INSERT INTO varify (name, detail, add) VALUES". $data);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-06
          相关资源
          最近更新 更多