ajax将php表单提交给数据库,ajax部分不起作用

时间:2016-05-08 09:40:25

标签: php jquery ajax

我对ajax很新,所以我跟着tutorial但是我无法让它工作。我试着在这个论坛上搜索答案,但没有运气..

HTML (有点从类和引导程序中删除)

<form id="editUserForm" role="form">
  <input id="edit_employeenr" type="text" name="employeenr">
  <input id="edit_name" type="text" name="name">
  <select id="edit_membertype" name="membertype">
    <option value="1">Admin</option>
    <option value="2">Employee</option>
  </select>
  <input type="submit" value="Save">
</form>
<div id="editUserMsg">Successfully updated!</div>

JS

$(document).ready(function() {
  $("#editUserMsg").hide();

  $("#editUserForm").submit(function(event) {
    event.preventDefault();
    submitUserEdit();
  });

  function submitUserEdit(){
    var dataString = $("#editUserForm").serialize();

    $.ajax({
        type: "POST",
        url: "user_edit_process.php",
        data: dataString,
        success: function(text){
          if (text == "success"){
            userEditSuccess();
          }
        }
    });
  }

  function userEditSuccess(){
    $("#editUserMsg").show().delay(5000).fadeOut();
  }
});

PHP (user_edit_process.php)

<?php
  $employeenr = $_POST['employeenr'];
  $name = $_POST['name'];
  $membertype = $_POST['membertype'];

  $stmt = $link->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?");
  $stmt->bind_param("isi", $employeenr, $name, $membertype);
  $stmt->execute();

  if ($stmt) {
    echo 'success';
  } else {
    echo 'fail';
  }
?>

如果我将$("#editUserMsg").show().dealy(5000).fadeOut();放在$.ajax正上方,则会显示消息,因此必须表示ajax代码无法正常工作。有什么建议吗?

编辑已解决。我忘了将文件包含在变量$link定义的文件中。

2 个答案:

答案 0 :(得分:1)

你在 user_edit_process.php 中拥有的所有代码是什么?

$link变量是否正确初始化?

您可以尝试在PHP文件中注释部分代码,并编写类似下面的内容来测试Ajax代码是否正常工作:

<?php
  $employeenr = $_POST['employeenr'];
  $name = $_POST['name'];
  $membertype = $_POST['membertype'];

  // $stmt = $link->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?");
  // $stmt->bind_param("isi", $employeenr, $name, $membertype);
  // $stmt->execute();

  if ($employeenr) {
    echo 'success';
  } else {
    echo 'fail';
  }

然后,如果您在第一个employeenr表单输入中输入内容,则应显示已成功更新!。如果您将此输入留空并发送表单,则不应显示。

答案 1 :(得分:1)

您的准备​​语句或bind_parameter中似乎存在问题。你应该总是检查错误,所以我建议你这样做以检查错误:

<?php
    $employeenr = $_POST['employeenr'];
    $name = $_POST['name'];
    $membertype = $_POST['membertype'];

    if (!($stmt = $mysqli->prepare("UPDATE users SET employeenr = ?, name = ?, membertype = ?"))) {
        echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }

    if (! $stmt->bind_param("isi", $employeenr, $name, $membertype)) {
        echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    }

    if (!$stmt->execute()) {
        echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }
?>

然后在你的JS中,将其添加到你的成功方法中:

console.log(text);

检查您的Firefox控制台(Ctrl-Shift-Q),如果有错误,您可以在“网络”下找到它 - &gt;单击列表中的“user_edit_process.php” - &gt;并在“预览”下的右侧窗口中。