当我按下“提交”按钮时,出现HTTP ERROR 500错误,但我不知道原因。 这次我想知道的是2分。
我是刚开始学习PHP的新手,但是我希望很快成长。因此,即使是一个强硬的意见(您甚至应该对初学者都知道!),我想要一个答案。
<?php
require 'password.php';
session_start();
if(isset($_SESSION['NAME'])) {
header('Location: Main.php');
exit();
}
$db['host'] = "localhost";
$db['user'] = "root";
$db['pass'] = "root";
$db['dbname'] = "blog";
$errorMessage = "";
if (isset($_POST["signUp"])) {
// 1. ユーザIDの入力チェック
if (empty($_POST["username"])) { // 値が空のとき
$errorMessage = 'ユーザーIDが未入力です。';
} else if (empty($_POST["password"])) {
$errorMessage = 'パスワードが未入力です。';
} else if (empty($_POST["password2"])) {
$errorMessage = 'パスワードが未入力です。';
}
if (!empty($_POST["username"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && $_POST["password"] === $_POST["password2"]) {
// 入力したユーザIDとパスワードを格納
$username = $_POST["username"];
$password = $_POST["password"];
// 2. ユーザIDとパスワードが入力されていたら認証する
$dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
function check($id, $count) {
if($count > 0) {
throw new Exception("そのユーザーIDはすでに使用されています。");
}
if($id < 8) {
throw new Exception("パスワードは8桁以上で入力してください。");
}
}
// 3. エラー処理
try {
$sqlname = "SELECT COUNT(*) FROM userData WHERE `name` = '$username'";
$ss = $pdo->query($sqlname);
$count = $ss->fetchColumn();
$id = strlen($_POST['password']);
check($id, $count);
$stmt = $pdo->prepare("INSERT INTO userData(`name`, `password`) VALUES (:username, :password)");
$pass = password_hash($password, PASSWORD_DEFAULT); // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない)
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $pass, PDO::PARAM_STR);
$stmt->execute();
$_SESSION['NAME'] = $username;
echo '<script>
alert("登録が完了しました。");
location.href="Main.php";
</script>';
} catch (PDOException $e) {
$error = $e->getMessage();
// $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
// echo $e->getMessage();
}
} else if($_POST["password"] != $_POST["password2"]) {
$errorMessage = 'パスワードに誤りがあります。';
}
}
?>