【发布时间】:2017-05-15 13:51:23
【问题描述】:
实际上,我正在用一些 AJAX 做一个简单的 php 表单。 我试图自己解决错误,但无法弄清楚我缺少什么。
结果总是假的,数据库中也没有记录
形式:
<form id="signUpForm" action="" method="POST"></div>
<div><input type="text" name="lastname" placeholder="lastname"></div>
<div><input type="text" name="firstname" placeholder="firstname"></div>
<div><input type="text" name="pseudoUp" placeholder="pseudo"></div>
<div><input type="password" name="passwordUp" placeholder="password"></div>
<div><input type="submit" name="signUpForm" value="signup"></div>
<div class="signUpMsg"></div>
</form>
php 脚本:
config.php:
<?php
session_start();
define('MYSQL_HOST', 'localhost');
define('MYSQL_USER', ' ');
define('MYSQL_PASSWD', ' ');
define('MYSQL_DB', 'php');
try {
$PDO = new PDO('mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASSWD);
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch (PDOException $e) {
$e->getMessage();
}
?>
signUp.php:
<?php
require_once 'config.php';
if($_POST["lastname"] != "" && $_POST["firstname"] != "" && $_POST["pseudo"] != "" && $_POST["password"] != ""){
$req = $PDO->prepare("INSERT INTO users (lastname, firstname, pseudo, password) VALUES(:lastname, :firstname, :pseudo, :password)");
$req->bindValue(':lastname', $_POST["lastname"]);
$req->bindValue(':firstname', $_POST["firstname"]);
$req->bindValue(':pseudo', $_POST["pseudo"]);
$req->bindValue(':password', sha1($_POST["password"]));
if ($req->execute()){
echo 1;
}else{
echo 2;
}
}
?>
最后是 AJAX:
$(function(){
$('#signUpForm').on('submit', function(e){
e.preventDefault();
// Undo mistake, thank to @apokryfos
data = {
lastname : $("input[name='lastname']").val(),
firstname : $("input[name='firstname']").val(),
pseudo : $("input[name='pseudo']").val(),
password : $("input[name='password']").val(),
}
$.ajax({
method : "POST",
url : "php/signUp.php",
data : data,
success : function(res){
if(res == 1){
$('.signUpMsg').html('Sign up done !');
}else{
$('.signUpMsg').html('Sign up fail');
}
}
})
})
})
感谢阅读!
编辑:
错误来自获取数据的错误方法(输入中没有 id,同时在 AJAX 中检查输入 id)和同一页面中的输入名称冲突。此外,我将 signIn.php 中的“echo true/false”更改为 Apokryfos 提到的“echo 1/2”。
感谢您的帮助!!
【问题讨论】:
-
数据库用户名是否为空
-
你不应该滚动你自己的密码散列。这是一篇关于为什么
sha*-functions 不适合密码哈希的好文章:security.stackexchange.com/questions/88951/…。使用密码时,您真的应该使用password_hash()和password_verify()。 -
除此之外,您是否检查过错误日志是否有任何错误?
-
1) 检查控制台 2) 在页面顶部使用
error_reporting(E_ALL); ini_set('display_errors', 1);3) 在使用前打印发布的数据 4) 允许查询错误(不是echo true; / echo false;)然后我们会有更多需要处理的信息 -
提交后所有行都为空,日志看起来很干净。此外,我尝试在 PHP 中执行请求并且它有效。我将尝试使用 password_hash() 并告诉你结果。