javascript - 如何使用 PHP、javascript mysql 事务将输入的数组值插入到数据库中

标签 javascript php jquery html mysql

我的网页有很多行,有两个输入。可能有 10 行,也可能有 100 行,这取决于按钮 addP 被点击了多少次。这些输入值应使用 idc_addDVC.php 插入到 IDC 表中。

我想对许多输入数据使用 while 循环。但不幸的是,这些数据不能用我的 idc_addDVC.php 插入到 IDC 表中。

提交后 ClOUDT 和 IDC 表什么都没有显示。这是我的 JS 代码:

<script>
var aDWI=1;
function addPf()
{
    newrow = '<tr><td style="width:25%" colspan="2"><input style="width:98%" name="enName'+aDWI+'"></td><td style="width:85%" colspan="2"><input style="width:98%" name="enID'+aDWI+'"></td></tr>'; 
    $(newrow).insertAfter($('#staTable tr:eq('+aDWI+')'));
     aDWI = aDWI + 1;   
    $('#engID').attr("value",aDWI);
}
</script>

这是我的 html 代码:

<div>
  <form action="idc_addDVC.php?act=add&table=IDC" method="POST">
    <table>
      <tr>
          <input type="button" id="addP" onclick="addPf()" value="AP">
      </tr>
      <tr>
         <input type="text"  name="enName">
         <input type="text"  name="enID">
      </tr>
      <tr>
          newrow is added here
      </tr>
      <tr>
         <td>
           <input type="submit" value="submitBtn">
           <input type="hidden"  id="engID" value="1" name="engRow">
         </td>
     </tr>
    </table>
 </form>
</div>

这是失败的 idc_addDVC.php 代码:

<?php
 if($_GET["act"]=="add")
{
   $conn=new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'root' , 'xxx');

   $query="begin declare i int;
           set i=1;
           insert into ClOUDT (customer) values ('JOHN');
           while i < ".$_POST['engRow']."
           do
             insert into  IDC (name,id,cloudeid) values('".$_POST['enName'+i]."','".$_POST['enID'+i]."',LAST_INSERT_ID());
           set i=i+1;
           end while; 
           commit;";
   $stmt=$conn->query($query);
  echo "success";
  ......
 }
 else
 {
   echo "fail";
   ......
 }
}
?>

成功的idc_addDVC.php代码如下:

 <?php
 if($_GET["act"]=="add")
{
   $conn=new PDO('mysql:host=localhost;port=3306;dbname=xxx','root','xxx');

   $query="begin ;
           insert into ClOUDT (customer) values ('JOHN');
           insert into  IDC (name,id,cloudeid) values('".$_POST['enName']."','".$_POST['enID']."',LAST_INSERT_ID());
           commit;";
   $stmt=$conn->query($query);
  echo "success";
  ......
 }
 else
 {
   echo "fail";
   ......
 }
}
?>

我想 idc_addDVC.php 的 $query 中的 'enName'+i 是错误的。但是我不知道如何获取动态输入值。这很复杂,谁能帮助我?

最佳答案

HTML

删除 onclick 属性并使用 jQuery 附加 onclick 事件处理程序。

<input type="button" id="addP" value="AP">

JavaScript

在构建输入名称时使用数组符号 []。这使得之后循环遍历 POSTed 字段变得更加容易。并且避免您必须使用 engRow 跟踪最后一行。

$('#addP').click(function () {
    $('#staTable tr:last-child').before('
        <tr><td colspan="2" style="width:25%"><input name="enName[]" style="width:98%"></td></tr>
    ');
});

PHP

我会在事务而不是存储过程中执行批量插入。

<?php
// turn on error reporting in case
error_reporting(E_ALL);
ini_set('display_errors', 1);

// wrong: == (comparaison), not = (assignment)
if ($_GET['act'] == 'add') {
    try {
        $conn=new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'root' , 'xxx');
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $conn->beginTransaction();

        // wrong: INSERT INTO, not INSET INTO
        $sth = $conn->prepare("INSERT INTO cloudt(customer) VALUES('JOHN')");             
        $sth->execute();
        $cloudeid = $conn->lastInsertId();

        // $_POST['enName'] should be an array

        foreach ($_POST['enName'] as $name) {
            $sth = $conn->prepare("INSERT INTO idc(name, cloudeid) VALUES(?, ?)");
            $sth->execute(array($name, $cloudeid));
        }
        $conn->commit();
        echo "success";
    } catch (PDOException $e) {
        echo $e->getMessage();
        $conn->rollBack();
        echo "fail";
    }
}
?>

有用的读物​​

关于javascript - 如何使用 PHP、javascript mysql 事务将输入的数组值插入到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45561766/

相关文章:

javascript - Twitter Bootstrap 下拉菜单——奇怪的点击行为

javascript - 我可以使用三个 js ExtrudeGeometry 在尖锐的路径上挤出一个形状吗?

javascript - 在这种情况下,多维数组值分配如何工作?

php 查找表情符号 [更新现有代码]

php - PHP 变量中的 Stripslashes 和换行符

jquery - 如何在点击时显示菜单

javascript - $.ajax json GET 在页面加载后恢复所有 jquery

javascript - dojo:通过 dom 节点销毁所有小部件

php - 了解数组排序行为 php

javascript - 将表单结果从 php 文件重定向到另一个文件