ログインフォームを作成したい
phpを使用してログインフォームを作成しようとしています。ユーザー名とパスワードで認証できる方式にしようと考えています。
現在、下記のエラーが表示されています。
Error
1Fatal error: Uncaught TypeError: PDOStatement::execute(): Argument #1 ($params) must be of type ?array, string given in C:\Kaihatsu\login.php:9 Stack trace: #0 C:\Kaihatsu\login.php(9): PDOStatement->execute('(入力したユーザー名)') #1 {main} thrown in C:\Kaihatsu\login.php on line 9
このエラーの対処方法が調べても理解できず質問させていただくことにしました。
以下ソースコードです。
login_form.php
php
1<?php 2 3function h($s){ 4 return htmlspecialchars($s, ENT_QUOTES, 'utf-8'); 5} 6 7session_start(); 8//ログイン済みの場合 9if (isset($_SESSION['NAME'])) { 10 echo 'ようこそ' . h($_SESSION['NAME']) . "さん<br>"; 11 exit; 12} 13 14 ?> 15 16<!doctype html> 17<html> 18<head> 19<meta charset="utf-8"> 20<title>login</title> 21<link rel="stylesheet" href="loginform.css"> 22</head> 23<body> 24 <h1>ようこそ、ログインしてください。</h1> 25 <form action="login.php" method="post"> 26 <label for="username">ユーザー名</label> 27 <input type="text" name="username"> 28 <label for="password">パスワード</label> 29 <input type="password" name="password"> 30 <button type="submit">LOGIN</button> 31 </form> 32</body> 33</html>
login.php
php
1<?php 2require_once('files/config.php'); 3session_start(); 4 5$errormessage = ""; 6try { 7 $pdo = new PDO(DSN, DB_USER, DB_PASS); 8 $stmt = $pdo->prepare('SELECT * from users where username = ?'); 9 $stmt->execute($_POST['username']); 10 $row = $stmt->fetch(PDO::FETCH_ASSOC); 11}catch(\Exception $e) { 12 echo $e->getMessage() . PHP_EQL; 13} 14 if (!isset($row['username'])) { 15 echo("ユーザー名またはパスワードが違います。"); 16 } 17 $password = $_POST["password"]; 18 if(password_verify($password, $row['password'])) { 19 session_regenerate_id(true); 20 $_SESSION['NAME'] = $row['username']; 21 header("location: successful.php"); //完了画面に移動 22 exit(); 23 }else { 24 //認証失敗 25 $errormessage = 'ユーザー名またはパスワードに誤りがあります。'; 26 return false; 27 } 28?>
config.php
php
1<?php 2define('DSN', 'mysql:host=localhost;dbname=userData'); 3define('DB_USER', 'Connect'); 4define('DB_PASS', 'ROP8iY4A1nJ3'); 5?>
データベース
データベース名:userData
名前 | 値 |
---|---|
ユーザー名 | Connect |
ホスト | localhost |
パスワード | ROP8iY4A1nJ3 |
テーブル名 | users |
動作環境
OS: Windows Server 2019 Datacenter
・XAMPP(Apache 2.0 Handler)
・PHP8.1.4
引用元サイト
https://qiita.com/qwertyuiopngsdfg/items/597da67387723a5aedad
回答3件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/04/21 18:04
2022/04/21 22:17
2022/04/22 03:43
2022/04/22 05:42
2022/04/22 14:16