2016-01-20 98 views
1

我有一个在服务器端(php)创建的动态表,我使用jquery在html页面中显示它。使用jquery获取多个动态html元素值

在这个表中有多个值,我想编辑它们并将这些编辑保存在mysql中。

,但我不知道如何得到这个值,我试图刚刚更新的第一个值,而不是让其他元素值的方式:

jQuery代码:

$('#save_edit').on('click',function() { 
       $('#edit_test_show').hide(); 
       $('#enable_edit').show(); 
       $('#save_edit').hide(); 

       var vop_id = localStorage.getItem('op_id'); 

       var vop_title = $('#result_table').find('[name=op_title]').val(); 
       var vop_descrip = $('#result_table').find('[name=op_descrip]').val(); 
       var vobjects_count = $('#result_table').find('[name=objects_count]').val(); 
       var vobject_val = []; 

       var vobject_id = $('#result_table').find('[name=object_id]').val(); 
       for(i=0;i<vobjects_count;i++){ 
        vobject_val[i] = $('#result_table').find('[name=object_val]').val(); 

       } 


       $.post("Requests/OPS.php", //Required URL of the page on server 
        { // Data Sending With Request To Server 
         EDIT_OPS : true, 
         op_id : vop_id, 
         op_title : vop_title, 
         op_descrip : vop_descrip, 
         objects_count : vobjects_count, 
         object_id : vobject_id, 
         object_val : vobject_val 
        }, 
        function(response){ // Required Callback Function 
         $("#Response").text(response).css({color: 'green'}); 

        }); 

      }); 

动态表在PHP中:

if($op_objects_count<=0) { 
       echo "<table class='styled-table' cellspacing = '0' width = '360' border = '1' > 
           <tr> 
            <th> 
             <label for='session_order' style = 'margin-right:10px;color:#595959;float: right;' >اهداف فرآیند : </label > 
            </th> 
           </tr>"; 
       while ($objects_row = mysqli_fetch_assoc($op_objects)) { 
        echo "<tr> 
            <input name = 'object_id' type='hidden' 
                   value = '" . $objects_row['id'] . "' /> 
            <td> 
             <input name = 'object_val' style = 'width:340px;height: 36px;margin:0 3px 3px 3px;' 
                   value = '" . $objects_row['object'] . "' /> 
            </td> 

            <input name = 'objects_count' type='hidden' 
                   value = '".$op_objects_count."' /> 
           </tr>"; 
       } 
       echo "</table>"; 
       echo "<div class='cleaner h30'></div>"; 

我的PHP查询来更新数据库:

if($_POST['EDIT_OPS']==true){ 

    $op_id = $_POST['op_id']; 
    $op_title = $_POST['op_title']; 
    $op_descrip = $_POST['op_descrip']; 
    //=================================== 
    $objects_count = $_POST['objects_count']; 
    $object_id = $_POST['object_id']; 
    $object_val = $_POST['object_val']; 
// print_r($object_val); 

    $save_edit = $DBM->RunQuery("UPDATE at_ops SET op_title='$op_title' , op_descrip='$op_descrip' WHERE id='$op_id'",true,false); 

    for($i=0;$i<$objects_count;$i++){ 
     $save_edit = $DBM->RunQuery("UPDATE at_ops_objects SET object='$object_val[$i]' WHERE id='$i' AND ops_id='$op_id' ",true,false); 
    } 

    if(isset($save_edit) && $save_edit>0) 
     echo "success"; 
    else 
     echo "failure"; 

} 
+0

的评论@mplungjan感谢,但我用你的方法,但我得到的第二个元素的值而不是所有的人(在我的测试中,我有两个值) – anonymox

回答

1

如果从例如更改所有名称

<input name='object_id' 

<input name='object_id[]' 

可以序列的形式,它会在服务器上创建阵列。

至于让jQuery的所有值,这对我的作品:

$(function() { 
 
    $('#save_edit').on('click', function() { 
 

 
    var vobject_val = []; 
 
    $('#result_table').find('[name=object_val]').each(function() { 
 
     vobject_val.push(this.value); 
 
    }); 
 
    console.log(vobject_val); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table class='styled-table' cellspacing='0' width='360' border='1' id="result_table"> 
 
    <tr> 
 
    <th> 
 
     <label for='session_order' style='margin-right:10px;color:#595959;float: right;'>اهداف فرآیند :</label> 
 
    </th> 
 
    </tr> 
 

 
    <tr> 
 
    <input name='object_id' type='hidden' value='r1' /> 
 
    <td> 
 
     <input name='object_val' style='width:340px;height: 36px;margin:0 3px 3px 3px;' value='1' /> 
 
    </td> 
 

 
    <input name='objects_count' type='hidden' value='1' /> 
 
    </tr> 
 
    <tr> 
 
    <input name='object_id' type='hidden' value='r2' /> 
 
    <td> 
 
     <input name='object_val' style='width:340px;height: 36px;margin:0 3px 3px 3px;' value='2' /> 
 
    </td> 
 

 
    <input name='objects_count' type='hidden' value='2' /> 
 
    </tr> 
 
    <tr> 
 
    <input name='object_id' type='hidden' value='r3' /> 
 
    <td> 
 
     <input name='object_val' style='width:340px;height: 36px;margin:0 3px 3px 3px;' value='3' /> 
 
    </td> 
 

 
    <input name='objects_count' type='hidden' value='3' /> 
 
    </tr> 
 

 
</table> 
 
<button type="button" id="save_edit">save</button>

+0

@mplungian感谢您的回答!但是我用你的方法编辑了我的代码,但我只是得到其中一个。我应该改变在PHP元素的名称:name =“object_val”to name =“object_val []”?使其工作? – anonymox

+0

如果你这样做,那么不需要其他的JS,只需要序列化并发布。我的代码只是一个例子 – mplungjan

+0

好吧,我修好了。谢谢你!现在我得到所有元素,但我不知道为什么我的更新代码是错误的!我将更新查询添加到我的问题上面可以检查出来并帮助我吗?提前致谢。 – anonymox

1

我建议是这样的:

  <table id="admTable"> 
      <thead style="width:100%;"> 
       <tr> 
       <th>row</th> 
       <th>name</th> 
       <th>username</th> 
       <th>pass</th> 
       <th>delete</th> 
       <th>edit</th> 
       </tr> 

      </thead> 
      <tbody id="adminsTb"> 
       <?php 
        $i=1; 

        while($admins=mysqli_fetch_array($results,MYSQLI_ASSOC)) 
        { 
         echo '<form action="insert.php" method="post" id="formId">'; 
         echo "<tr> 
           <td>$i</td><input type='hidden' name='id' value='$admins[id]'/> 
           <td><input name='adminname' type='text' value='$admins[name]' /></td> 
           <td><input name='user' type='text' value='$admins[user]'required='required' /></td> 
           <td><input name='pass' type='password' value='$admins[pass]' required='required' /></td> 
           <td> <input name='deladmin' type='submit' value='delete' /></td> 
           <td><input name='updateadmin' type='submit' value='save' /></td> 
          </tr>"; 

        $i++; 
        echo " </form>"; 
       } 
      ?> 
     </tbody> 

     </table> 

insert.php

if(isset($_POST['updateadmin'])){ 
$results=mysqli_query($dbCnn," update admins set name='$_POST[adminname]', user='$_POST[user]', pass='$_POST[pass]' where id=$_POST[id]");} 

// jQuery的AJAX

(function($){ 
    function processForm(e){ 
     $.ajax({ 
      url: 'insert.php', 
      dataType: 'text', 
      type: 'post', 
      contentType: 'application/x-www-form-urlencoded', 
      data: $(this).serialize(), 
      success: function(data, textStatus, jQxhr){ 


      }, 
      error: function(jqXhr, textStatus, errorThrown){ 
       console.log(errorThrown); 
      } 
     }); 

     e.preventDefault(); 
    } 

    $('#formId').submit(processForm); 
})(jQuery); 
+0

感谢您的响应,但我想通过Ajax发送数据到PHP页面,它不是一个我能够立即编辑它的代码。 – anonymox

+0

在此代码中,我将表单数据发送到insert.php –