我不太明白HTTP ERROR 500的错误

时间:2018-11-21 22:22:49

标签: php mysql session

当我按下“提交”按钮时,出现HTTP ERROR 500错误,但我不知道原因。 这次我想知道的是2分。

  1. 如何处理此错误。
  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 = 'パスワードに誤りがあります。';
    }
}
?>

0 个答案:

没有答案