javascript - 使用 PHP 和 JavaScript 分隔 SQL 插入的变量

标签 javascript php mysql variables insert

网格表通过 PHP/MySQL 显示,其中有一列用于用户将选中的复选框。名称为“checkMr[]”,如下所示:

 echo "<tr><td>
 <input type=\"checkbox\" id=\"{$Row[CONTAINER_NUMBER]}\" 
 data-info=\"{$Row[BOL_NUMBER]}\" data-to=\"{$Row[TO_NUMBER]}\" 
 name=\"checkMr[]\" />
 </td>";

正如您所注意到的,有 id、data-info 和 data-to 属性被发送到模式窗口。以下是将属性发送到模式窗口的 JavaScript:

 <script type="text/javascript">
   $(function()
   {
     $('a').click(function()
     {
       var selectedID = [];
       var selectedBL = [];
       var selectedTO = [];
       $(':checkbox[name="checkMr[]"]:checked').each(function()
       {
         selectedID.push($(this).attr('id'))
         selectedBL.push($(this).attr('data-info'))
         selectedTO.push($(this).attr('data-to'))
       });
       $(".modal-body .containerNumber").val( selectedID );
       $(".modal-body .bolNumber").val( selectedBL );
       $(".modal-body .toNumber").val( selectedTO );
     });
   });
 </script>

到目前为止一切顺利。模式通过 JavaScript 检索属性。我可以选择显示或不显示它们。以下是模式检索属性的方式:

 <div id="myModal">
   <div class="modal-body">
   <form action="" method="POST" name="modalForm">
     <input type="hidden" name="containerNumber" class="containerNumber" id="containerNumber" />
     <input type="hidden" name="bolNumber" class="bolNumber" id="bolNumber" />
     <input type="hidden" name="toNumber" class="toNumber" id="toNumber" />
   </form>
   </div>
 </div>

表单中还有其他字段可供用户输入数据,我只是选择不显示代码。但到目前为止,一切正常。有一个提交按钮,然后将表单数据发送到 PHP 变量。有一个 mysql INSERT 语句,然后更新必要的表。

这是 PHP 代码(在模式窗口内):

 <?php
 $bol = $_POST['bolNumber'];    
 $container = $_POST['containerNumber']; 
 $to = $_POST['toNumber'];  

 if(isset($_POST['submit'])){
 $bol = mysql_real_escape_string(stripslashes($bol));
 $container = mysql_real_escape_string(stripslashes($container));
 $to = mysql_real_escape_string(stripslashes($to));

 $sql_query_string = 
   "INSERT INTO myTable (bol, container_num, to_num)
   VALUES ('$bol', '$container', '$to')
 }
    if(mysql_query($sql_query_string)){
      echo ("<script language='javascript'>
             window.alert('Saved')
             </script>");
    }
    else{
      echo ("<script language='javascript'>
             window.alert('Not Saved')
             </script>");
   }
 ?>

所有这些都有效。用户选中一个复选框,模式窗口打开,用户填写其他表单字段,点击保存,只要没有问题,就会弹出相应的窗口并显示“已保存”。

问题是:当用户选中多个复选框时,模式确实会检索多个容器编号,并且我可以显示它。它们似乎已经用逗号分隔了。

当 PHP 变量保存多个容器编号(或 bol 编号)时,就会出现问题。容器编号需要分开,我想必须有一种方法 PHP 可以自动为每个容器编号创建多个 INSERT 语句。

我知道变量需要以某种方式放置在数组中。然后必须有一个 FOR 循环来读取每个容器并在存在逗号时将它们分隔开。

我只是不知道该怎么做。

最佳答案

当您使用 [] 通过 HTTP 发送数组值时,它们在 PHP 中已经是数组,因此您已经可以迭代它们了:

foreach ($_POST['bol'] as $bol) {
    "INSERT INTO bol VALUES ('$bol')";
}
<小时/>

您的查询很容易受到注入(inject)。您应该使用 PDO/mysqli 进行正确的参数化查询

关于javascript - 使用 PHP 和 JavaScript 分隔 SQL 插入的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817150/

相关文章:

PHP Mysql PDO 绑定(bind)变量的数量与 token 的数量不匹配

MySQL JOIN 空表只返回一行

c# - 根据数据库mysql填充datagridviewcombobox

javascript - 我怎样才能在javascript中的公式选项中放置一个变量

php - 克隆表行在 php 中失败,但通过 sql shell 成功

php - 变量进入数据库而不通过 $_POST 检索

mysql - 按时间戳排序,但受最近日期限制

javascript - 你能记录其他人使用 swagger 开发的 API 吗?

javascript - 扩展 jQuery 以制作像我创建的占位符

javascript - 使用 Map 的 Angular 6 HttpClient