前提・実現したいこと
PHP
とMySQL
を使って簡単なログイン画面を作っています。
ユーザからIDとパスワードを受け取り、データベースにそれらがある場合のみログインする機能を持たせたいです。
発生している問題・エラーメッセージ
IDとパスワードに関わらずログインが成功してしまいます。
該当のソースコード
######ログイン画面のコード(一部のみ表示)
PHP
1<div id="login" class="tabcontent"> 2 <h3>Login</h3> 3 <form action="login.php" method="post"> 4 <input type="text" name="userPassword" placeholder="UserID"> 5 <input type="text" name="password" placeholder="Password"> 6 <input type="submit" value="Submit"> 7 </form> 8</div>
######ログイン用のボタンが押された時のコード(login.php)
PHP
1<?php 2/* 変数を定義 */ 3$host = "localhost"; 4$user = "root"; 5$pass = "1234"; 6$DBName = "DB1"; 7 8/* DBに接続 */ 9$mysqli = new mysqli($host, $user, $pass, $DBName); 10if($mysqli->connect_error){ 11 echo $mysqli->connect_error; 12 exit(); 13} else { 14 $mysqli->set_charset("utf8"); 15 echo "Connect success!"; 16} 17 18/* クエリを準備 */ 19$UID=$_POST["userPassword"]; 20$pass=$_POST["password"]; 21$query = "select exists(select * from db where userID='$UID' and password='$pass')"; 22echo "id : ".$UID . "<br>"; 23echo "pass : ".$pass . "<br>"; 24echo "query : ".$query . "<br>"; 25echo $pass. "<br>"; 26 27$result = $mysqli->query($query); 28echo "result : $result"."<br>"; 29if(!$result){ 30 echo "Could not find user: $UID." . "<br>"; 31} 32else { 33 echo "User $UID have successfully logged in!!" . "<br>"; 34} 35/* DBとの接続を解除 */ 36$result->close(); 37$mysqli->close(); 38 39?> 40
######MySQLのテーブル
+------------------+----------+-----------+---------------+----------+---------------+ | name | phoneNum | address | email | password | userID | +------------------+----------+-----------+---------------+----------+---------------+ | a | b | c | d | e | 5bd70d70add61 | +------------------+----------+-----------+---------------+----------+---------------+
######htmlに表示される内容(ID:5bd70d70add61, pass:XXXXXでログインするがXXXXXのパスワードはテーブルに無いにも関わらずログインに成功)
Connect success! id : 5bd70d70add61 pass : XXXXX query : select exists (select * from customers where userID='5bd70d70add61' and password='XXXXX') User 5bd70d70add61 have successfully logged in!!
試したこと
mysql
で"select exists(select * from db where userID='$UID' and password='$pass')"
を試した所実際に機能しているみたいです。
$result
変数の値を出力した所何も入っていなかったので$result = $mysqli->query($query);
に問題があるのでしょうか?
補足情報(FW/ツールのバージョンなど)
mysql -V => mysql Ver 14.14 Distrib 5.7.23
php -V => PHP 7.0.32-0ubuntu0.16.04.1
OS => Linux 4.4.0-133-generic #159-Ubuntu
###追記
指摘を受けた後に直したコード(login.php)
PHP
1/* query DB */ 2$UID=$_POST["userPassword"]; 3$pass=$_POST["password"]; 4$query = "select exists(select * from db where userID='$UID' and password='$pass')"; 5$result = $mysqli->query($query); 6if($result->fetch_assoc()){ 7 echo "User $UID have successfully logged in!!" . "<br>"; 8} 9else { 10 echo "Could not find user $UID" . "<br>"; 11} 12
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/29 22:09