javascript - 使用 jQuery 和 AJAX 更新 SQL 时出现问题

标签 javascript php jquery mysql ajax

我在使用此应用程序时遇到了一个特殊问题。它并不总是更新列,并且没有关于何时更新和何时不更新的规则。 看起来完全是随机的,并且不会让我回到 admin.php 页面。

此外,当它更改/更新数据库中的条目时,它不会向 Ajax 发送响应(alert('OK'))。代码如下:

--this is admin.php

<div class="update" style="display:none">
	<form method="post" action="adminFunctions.php">
		<div class="input-group">
			<label>new name</label>
			<input class='newNameInput' type="text" name="newName" >
		</div>
		<div class="input-group">
			<label>new last name</label>
			<input class='newLastNameInput' type="text" name="newLastName">
		</div>
		<div class="input-group">
			<button type="submit" class="btn changePerson" name="changePerson">change</button>
		</div>
	</form>
</div>

然后是 Jquery:

$(document).ready(function(){

    var changeId;
    $('.changeMe').click(function () {
      var el = this;
      var id = this.id;
      var splitid = id.split("_");
      changeId = splitid[1];
      $('.update').css('display', 'block');
    });
    
    $('.changePerson').click(function () {
          var newNameFor = $('.newNameInput').val();
          var newLastNameFor = $('.newLastNameInput').val();
          $.ajax({
            url: './adminFunctions.php',
            type: 'POST',
            data: 'changeSth=' + changeId + '&newName=' + newNameFor + '&newLastName=' + newLastNameFor,
            success: function(response) {
                if(response == 1) {
                  alert('OK');
                } else {
                  console.log('entry update failed');
                }
            }
          })
        });
});

--和 adminFunctions.php

if(isset($_POST['changeSth'])) {
    $id = $_POST['changeSth'];
    $newName = $_POST['newName'];
    $newLastName = $_POST['newLastName'];

    changeEntry($id, $newName, $newLastName);
}
function changeEntry ($id, $newName, $newLastName) {
    global $testConn;
    if($id) {
        $query = "UPDATE people SET firstName='$newName', lastName='$newLastName' WHERE id=$id";
        mysqli_query($testConn, $query);
        header('location: admin.php');
        echo 1;
    } else {
        echo 0;
    }
    header('location: admin.php');
}
我是 PHP 新手,所以请原谅我的代码不够优雅。

提前致谢!

最佳答案

我创建了示例 fiddle为你。我制作了正确的 ui 示例,您需要在服务器端对其进行调整。关键的变化是您需要通过 POST 传递数据,而不是 ajax 中的 url。

 $('.changePerson').click(function () {
      var newNameFor = $('.newNameInput').val();
      var newLastNameFor = $('.newLastNameInput').val();
        var idFor = $('input[type="hidden"]').val();

      var data = {changeSth: idFor, newName: newNameFor, newLastName: newLastNameFor};
      $.ajax({
        url: './adminFunctions.php',
        type: 'POST',
        data: data,
        success: function(response) {
            if(response == 1) {
              alert('OK');
            } else {
              console.error('entry update failed');
            }
        }
      })
    });

编辑:

首先要强调的是 type='submit' 是为输入设计的,也不是为按钮标签设计的

第二件事是数据应该通过 POST 方法或 url 字符串传输。从 html 表单获取数据有几种不同的方法。您可以使用我的示例中的方法与 ids/classes 或序列化整个表单并传递它。 (谢谢@harry)

关于javascript - 使用 jQuery 和 AJAX 更新 SQL 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53393397/

相关文章:

Javascript 跨浏览器脚本

php - 在 MySQL 插入上使用 multipart/form-data 的奇怪行为

javascript - Jquery 脚本看不到 2 个 div 之间的区别

ajax - Jquery Ajax - 响应应该替换 html

javascript - ajax检查数据库是否存在php

javascript - 如何从 Bootstrap 选择下拉列表中获取选定值

javascript - Google 电子表格的自定义函数始终返回相同的结果

javascript - GWT Yui Spotlight 轮播问题

php - 与 Laravel faker 的嵌套关系 - laravel seeder

php - LAST_INSERT_ID() 链接双表插入