こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

phpのif文について

phpでログイン処理のif文を書いています。
nameとpasswordのフィールドが記入されているのかをチェックするif文を書いたのですが、機能してくれません。何かが間違っているのでしょうか。
何も入力しないor間違った情報を入力する ということをしてもログインが出来てしまいます。
どなたかテェックお願い致します。

<?php
require('dbconnect.php');

session_start();

if ($_COOKIE['name'] != '') {
$_POST['name'] = $_COOKIE['name'];
$_POST['password'] = $_COOKIE['password'];
$_POST['save'] = 'on';
}

if (!empty($_POST)) {
// ログインの処理
if ($_POST['name'] != '' && $_POST['password'] != '') {
$sql = sprintf('SELECT * FROM members WHERE name="%s" AND password="%s"',
mysql_real_escape_string($_POST['name']),
sha1(mysql_real_escape_string($_POST['password']))
);
$record = mysql_query($sql) or die(mysql_error());
if ($table = mysql_fetch_assoc($record)) {
// ログイン成功
$_SESSION['id'] = $table['id'];
$_SESSION['time'] = time();

// ログイン情報を記録する
if ($_POST['save'] == 'on') {
setcookie('name', $_POST['name'], time()+60*60*24*14);
setcookie('password', $_POST['password'], time()+60*60*24*14);
}

header('Location: index.php'); exit();
} else {
$error['login'] = 'failed';
}
} else {
$error['login'] = 'blank';
}
}
?>

投稿日時 - 2015-09-12 01:36:08

QNo.9046215

困ってます

質問者が選んだベストアンサー

>サイトには名前とパスワードを入力していただきログインが出来るような仕組みを作りたいのですがこの場合はどのようにしたら良いのでしょうか。

質問のコードは、自分で書いたものですか? ならば、データベースアクセスなどは正常に動くのを確認してありますね? それなら#1で指摘したif ($_COOKIE['name'] != '') ~のif文をカットすれば動くと思います。

ただ、if (!empty($_POST)) はちょっと……。if( $_SERVER['REQUEST_METHOD'] == 'POST') とかにしたほうがいいのでは。

あと、ログイン情報をセッションに保管した後、更にクッキーにまで保管している理由は? そもそもクッキーにパスワードを保管するなんて危険なことはしてはダメですよ。そのへんも見なおしたほうがいいのでは。

投稿日時 - 2015-09-14 10:53:39

補足

回答ありがとうございます。
($_COOKIE['name'] != '') ~のif文をカットしてもログインが出来てしまいます(名前やパスワードを入力しない状態で)
また$_SERVER['REQUEST_METHOD'] == 'POST') と書き換えてもダメでした。
一体なのが原因なのでしょうか。
データベースは新規登録がサイトからおこなうことができますのでしっかり正常に動いているのだと思いますが…
このコードは自分で書いたものではなくよく分かるphpという本のコードを抜粋して自分なりに書き換えたものです。
本では、メールアドレスニックネームパスワードでログインするのですが自分の場合は名前とパスワードでログインしたいのでこのように書き換えています。

投稿日時 - 2015-09-14 22:58:18

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

if ($_COOKIE['name'] != '') {
$_POST['name'] = $_COOKIE['name'];
$_POST['password'] = $_COOKIE['password'];
$_POST['save'] = 'on';
}
 ↑
これ、何をしようとしてます?
$_POSTは、ポストされた値が保管されているところで、これは原則、値の読み取りのみ使います。これを書き換えてはいけません。

この値をクッキーの値に書き換えてしまっているため、一度クッキーにログイン情報が記述されてしまうと、後はログインページで何を入力しようがログインできてしまいます(何を入力してもクッキーの値で上書きされるため)。

投稿日時 - 2015-09-12 11:18:23

補足

回答ありがとうございます。
サイトには名前とパスワードを入力していただきログインが出来るような仕組みを作りたいのですがこの場合はどのようにしたら良いのでしょうか。

投稿日時 - 2015-09-14 04:15:24

お礼

クッキーのif文とセッションの設定を見なおしたところ無事に問題解決することができました。ありがとうございます。
また機会があればよろしくお願いします。

投稿日時 - 2015-09-15 01:28:54

あなたにオススメの質問