【问题标题】:How to insert data from a dynamic textbox using Ajax and PHP如何使用 Ajax 和 PHP 从动态文本框中插入数据
【发布时间】:2018-05-18 03:47:11
【问题描述】:

我的引导模式中有一个动态文本框,但它只保存第一项。但是,我尝试使用本机提交而不使用 Ajax,它会捕获所有输入的数据。我不知道我的 Ajax 代码哪里出错了。我只想插入从动态文本框输入的所有数据而不重新加载页面。这是我的示例代码:

 <!-- start dynamic fields for parameter -->
    <div class="row">
        <div class="col-md-12">
          <div class="input-group control-group after-add-more">
          <?php require 'lab/pardrop.php'; ?> <!--dropdown list for parnam-->
          </select>
         <input type="text" name="parval[]" class="form-control" id="parval" 
               placeholder="Value" >
         <button class="btn btn-success addmore" type="button" data- 
               toggle="tooltip" title="Add Parameter">
            <i class="glyphicon glyphicon-plus"></i></button>
        </div>
        </div>
    </div>
<!--start hidden fields-->  
     <div class="row">
        <div class="col-md-12">
          <div class="copy-fields hide">
            <div class="control-group input-group">
             <?php require 'lab/pardrop.php'; ?> <!--dropdown list for parnam-->
              </select>
              <input type="text" name="parval[]" id="parval" class="form- 
                 control" placeholder="Value" >
                <button class="btn btn-danger remove" type="button">
                  <i class="glyphicon glyphicon-remove"></i></button>
            </div>
        </div>
        </div>
    </div> 
<div class="modal-footer">
     <button class="btn btn-info" type="button" name="btnsamp2" 
      id="btnsamp2"> 
</button>
 </div>  

<!--Ajax code-->

<script>
    $(document).ready(function(){

        $("#btnsamp2").click(function(){
          var parnam=$("#parnam").val();
          var parval=$("#parval").val();

          $.ajax({
                url:'insamp2.php', 
                method:'POST',
                data:{
                      parnam:parnam,
                      parval:parval
                    },
                   success:function(data){
                       alert(data);
                   }
                });
            });
        });
</script>

<!--PHP Code-->

<?php
  //insamp2.php
  require 'lab/db/dbcon.php';
  $num = count($_POST["parnam"]) OR ($_POST["bacnam"]);
  $parnam=mysqli_escape_string($con, $_POST['parnam']);
  $parval=mysqli_escape_string($con, $_POST['parval']);


  if($num > 0){  
      for($i=0; $i<$num; $i++)  
      {  
           if($_POST["parnam"][$i] != '' && $_POST["parval"][$i] )  
           {  

            $sql = "INSERT INTO pardtls(parnam,parval) VALUES ('".$parnam[$i]."','".$parval[$i]."')";
              mysqli_query($con, $sql);

           }  
      } 
          echo "Parameter inserted";  
     }  
     else  
     {  
          echo "Failed inserting data";  
     } 

?>

【问题讨论】:

  • 您应该向input 字段添加一些类,并使用类名获取值。目前我可以看到您正在使用id 获取值。 Id 对于每个 input 应该是不同的,但似乎你给所有人都一样。
  • 每个生成的文本框应该有不同的数据。所以你的意思是它应该通过调用类名而不是 ID 来捕获所有数据?
  • 您正在像这样获取值$("#parnam").val()。而不是这个使用$(".some_class").val()。所以它将捕获所有类为some_class的输入值
  • 我将$("#parnam").val() 更改为$(".parnam").val(),但它仍然无法正常工作。它只保存第一项。
  • 你在输入中添加了相同的类吗?尝试在 JS 中打印 parnam var 以检查其值。

标签: php jquery mysql ajax


【解决方案1】:

下面的代码序列化了所有相关的输入数组,因此它们的值可以传递给 php 处理程序。

你可以使用这个jquery代码:

<script>
    $(document).ready(function(){

        $("button[name='btnsamp2']").click(function(){
          $.ajax({
                url:'insamp2.php', 
                method:'POST',
                data: $('input[name="parval[]"]').serialize() + '&' + $('input[name="parnam[]"]').serialize(),
                   success:function(data){
                       alert(data);
                   }
                });
            });
        });
</script>

或者,您可以将input tags 括在&lt;form&gt; 标记中。

然后使用这个jquery代码:

<script>
    $(document).ready(function(){
        $("button[name='btnsamp2']").click(function(){
          $.ajax({
                url:'insamp2.php', 
                method:'POST',
                data: $('form').serialize() + '&submit=1',
                   success:function(data){
                       alert(data);
                   }
                });
            });
        });
</script>

在您的 PHP 脚本中有一些错误。您以错误的方式计算传入的 $_POST 变量的元素。

$num = count($_POST["parnam"]) OR ($_POST["bacnam"]); // bad counting.. fixed it in the code below.

而您正在对 $_POST 数组值执行 mysqli_real_escape_string(..),这会导致错误并且还会使所需的值变为空。

还在下面的代码中添加了正确的插入警报。

试试这个更新的 PHP 代码。

<?php
  require 'lab/db/dbcon.php';
  $num = isset($_POST['parnam'])?count($_POST['parnam']):0;
  $contid=mysqli_escape_string($con, $_POST['contid']);
  $sampno=mysqli_escape_string($con, $_POST['sampno']);
  $statno=mysqli_escape_string($con, $_POST['statno']);
  $statname=mysqli_escape_string($con, $_POST['statname']);
  $coltime=mysqli_escape_string($con, $_POST['coltime']); 
  $parnam=isset($_POST['parnam'])?$_POST['parnam']:array();
  $parval=isset($_POST['parval'])?$_POST['parval']:array();
  $bacnam=isset($_POST['bacnam'])?$_POST['bacnam']:array();
  $bacval=isset($_POST['bacval'])?$_POST['bacval']:array();

  $sql="INSERT INTO samp (contid,sampno,statno,statname,coltime) VALUES ('$contid', '$sampno','$statno','$statname','$coltime')";
  if ($con->query($sql) === TRUE && $sampno!="" && $statno!="" ) {
      echo "Success! Data inserted";
  }
  else 
  {
      echo "Failed! Please input data!";
  }

  if($num > 0){  
      for($i=0; $i<$num; $i++)  
      {  
           if($_POST['sampno'] && $_POST["parnam"][$i] != '' && $_POST["parval"][$i] != '' && $_POST["bacnam"][$i] != '' && $_POST["bacval"][$i] != '')  
           { 
              $parnam[$i]=mysqli_escape_string($con, $parnam[$i]);
              $parval[$i]=mysqli_escape_string($con, $parval[$i]);
              $bacnam[$i]=mysqli_escape_string($con, $bacnam[$i]);
              $bacval[$i]=mysqli_escape_string($con, $bacval[$i]);

            $sql = "INSERT INTO pardtls(sampno,parnam,parval,bacnam,bacval) VALUES ('".$sampno."','".$parnam[$i]."','".$parval[$i]."','".$bacnam[$i]."','".$bacval[$i]."')";
            $inserted = mysqli_query($con, $sql);
            if($inserted === false){
                echo "A record not inserted at index $i ..<br/>\n";
                echo mysqli_error($con)."<br/>\n";
            }

           }  
      } 
     }  
     else  
     {  
          echo "Failed! Please input data";
     } 
?>

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2015-05-12
    • 2014-11-26
    • 2016-07-17
    相关资源
    最近更新 更多