放大数组并将动态数据插入mysql数据库

时间:2019-03-02 09:28:20

标签: php mysql

这是用于将动态数据插入mysql数据库的代码。

    $name = $_POST['name'];
    for ($i = 0; $i < count($name); $i++) {
            if ($name[$i] != "") {
                $test= implode(", ", (array)$name[$i]);                    
                print_r($test);
 $sql = "INSERT INTO employee_table (name)
                     VALUES ('$test')";
            if ($conn->query($sql) === true) {
                echo ('ok');
            }              
                }
        }
        $conn->close(); 

我使用implode(", ", (array)$name[$i])以逗号开头从$name返回一个字符串,但是当print_r($test);像这样时:

AlexBrownHelloHugo

我遇到了2个问题,希望您能给予帮助:

  • print_r($test);Alex,Brown,Hello,Hugo时的结果
  • $test [Alex,Brown,Hello,Hugo]的同一行存储到dabase中。

谢谢。

2 个答案:

答案 0 :(得分:1)

类似这样的东西:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.7/angular.min.js"></script>

<body ng-app="myapp">
  <div ng-controller="MyController">
    <input type="file" onchange="angular.element(this).scope().clickMe(this)"> 
  </div>
</body>

我想重新发布我发表的评论:

  

当您可以将数据作为相关表存储时,将数据存储为定界列表是一个坏主意。无论如何,我都会使用前导和尾部定界符将其另存为$names = empty($_POST['name']) ? [] : $_POST['name']; foreach($names AS $name){ if (!empty($name)) { $test= '['.implode(", ", (array)$name).']'; print_r($test); $sql = "INSERT INTO employee_table (name) VALUES ('$test')"; if ($conn->query($sql) === true) { echo ('ok'); } } } ,这样,当您查询它时,就可以这样做,Alex,Brown,Hello,Hugo,。区别在于,如果您有field LIKE '%,Alex,%'foo,some,bar并且您foo,something,bar注意没有field LIKE '%some%',那么您会发现其中的一些内容。要查询上面我用,显示的第一个和最后一个项目,它们将需要用,围绕它们。您可以使用,在爆炸等之前将其删除

更新

还有这个

  

不清楚trim($field, ',')的结构是$name还是implode($name[$i]),您在代码中使用第一个表示名称为impode($name)而不是[['foo','bar'], [...]]的代码这是您可能不希望多次存储的第二次。

所以您也许可以做到这一点:

['foo','bar', ...]

无循环,因为当您遍历名称计数时,您每次都插入相同的数据,但不超过names变量中的项数。

说明您的代码

因此,使用我的示例数据//$_POST['name'] = ['foo','bar', ...] //remove the loop //we can assign $name in the if condition and save a line or 2 //the second part, the assignment, will always return true. if (!empty($_POST['name']) && $name = $_POST['name']) { $test= '['.implode(',', (array)$name).']'; //changed mainly this line print_r($test); $sql = "INSERT INTO employee_table (name) VALUES ('$test')"; if ($conn->query($sql) === true) { echo 'ok'; } } 和原始代码的简化版本,您将可以这样做:

假设您在原始代码中表示的是$_POST['name'] = ['foo','bar', ...]而不是implode($name),这是唯一可以使您的数据看起来像我的示例数据的东西

implode($name[$i])

输出:

 //canned example data
$name = ['foo','bar'];

for ($i = 0; $i < count($name); $i++) {
    if ($name[$i] != "") {
        $test= implode(", ", (array)$name);  //changed from $name[$i] 

        //just output this stuff so we can see the results                 
        print_r($test);
        echo "\nINSERT INTO employee_table (name) VALUES ('$test')\n";
    }
}

Sandbox

如果应该很明显,但是如果您在上面的代码中将此行foo, bar INSERT INTO employee_table (name) VALUES ('foo, bar') foo, bar INSERT INTO employee_table (name) VALUES ('foo, bar') 更改为$test= implode(", ", (array)$name);,则输出将是这样的:

$test= '['.implode(',', (array)$name).'];

哪个仍然可以保存多于一次。因此,我们需要转储该循环,这基本上迫使我们进入了此更新顶部的代码。

希望这一切都有道理。

欢呼

答案 1 :(得分:0)

尝试使用此代码,实际上您的$_POST['name']将值存储为数组,因此您无需进行强制转换。

$name = $_POST['name'];
for ($i = 0; $i < count($name); $i++) {
      if ($name[$i] != "") {
          $test= '['.implode(', ', $_POST['name']).']';                    
          print_r($test);
          $sql = "INSERT INTO employee_table (name)
                     VALUES ('$test')";
          if ($conn->query($sql) === true) {
             echo ('ok');
          }              
      }
}
$conn->close();