###やりたいこと
ユーザーIdユーザー名どちらでもログインできるようにする。
###ソースコード
´´´PHP
<?php
// password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
// セッション開始
session_start();
$db['host'] = "mysql1.webcrow-php.netowl.jp"; // DBサーバのURL
$db['user'] = "y"; // ユーザー名
$db['pass'] = 316"; // ユーザー名のパスワード
$db['dbname'] = "yrs"; // データベ
// エラーメッセージの初期化
$errorMessage = "";
if (isset($_POST["button"])) {
// 1. ユーザIDの入力チェック
if (empty($_POST["userid"])) { // emptyは値が空のとき
$errorMessage = 'ユーザーIDが未入力です。';
} else if (empty($_POST["password"])) {
$errorMessage = 'パスワードが未入力です。';
}
if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
// 入力したユーザIDを格納
$userid = $_POST["userid"];
// 2. ユーザIDとパスワードが入力されていたら認証する
$dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', $db['host'], $db['dbname']);
// 3. エラー処理
try {
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$stmt = $pdo->prepare('SELECT * FROM userData WHERE id = ?');
$stmt->execute(array($userid));
$password = $_POST["password"];
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (password_verify($password, $row['password'])) {
session_regenerate_id(true);
// 入力したIDのユーザー名を取得
$id = $row['id'];
$sql = "SELECT * FROM userData WHERE id = $id";
//入力したIDからユーザー名を取得
$stmt = $pdo->query($sql);
foreach ($stmt as $row) {
$row['name'];
// ユーザー名
}
$_SESSION["NAME"] = $row['name'];
header("Location: Main.php");
// メイン画面へ遷移
exit();
// 処理終了
} else {
// 認証失敗
$errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
}
} else {
// 4. 認証成功なら、セッションIDを新規に発行する
// 該当データなし
$errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
}
} catch (PDOException $e) {
$errorMessage = 'データベースエラー';
//$errorMessage = $sql;
// $e->getMessage() でエラー内容を参照可能(デバック時のみ表示)
// echo $e->getMessage();
}
}
}
?>
<!doctype html>
<html>
<center>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
<body>
<h1>ログイン画面</h1>
<form id="loginForm" name="loginForm" action="" method="POST">
<fieldset>
<legend>ログインフォーム</legend>
<div><font color="#ff0000">
<?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
<label for="userid">ユーザーID</label><input type="text" id="userid" name="userid" placeholder="ユーザーIDを入力" value="<?php if (!empty($_POST["userid"])) {echo htmlspecialchars($_POST["userid"], ENT_QUOTES);} ?>">
<br>
<label for="password">パスワード</label>
<input type="password" id="password" name="password" value="" placeholder="パスワードを入力"
<br>
認証を行ってください。
<br>
<html lang="ja">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?hl=ja"></script>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
</head>
<body>
<form method="post" action="testresult.php">
<div class="g-recaptcha" data-callback="clearcall" data-sitekey="(6LdmQEF)"></div>
<input type="submit" name="button" value="ログイン" disabled>
</form>
<script type="text/javascript">
function clearcall(code) {
if(code !== ""){
$(':submit[name=button]').removeAttr("disabled");
}
}
</script>
</body>
</html>
<br> <legend>新規登録フォーム</legend>
<input type="submit" value="新規登録">
</fieldset>
</form>
</body>
<center/>
</html>
###捕捉
このコードで
正常に動いています。
宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。