HTML / PHP内联更新和删除表的每一行

时间:2018-05-29 21:44:13

标签: html forms crud

内联'更新'按钮出现问题,我从mysql表(完成)中提取数据,使用'foreach'(完成)将数据显示到屏幕并有一个更新和删除按钮在每行上发布正确的按钮“名称”和用户的ID(完成)。

然而$ _POST数组没有解析的是具有行信息的正确数据....它确实解析了对底行的更改,但是如果你改变另一行,它只会再次解析最后一行....

    <input type="hidden" name="action" value="submit" />
    <pre></pre>
    <?php print_r($_POST);?>
    <?php 
    echo '<table class="table table-condensed">';
    echo '<thead><tr><th style="width: 15%">Name</th><th style="width: 25%">Login</th><th style="width: 25%">Email</th><th style="width: 7%">Role</th><th style="width: 7%">Group</th><th style="width: 15%">LoftID</th><th>Edit</th><th>Delete</th></tr></thead><tbody>';
        foreach($users as $person){
             echo '<tr>';
             echo '<td><input type="text" class="form-control" name="name" id="'.$person['id'].'" placeholder="Name" value="'.$person['name'].'"/></td>';
             echo '<td><input type="text" class="form-control" name="login" id="'.$person['id'].'" placeholder="Login" value="'.$person['login'].'"/></td>';
             echo '<td><input type="text" class="form-control" name="mail" id="'.$person['id'].'" placeholder="Mail" value="'.$person['mail'].'"/></td>';
             echo '<td><input type="text" class="form-control" name="role" id="'.$person['id'].'" placeholder="Role" value="'.$person['role'].'"/></td>';
             echo '<td><input type="text" class="form-control" name="group" id="'.$person['id'].'" placeholder="Group" value="'.$person['group'].'"/></td>';
             echo '<td><select type="text" class="form-control" name="LoftID" id="'.$person['id'].'" placeholder="Loft">';
             foreach($lofts as $info) {
                 if($info['id']==$person['LoftID']){
                      echo '<option value='.$info["id"].' selected>'.$info["name"].'</option>';
                 }
                 else{
                      echo '<option value='.$info["id"].'>'.$info["name"].'</option>';    
                 }
             }
             echo '</select></td>';
             echo '<td><button type="submit" name="update" value="'.$person['id'].'" class="btn btn-primary">Update</button></td>';
             echo '<td><button type="submit" name="delete" value="'.$person['id'].'" class="btn btn-primary">Delete</button></td>';
             echo '</tr>';
          }   
          echo '</tbody></table>';
    ?>
    </div>
    </form>

我需要的是允许我从$ _POST中提取数据,然后我可以将其作为基于ID的更新重新投入数据库,我相信我可以这样做,因为我已经这样做了在我的代码....

我真的很想这样做,而不需要显示另一个包含数据的页面来更新......

提前致谢

2 个答案:

答案 0 :(得分:0)

你需要Ajax来完成这项工作而无需重新加载页面或转到带参数的其他页面。请记住,按钮没有输入值。使用data-id或data-pid或您喜欢的任何内容。并输入一个类名称,例如'updateBtn'来标识按钮。

echo '<td><button type="button" data-pid="'.$person['id'].'" class="btn btn-primary updateBtn">Update</button></td>';

    <script>  
        $('.updateBtn').on('click', function() { 
        var pid = $(this).data('pid'); console.log(pid); // see the result in console
        var pid = parseInt(pid);  // change to int
        $.ajax({
                url: '/ajax/update-data/index.php', // specify folder and file name
                data: { pid : pid },
                dataType: 'json',
                success: function (response) {                                  
                if(response.status == 'success') {  

                   // do something to the html code to show the successful update
                return false;
                }   
               if(response.status == 'fail') {  

                   // do something to the html code to show the fail update
                return false;
                }   
              }   
           });        
        });
    </script>

Ajax文件:

<?php

  function response ($status) { 
      header("Content-Type:application/json");
      $response['status'] = $status;
      $json_response = json_encode($response);
      echo $json_response;
  }

if($_POST) {

$pid = filter_input(INPUT_POST, 'pid', FILTER_SANITIZE_NUMBER_INT); 

    if($pid) {

        $done = // do php to chage update. You can refer to class or direct php mysql update

         if($done) {
          response ('success');
         }else{
          response ("fail");         
         }

    }else{
    response ("parameter fail");    

    }
}
?>

答案 1 :(得分:0)

好的,所以我想我找到了答案,并且包括以下内容;

echo '<form class="form-horizontal" action="" method="post">';

在第一个foreach语句下面,以便每一行都是它自己的表单元素。

有没有人看到这样做的任何问题?数据总是非常有限,可能永远不会超过10行。

亲切的问候和感谢所有的帮助