我正在努力学习如何制作注册表格。我收到一条错误消息:“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();
}
我只需要弄清楚语法错误,还是需要回到原点?
答案 0 :(得分:1)
该错误消息表示未正确传递firstname变量。确保表单字段的名称/ ID确实是&#34; firstname&#34;。
答案 1 :(得分:1)
实际上你的手术没有问题,但是
答案 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”,只是为了澄清。
它说该列不能为空的原因是因为您在数据库中设置了该规则,如果删除了该规则,我只会是一个空白字段。
希望它有所帮助。