AJAX - 序列化表单

时间:2015-01-18 19:12:22

标签: php ajax

我正在努力学习如何制作注册表格。我收到一条错误消息:“PDOException:SQLSTATE [23000]:完整性约束违规:1048列'firstname'不能为空”

有人告诉我,我可以用AJAX修复它,这是我想要学习的东西。但我不确定我在做什么。

首先,我将PHP代码从我的主页(register.php)中取出并放入一个新文件(reg-code.php)。然后我在register.php中包含了reg-code.php。

接下来,我将以下内容放在register.php:

的head部分
<script>
submitHandler: function(form) {
  $.post(
    '/test/register/reg-code.php', 
    $(form).serialize(),
    success: function() {
        // display success message or something
        It works!
    }
  );
};
</script>

我修复了一个语法错误,但我在另一个成功的行上获得了另一个:function(){

但我甚至不确定我是否朝着正确的方向前进。这些教程令人困惑。

这是我放在单独文件中的PHP代码:

try {
$sql = "INSERT INTO members (firstname, lastname, username, password,  password_confirm, email, age) VALUES (:firstname, :lastname, :username,  :password, :password_confirm, :email, :age)";
$query = $pdo->prepare($sql);
$query->bindParam(':firstname', $_GET['firstname'], PDO::PARAM_STR);
$query->bindParam(':lastname', $_GET['lastname'], PDO::PARAM_STR);
$query->bindParam(':username', $_GET['username'], PDO::PARAM_STR);
$query->bindParam(':password', $_GET['password'], PDO::PARAM_STR);
$query->bindParam(':password_confirm', $_GET['password_confirm'],  PDO::PARAM_STR);
$query->bindParam(':email', $_GET['email'], PDO::PARAM_STR);
$query->bindParam(':age', $_GET['age'], PDO::PARAM_STR);

 $query->execute();
} catch (PDOException $e) {
 echo 'PDOException : '.  $e->getMessage();
}

我只需要弄清楚语法错误,还是需要回到原点?

4 个答案:

答案 0 :(得分:1)

该错误消息表示未正确传递firstname变量。确保表单字段的名称/ ID确实是&#34; firstname&#34;。

答案 1 :(得分:1)

实际上你的手术没有问题,但是

  1. 在您的成员表中,firstname列不为null,并且您将空值传递给它

答案 2 :(得分:1)

如果您使用jQuery $.post - 那么在您的php脚本中,您应该使用$_POST变量:

$query->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR);
// etc

此外:

success: function() {
    // display success message or something
    It works!  // this string will cause syntax error
}

使用标准alert()功能:

success: function() {
    // display success message or something
    alert('It works!');
}

答案 3 :(得分:1)

首先,Ajax与你得到的错误无关!所以你可能不会考虑改变你的头衔。 但无论如何。

这意味着您的$_GET['firstname']没有值,这意味着您的注册表单中的任何输入都不会发送到您的代码中。 我的建议是,您将所有$_GET个变量更改为$_POST['inputfieldname']

因为如果你使用表单来发送数据,你不能通过GET访问它们,因为GET用于访问通过URL发送的数据,所以假设你发送了一些带有url的内容,而url是www.yoururl.com/sent.php?something=bla 你会得到像“$_GET['something']这样的”某些东西的价值,而现在的数据是“bla”,只是为了澄清。

它说该列不能为空的原因是因为您在数据库中设置了该规则,如果删除了该规则,我只会是一个空白字段。

希望它有所帮助。