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

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

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

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

3回答

1599閲覧

入力フォームに値が入っている

Roo

総合スコア55

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2018/09/07 05:01

編集2018/09/07 05:04

イメージ説明### 前提・実現したいこと
phpで、ログイン機能を作成しています。
アクセスした際には初期画面の入力フォームを空で表示させたいです。
サブミットした際にバリデーション等で返ってきたときには、
間違った入力値のまま表示させたいです。

発生している問題・エラーメッセージ

大半の機能は実装できたのですが、
いざ動かすと入力フォームに値が存在しています。
その値を消してボタンを押下すると、また値が表示されてしまいます。

該当のソースコード

<?php // セッション開始 session_start(); if (isset($_SESSION["NAME"])) { header("Location: my.php"); exit; } $db['host'] = "localhost"; // DBサーバのURL $db['user'] = "phpusr"; // ユーザーID $db['pass'] = "phppass"; // ユーザー名のパスワード $db['dbname'] = "php10"; // データベース名 $date = date('Y-m-d H:i:s');//日付 // エラーメッセージの初期化 $errorMessage = ""; // ログインボタンが押された場合 if (isset($_POST["login"])) { // 1. ユーザIDの入力チェック if (empty($_POST["userid"])) { // emptyは値が空のとき $errorMessage = '※UserIDまたはPasswordが間違っています。'; } else if (empty($_POST["password"])) { $errorMessage = '※UserIDまたはPasswordが間違っています。'; } 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 name = ?'); $stmt->execute(array($userid)); $password = $_POST["password"]; if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // if (password_verify($password, $row['password'])) { if ( $password == $row['password']) { session_regenerate_id(true); //正常に叩かれた場合、SQL実施 時間 $sql = "UPDATE userdata SET sdate='$date' WHERE id='1'"; $result = $pdo->query($sql); // 入力した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: my.php"); exit(); // 処理終了 } else { // 認証失敗 $errorMessage = '※UserIDまたはPasswordが間違っています。'; } } else { // 4. 認証成功なら、セッションIDを新規に発行する // 該当データなし // $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; $errorMessage = '※UserIDまたはPasswordが間違っています。'; } } catch (PDOException $e) { header("Location: 500.php"); //$errorMessage = $sql; // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) // echo $e->getMessage(); } } } ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>ログイン</title> <link rel="stylesheet" href="test.css"> </head> <body> <div class="parent"> <h1>login page</h1> <form id="loginForm" name="loginForm" action="" method="POST"> <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div> <br>UserIDとPasswordを入力してください</br> <div class="kakko" > <label for="userid">UserID</label> &nbsp <input type="text" name="userid" value=""> <br> <label for="password">Password</label><input type="password" name="password" value=""> </br> <input type="submit" id="login" name="login" value="login"> </div> </div> </form> </body> </html>

試したこと

クッキーはこのページ作成してからのものは消去したつもりです。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答3

0

webブラウザのパスワード保存機能じゃないかと。

それを無効化したいのであれば、
ありきたりなuserとpassではない
別の単語を使うといいらしい。

投稿2018/09/07 05:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Roo

2018/09/07 05:30

お忙しい中ご回答ありがとうございます。 実践させていただきます。 取り急ぎご返礼を
guest

0

ベストアンサー

ブラウザのパスワード保存機能がある上だと「初期値絶対空」は難しいとは思いますが、

php

1<?php 2$user_value = ""; 3$pass_value = ""; 4if($_SERVER['REQUEST_METHOD'] == 'POST'){ 5 if(isset($_POST["user"])){ 6 $user_value = $_POST["user"]; 7 } 8 if(isset($_POST["pass"])){ 9 $pass_value = $_POST["pass"]; 10 } 11} 12?> 13<input type="text" name="user" value="<?=$user_value ?>"> 14<input type="password" name="pass" value="<?=$pass_value ?>">

保存させたくなければtype="password"をtype="text"で組むという手もなくはないですけど、そこはセキュリティ要件と照らし合わせる必要がありますね。

投稿2018/09/07 05:22

m.ts10806

総合スコア80850

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

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

Roo

2018/09/07 06:17

お忙しいなかご解答ありがとうございます。 まさにその通りですね。。。どうしたものか、、 パスワード保存機能をオフにして、 ↓ クッキー消去して ↓ form属性にautocomplete="off"追加でできますかね?
guest

0

とりあえずブラウザのオートコンプリート機能を疑うべきですね
オートコンプリートをオンにしているということは
ユーザーが自動入力を望んでいるという状況です

投稿2018/09/07 05:16

yambejp

総合スコア114769

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

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

Roo

2018/09/07 05:29

お忙しい中ご回答ありがとうございます。 実践させていただきます。 取り急ぎご返礼を
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問