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件)
- 最新から表示
- 回答順に表示
No.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での接続方法のみ使うよう書き直すということもありだとは思いますが、出来ればスッキリしたい問題ですよね。。
何れにしても認証はセキュリティに直結しますので、慎重なコーディングが大切と思います。
以上、ぱっと見の回答なので間違っているかもしれませんので、あくまでご参考まで。。
No.1
- 回答日時:
よくわからないけど
insertページではmysql_関数をつかっていて
loginページではmysqli_関数をつかっているの?
login.phpの86行目前後の記述がわからないとなんといないですが
「参照している配列にuseridというキーがないですよ注意してください」
というエラーですね
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP 【PHP/MySQL】コード上で生成したクエリを基に集計クエリを作りたい 1 2022/07/28 15:06
- PHP php エラー 2 2022/10/23 16:43
- MySQL 「掲示板のログイン画面」はPHP~MySQLに「データベース認証のシステム」方式です。 1 2022/09/27 05:00
- PHP php ログイン 1 2022/11/01 00:24
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
lolipopでのmysql接続について
-
MySQL5.5の設定とエラー
-
「クラス関数」「メンバ関数」...
-
onedrive にexcelファイルをア...
-
【file_exists】ファイルが存在...
-
ImageCreate関数が undefined f...
-
OpenGLで描いて画像ファイル出力
-
CSV出力にHTMLが入ってしまう
-
PHPのif文でその処理を途中で抜...
-
Fedoraでphp
-
別ファイルの変数を呼び出した...
-
フォントの色を変えるには?
-
「imagejpeg」(GD)で作成した...
-
エクスプローラーでフォルダを...
-
存在しないメールアドレスかど...
-
MySQLのdatetime型の月日0を削...
-
インスタンス化に伴うメモリ消...
-
phpにて動的なページを生成する...
-
.htaccessにphp_valueが使用できな
-
メール受信で空メール送信のプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのWARNINGをcatchするには
-
レンタルサーバでPHPからMySQL...
-
localhostにリダイレクトされて...
-
lolipopでのmysql接続について
-
PHPで作ったログイン機能でデー...
-
XserverでpearのDBでMySQLに接続
-
データベースと連動したベーシ...
-
XOOPSのサーバアクセス設定につ...
-
エックスサーバーでのmysql設定...
-
phpMyAdminが使えない
-
接続しているデータベース名を得る
-
phpmyadminのトップページのMyS...
-
MySQLから送られて来たデータの...
-
MySQLとPHPで日本語が文字化け...
-
MySQL5.5の設定とエラー
-
XOOPSインストール中に真っ白画...
-
My SQL の文字化け
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
おすすめ情報