Ajax获取PHP MySQL格式的提交按钮的动态ID

时间:2018-04-27 08:14:05

标签: php jquery mysql ajax

我在PHP& MySQL和我想用AJAX提交它。

我有类似的数据,所以我把这些数据放在foreach循环中。

问题在于,当我尝试提交第一行数据时,一切顺利,但它会更改所有行中的数据。当我尝试提交除第一行以外的其他数据时,它根本不会提交。

我认为问题是因为提交按钮总是获得相同的ID,因此总是会转到第一行。

我不知道如何在Ajax中获得价值。

以下是代码:

      //php form

           <?php
            $pid = $_GET['pid'];
            include('config.php');
            $timeline_query="SELECT * FROM timeline_table WHERE pid=$pid";
            $result_timeline=mysqli_query($conn,$timeline_query);
            if(!$result_timeline){
                echo "Error: " . $conn->error;
            }
            $timelines=array();
            while($row_timeline=mysqli_fetch_assoc($result_timeline)){
              $timelines[]=$row_timeline;
            }
          ?>
              <?php
            $x = 0;
            foreach ($timelines as $timeline):?>
            <div class="card">
              <div class="card-header" id="heading<?php echo $x; ?>">
                <h5 class="mb-0">
                  <button class="btn btn-link" data-toggle="collapse" data-target="#collapse<?php echo $x; ?>" aria-expanded="true" aria-controls="collapse<?php echo $x; ?>">
                    <?php echo $timeline['timeline_title'];?>
                  </button>
                </h5>
              </div>
              <div id="collapse<?php echo $x; ?>" class="collapse" aria-labelledby="heading<?php echo $x; ?>" data-parent="#accordion">
                <div class="card-body">
                  <form id="register_form">
                     <input type="text" id="tid" name="tid" value="<?php echo $timeline['tid']; ?>"/>

                    <textarea class="form-control" rows="4" id="timeline_description" name="timeline_description"><?php echo $timeline['timeline_description'];?></textarea>
                    <input id="submit" type="submit" name="submit" value="Submit" />
                  </form>
                </div>
              </div>
            </div>
          <?php $x++; endforeach;


   // ajax function
  $(document).ready(function(){
  $("#submit").click(function(){
    var timeline_description = $("#timeline_description").val();
    var tid = $("#tid").val();
    alert(timeline_description);
    alert(tid);
    // Returns successful data submission message when the entered information is stored in database.
    // var dataString = 'timeline_description='+timeline_description+'&pid='+ pid + '&tid='+ tid +;
    var dataString = 'timeline_description='+timeline_description;
    alert(dataString);
    if(timeline_description=='')
    {
      alert("Please Fill All Fields");
    }
    else
    {
      // AJAX Code To Submit Form.
  $.ajax({
    type: "POST",
    url: "process.php?tid"=+tid,
    data: dataString,
    cache: false,
    success: function(result){
      alert(result);
    }
  });
  }
  return false;
  });
});

  //process.php
   <?php
   include('config.php');
   $tid=$_GET['tid'];

 if( $_POST['timeline_description']==NULL ){ $timeline_description=''; } 
 else { $timeline_description=$_POST['timeline_description']; }

  $query_timeline = "UPDATE timeline_table SET 
  timeline_description='$timeline_description' WHERE tid=$tid ";
    $result=mysqli_query($conn,$query_timeline);
   if(!$result){
   echo "Error: " . $conn->error;
 }
?>

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我发现您的输入ID存在问题 - <input type="text" id="pid" - 这是foreach,因此您有多个具有相同ID的元素。因此var pid = $("#pid").val();将返回您始终是第一个找到的元素的值。尝试使用数组:

<input type="text" id="pid[$pid]" name="pid[$pid]" value="<?php echo $pid ?>"/>
<input type="text" id="tid[$pid]" name="tid[$pid]" value="<?php echo $timeline['tid']; ?>"/>

请记住一件事:html PAGE(整个文档)中任何元素的id必须是唯一的。

答案 1 :(得分:1)

元素的ID必须是唯一的。代码的异常行为是由于输入元素的非唯一ID引起的。

在这种情况下,如果您无法为元素指定唯一ID,则可以在jquery中使用 this 关键字和 siblings()方法来获得所需的输出。

而不是

var timeline_description = $("#timeline_description").val();
var pid = $("#pid").val();
var tid = $("#tid").val();

尝试以这种方式获取价值。

var timeline_description = $(this).siblings('#timeline_description').val();
var pid = $(this).siblings('#pid').val();
var tid = $(this).siblings('#tid').val();