AJAX PHP MYSQL 更新/编辑记录 (jQuery)

Posted

技术标签:

【中文标题】AJAX PHP MYSQL 更新/编辑记录 (jQuery)【英文标题】:AJAX PHP MYSQL Update / Edit Records (jQuery) 【发布时间】:2016-09-12 20:56:06 【问题描述】:

我想要做的是使用 jQuery/Ajax 使用 phpmysql pdo 更新输出表中的行。我在实际发布数据然后返回数据时遇到问题。

如果有人可以帮助我完成这项工作,将不胜感激!谢谢!

这是我在 users.php 页面中使用的表单。 (请注意,这是在 echo 语句中,这就是变量是 '.$var.' 的原因)。

下面的表格针对每一行进行迭代。

Users.php

<form action="users_manage" method="post" id="submit_form" name="users_manage">
 <input hidden id="uid" name="uid" value="' . $id . '" />
 <input hidden id="first_name" name="first_name" value="' . $first_name . '" />
 <input hidden id="last_name" name="last_name" value="' . $last_name . '" />
 <input hidden id="contact_email" name="contact_email" value="' . $contact_email . '" />
 <button id="usertp" name="user_type" value="1" type="submit" class="btn btn-rounded btn-sm btn-success"><i class="fa fa-check"></i></button>
 <button id="usertp" name="user_type" value="2" type="submit" class="btn btn-rounded btn-sm btn-danger"><i class="fa fa-times"></i> </button>
</form>

users.php 上的脚本

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>

<script>
    $(document).ready(function() 
        $("#usertp").click(function () 

            var user_type = $('#usertp').val();

            var uid = $('#uid').val();

            var first_name = $('#first_name').val();

            var last_name = $('#last_name').val();

            var contact_email = $('#contact_email').val();

            if(user_type=='') 
                alert("Please Fill All Fields");
             else 
                $.ajax(
                    type: "POST",
                    url: "users_manage.php",
                    data: 
                        user_type: user_type,
                        uid: uid,
                        first_name: first_name,

                        contact_email: contact_email
                    ,
                    success: function (msg) 
                        // alert(msg);
                        $('#result').html(msg);
                    ,
                    error: function () 
                        alert('error');
                    
                );
            
        );
    );
</script>

users_manage.php

<?php

$db = new PDO('mysql:host=127.0.0.1;dbname=test', 'test_user', '1234');

$uid = $_POST['uid'];
//$user_type = $_POST['user_type'];

$user_type = 0;

$stmt = $db->prepare("SELECT id FROM users WHERE id=:uid");
$stmt->execute( [ ':uid' => $uid] );
$num1 = $stmt->rowCount(PDO::FETCH_NUM);

if($num1 == 1)
  $stmt = $db->prepare("UPDATE users SET user_type=:user_type WHERE id=:uid");
  $stmt->execute([ ':uid' => $uid, ':user_type' => $user_type]);

【问题讨论】:

ID 是唯一的。使用一个类。和名称属性一样。 @Fred-ii- 问题在于没有获取 ID。我相信,当我尝试更新记录时,它会很好地获取 ID,因为它会将数据发布到地址栏。不过谢谢 他并不是说这是您的问题的原因,只是说它们是独一无二的。您的代码中的$('#usertp').val() 将始终为您提供1,因为您的ID 不是唯一的。 @mark.hch 我该如何解决这个问题? 使用类,如@Fred-ii-建议的那样,如class='usertp',然后更改您的点击侦听器的选择器,并使用this获取值:$('.usertp').click(function() var user_type = $(this).val(); /* code here */ ); 【参考方案1】:

@Harvey Connor 请检查以下代码。请更改表单中的值。

Users.php

    <form action="" method="post" id="submit_form" name="users_manage">
    <input hidden id="uid" name="uid" value="1" />
    <input hidden id="first_name" name="first_name" value="firstname" />
    <input hidden id="last_name" name="last_name" value="lastname" />
    <input hidden id="contact_email" name="contact_email" value="test@gmail.com" />
    <input id="usertp" name="user_type" value="1" type="submit" class="btn btn-rounded btn-sm btn-success" />
    <input id="usertp" name="user_type" value="2" type="submit" class="btn btn-rounded btn-sm btn-danger" />
    </form>
    <div id="result"></div>

users.php 上的脚本

    <script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
    <script>
    $(document).ready(function() 
    $("#usertp").click(function () 
    var user_type       = $('#usertp').val();
    if(user_type=='') 
    alert("Please Fill All Fields");
    return false;
     else 
    $.ajax(
    type: "POST",
    url: "users_manage.php",
    data: $("#submit_form").serialize(),
    success: function (msg) 
    $('#result').html(msg);
    return false;
    ,
    error: function () 
    alert('error');
    return false;
    
    );
    
    return false;
    );
    );
    </script>


users_manage.php


   <?php

    //$db   = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $db     = new PDO('mysql:host=127.0.0.1;dbname=test', 'test_user', '1234');
    $uid    = $_POST['uid'];
    //$user_type = $_POST['user_type'];

    $user_type  = 0;
    $stmt       = $db->prepare("SELECT id FROM users WHERE id=:uid");
    $stmt->execute( [ ':uid' => $uid] );
    $num1       = $stmt->rowCount(PDO::FETCH_NUM);

    if($num1 == 1)
      $stmt = $db->prepare("UPDATE users SET user_type=:user_type WHERE id=:uid");
      $stmt->execute([ ':uid' => $uid, ':user_type' => $user_type]);
      $result = "User successfully updated.";
     else 
      $result = "User update fail.";
    
    echo $result;

【讨论】:

以上是关于AJAX PHP MYSQL 更新/编辑记录 (jQuery)的主要内容,如果未能解决你的问题,请参考以下文章

PHP / MySQL / AJAX - 更新多个数据

如何使用 bootstrap 和 Ajax 根据所选 ID 从 MySQL 数据库中获取数据?

php Vue编辑mysql ajax

PHP AJAX - 数据更新/编辑作为新数据插入而不是更新

使用 Ajax、PHP、MYSQL 更新表单

用 php 和 ajax 更新 mysql 表