【发布时间】:2017-01-08 02:11:49
【问题描述】:
HTML:
<form action="registerusers.php" method="POST">
<input id= "uname" name="uname" placeholder="username" required>
<input id="upassword" name="upassword" type="password" placeholder="password" required>
<button id="register" type="button" class="btn btn-primary btn-lg outline" onclick="javascript: validateForm();checkNameRegister();" >Register</button>
阿贾克斯:
function checkNameRegister() {
$.ajax({
url: "registerusers.php",
data: { uname : "uname" , upassword : "upassword"},
type: "POST",
async: false,
dataType: 'text',
success: function(responseText) {
alert(responseText);
}
});
};
php:
<?php
header('Content-Type: application/json');
error_reporting(E_ALL);
ini_set('display_errors', 1);
$alert1 = null;
$uname = filter_input(INPUT_POST, isset($_POST['uname']));
if ($uname === $_POST['uname'] ? $_POST['uname'] : ''){
try {
$conn = new PDO('mysql:host=127.0.0.1;dbname=users', 'root', 'redcardinal');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$query = 'SELECT * FROM `usernames` WHERE `uname` = :uname';
$stmt = $conn->prepare($query);
$stmt->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname));
$stmt->execute();
$hello = array(array());
if ($hello = $stmt->fetch(PDO::FETCH_ASSOC) ? $hello != null : ''){
$alert1 = "This name is taken.";
echo json_encode($alert1);
$conn = null;
$query = null;
}
elseif ($hello === null) {
$alert2 = "This name is not taken.";
echo json_encode($alert2);
}
}
catch (PDOException $e) { echo json_encode($e);
$conn = null;
$query = null;
}
EDIT: WILL PUT ADDITIONAL elseif HERE.
}
?>
<?php
header('Content-Type: application/json');
error_reporting(E_ALL);
ini_set('display_errors', 1);
include 'check_name.php';
$uname = filter_input(INPUT_POST, isset($_POST['uname']));
if ($uname != null && $alert1 === null) {
try {
$conn = new PDO ('mysql:host=127.0.0.1;dbname=users', 'root', 'redcardinal');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$uname = $_POST['uname'];
$upassword = password_hash(filter_input(INPUT_POST, isset($_POST['upassword'])), PASSWORD_DEFAULT);
$stmt = 'INSERT INTO `usernames` (`uname`, `upassword`) VALUES (:uname,:upassword)';
$query = $conn->prepare($stmt);
$query->bindParam(":uname",$uname, PDO::PARAM_STR, strlen($uname));
$query->bindParam(":upassword",$upassword, PDO::PARAM_STR, strlen($upassword));
$query->execute();
echo json_encode("Username/Password successfully created.");
}
catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
elseif ($alert1 != null) {
echo json_encode("Username/Password taken.");
}
$query = null;
$conn =null;
我基本上按照建议更改了 PHP,我能想到的唯一其他问题是 html 或 ajax。谢谢
【问题讨论】:
-
if ($uname = isset($_POST['uname']) ? isset($_POST['uname']) : ''){应该是if ($uname = isset($_POST['uname']) ? $_POST['uname'] : ''){来给你 $_POST 的值,并且 $uname 中没有布尔值 true -
您的很多
ifs 都在做分配(=)而不是比较(==)。如果这不是故意的,我预计您的一些错误是由此引起的。 -
From the PHP documentation: "赋值表达式的值就是赋值的值。即"$a = 3"的值是3。这可以让你做一些棘手的事情东西”。 (有时不小心)