質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1600閲覧

PHPでログインフォーム作成中にFatal errorが発生する

KeilyX07

総合スコア29

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2022/04/21 14:59

編集2022/04/22 03:47

ログインフォームを作成したい

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

このエラーの対処方法が調べても理解できず質問させていただくことにしました。

エラーメッセージにすべて記載されています。

google翻訳

致命的なエラー:キャッチされないTypeError:PDOStatement :: execute():引数#1($ params)は?array型である必要があり、文字列が指定されています

execute()の引数はarray型を指定します。
(php.net)PDOStatement::execute

投稿2022/04/21 15:37

編集2022/04/21 15:39
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2022/04/21 18:04

仰るとおり $stmt->execute($_POST['username']); → $stmt->execute([$_POST['username']]); とすることでエラーが解消されました。ありがとうございます。 現在、正しいパスワードを入力してもパスワードが違うと表示されてしまいます。これはなぜなのでしょうか。
Y.H.

2022/04/21 22:17

落ち着いて自分のコーディングをチェックしましょう。 <input type="text" name="email"> ↓ <input type="text" name="username">
KeilyX07

2022/04/22 03:43

ご指摘ありがとうございます。mineralwaterさんにご指摘いただいた時点で修正していたのですが追記忘れておりました。編集後も症状変わらずです。
Y.H.

2022/04/22 05:42

本質問の > PHPでログインフォーム作成中にFatal errorが発生する は解決済でよろしいでしょうか? べつの問題・課題であれば別途質問されたほうがいいと思います。
KeilyX07

2022/04/22 14:16

承知しました。本質問については解決しました。ご回答いただきありがとうございました。
guest

0

直接の原因は、$stmt->execute($_POST['username']);$_POST['username']を受信していないから。

そのようになっている原因は、

html

1 <form action="login.php" method="post"> 2 <label for="username">ユーザー名</label> 3 <input type="text" name="email"> 4 <label for="password">パスワード</label> 5 <input type="password" name="password"> 6 <button type="submit">LOGIN</button> 7 </form>

フォーム送信している中に、name="username"のものがないため。

投稿2022/04/22 00:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2022/04/22 03:48

コメントありがとうございます。ご指摘いただいた箇所を修正しましたが正しいIDとパスを入力しても通らない状態です。
退会済みユーザー

退会済みユーザー

2022/04/22 04:06

「正しいIDとパスを入力しても通らない状態」のあと、何を調べましたか? webサーバープログラムのエラーログ出力に何かしらのエラーメッセージが出ていることがあります。
guest

0

php:login_form.php

1 <label for="username">ユーザー名</label> 2 <input type="text" name="email"> // nameがemailではなくてusername なのでは?

投稿2022/04/21 15:37

mineralwater

総合スコア289

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KeilyX07

2022/04/22 03:44

ご指摘ありがとうございます。nameのところを修正しましたが正しいIDとパスを入力しても通らない状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問