🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

Q&A

1回答

1599閲覧

LOLIPOP!でログイン機能の実装ができない

mamemidori

総合スコア13

PHP

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

0グッド

1クリップ

投稿2019/11/25 01:53

lolipop:PHP5.6

xamppではログインすることができましたのでpassword.php等のミスではないと思います。

よろしくお願い致します。

php

1<?php 2require 'password.php'; 3// セッション開始 4session_start(); 5 6$db['host'] = "略"; // DBサーバのur 7$db['name'] = "略"; 8$db['pass'] = "略"; 9$db['dbname'] = "略"; 10 11// エラーメッセージの初期化 12$errorMessage = ""; 13 14// ログインボタンが押された場合 15if (isset($_POST["login"])) { 16 // 1.ユーザIDの入力チェック 17 if (empty($_POST["nameid"])) { 18 $errorMessage = "名前が未入力です。"; 19 } else if (empty($_POST["password"])) { 20 $errorMessage = "パスワードが未入力です。"; 21 } 22 23 // 2.ユーザIDとパスワードが入力されていたら認証する 24 if (!empty($_POST["nameid"]) && !empty($_POST["password"])){ 25 // mysqlへの接続 26 $mysqli = new mysqli($db['host'], $db['name'], $db['pass'],$db['dbname']); 27 if ($mysqli->connect_errno) { 28 print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error); 29 exit(); 30 } 31 32 // データベースの選択 33 $mysqli->select_db('you_locker'); 34 35 // 入力値のサニタイズ 36 $nameid = $mysqli->real_escape_string($_POST["nameid"]); 37 // クエリの実行 38 $query = "SELECT * FROM jyutaku WHERE jyutaku_id = '".$nameid."' "; 39 $result = $mysqli->query($query); 40 if (!$result) { 41 print('クエリーが失敗しました。' . $mysqli->error); 42 $mysqli->close(); 43 exit(); 44 } 45 46 while ($row = $result->fetch_assoc()) { 47 // パスワード(暗号化済み)の取り出し 48 49 50 $db_hashed_pwd = $row['jyutaku_password']; 51 52 } 53 54 // データベースの切断 55 $mysqli->close(); 56 57 // 3.画面から入力されたパスワードとデータベースから取得したパスワードを比較します。 58 //if ($_POST["password"] == $sql){ 59 if (password_verify($_POST["password"], $db_hashed_pwd)) { 60 // 4.認証成功なら、セッションIDを新規に発行する 61 session_regenerate_id(true); 62 $_SESSION["NAMEID"] = $_POST["nameid"]; 63 64 65 //header("Location: main.php"); 66 exit; 67 } 68 else { 69 // 認証失敗 70 $errorMessage = "名前あるいはパスワードに誤りがあります。"; 71 } 72 } else { 73 // 未入力なら何もしない 74 } 75} 76?> 77 78<html> 79 <head> 80 <meta charset="UTF-8"> 81 <title>ログイン</title> 82 </head> 83 <body> 84 <h1>ログイン画面</h1> 85 <!-- $_SERVER['PHP_SELF']はXSSの危険性があるので、actionは空にしておく --> 86 <!--<form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST">--> 87 <form id="loginForm" name="loginForm" action="" method="POST"> 88 <fieldset> 89 <legend>ログインフォーム</legend> 90 <div><?php echo $errorMessage ?></div> 91 <label for="nameid">  名前 </label><input type="text" id="nameid" name="nameid" value="<?php echo htmlspecialchars($_POST["nameid"], ENT_QUOTES); ?>"> 92 <br> 93 <label for="password">パスワード</label><input type="password" id="password" name="password" value=""> 94 <br> 95 <input type="submit" id="login" name="login" value="ログイン"> 96 </fieldset> 97 </form> 98</body> 99</html> 100

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

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

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

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

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

maisumakun

2019/11/25 02:01

具体的に、どうなるのでしょうか?
m.ts10806

2019/11/25 02:05

どの処理を通っているか確かめてください。分岐にそれぞれ別の文言をechoするとかだけでも良いので。
mamemidori

2019/11/25 02:13

id,passwordを正しく入力しても誤字しても クエリーが失敗しました。No database selected が出力されます。
m.ts10806

2019/11/25 02:16 編集

エラーにそのまま原因でてますね。
guest

回答1

0

珍しいエラーではないと思います。
Google検索:No database selected 約 287,000,000 件

No database selected

簡易和訳:データベースが選択されていません

mysqli::select_db()のところが失敗しているのではないでしょうか。
PHPマニュアルの通り、このメソッドもtrue/falseで「実行結果」を返すようなので、返り値を確認してください。

というか、下記の第4引数で既にDBは選択されて接続が確立されています。直後に選択しなおすくらいなら接続時に設定するので良いのではないでしょうか?
そのほうが先に問題に気づけます。

$mysqli = new mysqli($db['host'], $db['name'], $db['pass'],$db['dbname']);

取得結果を別のDBに入れるなど特別な要件がない限り、接続先を替えるってないと思います。今回は接続した直後に替えにいっているので、謎の実装になっています。

あとtry-catchでDB関連の処理を全て囲ってexecptionを捕捉する仕組みにすべきです。

投稿2019/11/29 20:52

編集2019/11/30 03:23
m.ts10806

総合スコア80875

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問