dポイントプレゼントキャンペーン実施中!

PHPでログイン機能を作成しています。
エラーが出てしまって上手くログインできません。
以下の情報から分かることがありましたら教えて下さい。

レンタルサーバーはフレンドサーバーです。
PHPmyadminのバージョンは4.5.5になります。

作成と言っても、
http://516.jp/2827
を参考にほぼ丸写しなのですが・・・

ログインユーザーの登録ページ(insert.php)では
$link = mysql_connect('localhost', 'hogehoge', 'hogehoge');
if (!$link) {
die('接続失敗です。'.mysql_error());
}
はデータベースに接続が出来て、問題なくユーザー登録は行えます。

しかし、ログインページ(login.php)で
上のページで登録したユーザーIDとパスワードでログインしようとするのですが、
login.phpのユーザーID入力の欄には

Notice: Undefined index: userid in /var/www/vhosts/********.com/login.php on line 86

と表示されます。

ユーザーIDとパスワードを入力してログインを押すと
Unknown MySQL server host 'localhost' (1)
と表示されます。

接続のソースは上記参考にしたページの転載になりますが、以下になります。

<?php
//require 'password.php';
// セッション開始
session_start();

ini_set("display_errors", On);
error_reporting(E_ALL);

// エラーメッセージの初期化
$errorMessage = "";

// ログインボタンが押された場合
if (isset($_POST["login"])) {
// 1.ユーザIDの入力チェック
if (empty($_POST["userid"])) {
$errorMessage = "ユーザIDが未入力です。";
} else if (empty($_POST["password"])) {
$errorMessage = "パスワードが未入力です。";
}

// 2.ユーザIDとパスワードが入力されていたら認証する
if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
// mysqlへの接続
$mysqli = new mysqli('localhost', 'hogehoge', 'hogehoge');
if ($mysqli->connect_errno) {
print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error);
exit();
}

// データベースの選択
$mysqli->select_db('*****(データベース名)');

// 入力値のサニタイズ
$userid = $mysqli->real_escape_string($_POST["userid"]);

// クエリの実行
$query = "SELECT * FROM *****(テーブル名) WHERE name = '" . $userid . "'";
$result = $mysqli->query($query);
if (!$result) {
print('クエリーが失敗しました。' . $mysqli->error);
$mysqli->close();
exit();
}

while ($row = $result->fetch_assoc()) {
// パスワード(暗号化済み)の取り出し
$db_hashed_pwd = $row['password'];
}

// データベースの切断
$mysqli->close();

// 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。
//if ($_POST["password"] == $pw) {
if (password_verify($_POST["password"], $db_hashed_pwd)) {
// 4.認証成功なら、セッションIDを新規に発行する
session_regenerate_id(true);
$_SESSION["USERID"] = $_POST["userid"];
header("Location: main.php");
exit;
}
else {
// 認証失敗
$errorMessage = "ユーザIDあるいはパスワードに誤りがあります。";
}
} else {
// 未入力なら何もしない
}
}

?>

よろしくお願いします。

A 回答 (2件)

ぱっと見ですが、最初のNoticeはユーザID入力欄のvalueに$_POST["userid"]を指定しているのが原因と思います。

恐らくパスワードを間違えた時にIDは入力したまま残してあげるためでしょうが、入力画面を読み込んだ直後は$_POST["userid"]が未定義のため、Noticeが出るのだと思います。対処法は色々ありますが、issetを使って、$_POST["userid"]がセットされている時のみユーザIDのvalueをセットするというのも一つの方法と思います。

あるいはIDを読み込まなくて良いなら、86行目?にある入力欄のvalueの中身を空欄にするというのも消極策ですがありかもです。

人によってはNoticeを無効(非出力)にしてしまうこともあるかも知れませんがあまりお勧めできません。

二つ目の接続問題は、ご質問内容からだけではぱっと見、原因が分かりませんでした。

登録時mysql_connectの成功しているというのは本当でしょうか。値をphpMyadminなどで確認してみると良いと思います。

mysql_connectが確かに成功しているなら、失敗した方もその接続設定にしているかどうか、もう一度確認してみると良いかもです。

どうしてもお手上げということであれば、成功しているmysql_connectでの接続方法のみ使うよう書き直すということもありだとは思いますが、出来ればスッキリしたい問題ですよね。。

何れにしても認証はセキュリティに直結しますので、慎重なコーディングが大切と思います。

以上、ぱっと見の回答なので間違っているかもしれませんので、あくまでご参考まで。。
    • good
    • 1

よくわからないけど


insertページではmysql_関数をつかっていて
loginページではmysqli_関数をつかっているの?

login.phpの86行目前後の記述がわからないとなんといないですが
「参照している配列にuseridというキーがないですよ注意してください」
というエラーですね
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!