我已成功设置了自己的PHP / MySQL登录系统,但希望改进注册过程。基本上,我希望检查提交的所有值是否为空值(如果为true则返回错误),但我也希望在某些时候对它们进行消毒。我的代码如下,仅用于注册过程 - 我已经省略了其他所有内容,但这应该是所有人都需要参考的。
<?php session_start();
include "connect.php";
$reg = array(
"regEmail" => filter_var(($_POST["email"]), FILTER_SANITIZE_EMAIL),
"regForename" => filter_var(($_POST["forename"]), FILTER_SANITIZE_SPECIAL_CHARS),
"regSurname" => filter_var(($_POST["surname"]), FILTER_SANITIZE_SPECIAL_CHARS),
"regPassword" => filter_var(($_POST["password"]), FILTER_SANITIZE_SPECIAL_CHARS),
);
foreach($reg as $value) {
if (empty($value)) {
header("location: error.php");
}
else {
$regUser = "INSERT INTO users (email,password,forename,surname) VALUES ('$reg['regEmail'], $reg['regPassword'], $reg['regForename'], $reg['surename']')";
if (isset($_POST["submit"])) {
if (mysqli_query($MySQL,$regUser)) {
header("location: registration-confirmation.php");
}
else {
header("location: error.php");
}
};
$MySQL->close;
};
};
?>
有人可以协助吗?我可以为每个表单数据使用一些简单的if / else条件,但这看起来有点麻烦而且效率不高。
我完全希望被告知我的代码是一场灾难,但作为初学者,对我来说更重要的是我正在思考正确的逻辑思维。
我是初学者,所以尽可能多地学习!
感谢您的光临。
答案 0 :(得分:0)
就个人而言,我就是按照你说的去做。我为每个字段都有一个if语句,如果有任何错误,则添加到$ errors数组。如果有任何错误,请将其显示给用户。
(!is_numeric($adjustmentInputs[$i]['StartYear']) ? $errors['adjustmentInputs']="Start Year must be a numeric value. Please return to the input page and input only numbers and decimal points." : '');
答案 1 :(得分:0)
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$data = array(
'email' => $_POST["email"],
'forename' => $_POST["forename"],
'surname' => $_POST["surname"],
'password' => $_POST["password"],
);
foreach ($data as $key => $value) {
if (empty($value)) {
// Creates an array of the missing values so you can let the user know which
// fields they have missed out
$errors[] = $key;
}
if (isset($errors) && !empty($errors)) {
return 'You have missed the following fields ' . implode(',', $errors);
}
}
$stmt = $db->prepare("
INSERT INTO users (email, password, forename, surname)
VALUES (:email, :password, :forename, :surname)"
);
$stmt->bindValue(':email', $data['email'], PDO::PARAM_STR);
$stmt->bindValue(':password', $data['forename'], PDO::PARAM_STR);
$stmt->bindValue(':forename', $data['surname'], PDO::PARAM_STR);
$stmt->bindValue(':surname', $data['password'], PDO::PARAM_STR);
if (true === $stmt->execute()) {
header("location: registration-confirmation.php");
} else {
header("location: error.php");
}
这样的东西可能会起作用(我还没有测试过)。你真的需要看看哈希密码,将它们保存为纯文本真的不是一个好主意。
此外,您可能希望查看更好的错误处理。如果您知道查询失败的原因而不是重定向到通用错误页面,则更容易调试。