• ベストアンサー

ログインシステムをPHPで作る(複数のIDとパス)

https://www.web-officer.com/php/make-login-system-with-php.php 上記のサイトを参考にしています。 ID「webtan」 パスワード「webtan_pass」 です。 複数のIDとパスワードでログインする方法を教えて下さい。 例 ユーザー1 ID「webtan」 パスワード「webtan_pass」 ユーザー2 ID「webtan2」 パスワード「webtan_pass2」 ・ ・ ・

  • nkmyr
  • お礼率67% (403/600)
  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
回答No.3

if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") || ($_POST["user_name2"] == "webtan" && $_POST["password"] == "webtan_pass2") { $_SESSION["user_name"] = $_POST["user_name"]; $_SESSION["user_name2"] = $_POST["user_name2"]; それと。1個目を例えば満たしているとしたとき、2個目が、 あるとは限らないわけなので、 ↑user_name と user_name2 の関係 なので、 if( ($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") || ($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass2") ) { $_SESSION["user_name"] = $_POST["user_name"]; と、変数はそのままで値の方を変化させる方がいいですよ。 なお、、本気ならこれは使わず、 $login=[ ["id"=>"webtab","pw"=>"webtan_pass"], ["id"=>"webtab2","pw"=>"webtan_pass2"], ["id"=>"webtab3","pw"=>"webtan_pass3"] ]; と、リスト定義して foreach ( $login as $check ) { if (   $_POST["user_name"] == $check["id"] &&   $_POST["password"] == $check["pw"]  ) {   // 通過  } } みたいに、好きに登録できるようにしておいた方が、 いいでしょうね。あくまでこのままのやり方ならですが。

nkmyr
質問者

お礼

お陰様でできました。ありがとうございました。 リスト定義のforeachはまだ理解してないですが、テストしてみます。

その他の回答 (2)

回答No.2

>どこが違うのでしょうか? かっこが1個足りてませんよ~ あと。デバッガー使う方が。上達も早いので、 気が向いたらお試しを!

回答No.1

このサイトのやり方でいいなら if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") { $_SESSION["user_name"] = $_POST["user_name"]; $login_success_url = "login_success.php"; header("Location: {$login_success_url}"); exit; } マッチしたら、exit抜けしているのだから if($_POST["user_name2"] == "webtan" && $_POST["password"] == "webtan_pass2") { $_SESSION["user_name"] = $_POST["user_name"]; $login_success_url = "login_success.php"; header("Location: {$login_success_url}"); exit; } と「2個目を書けばいい」ってことになります。 ただし、どっちにしても、 同じジャンプ先に飛んでいるので、処理が同じとみるのであれば、 if( ($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") || ($_POST["user_name2"] == "webtan" && $_POST["password"] == "webtan_pass2") ) { 処理} でもOKです。 あくまで、インスタントのログイン???(ログインというかは微妙)であれば、これでいいかと

nkmyr
質問者

お礼

ありがとうございます。 if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") || ($_POST["user_name2"] == "webtan" && $_POST["password"] == "webtan_pass2") { $_SESSION["user_name"] = $_POST["user_name"]; $_SESSION["user_name2"] = $_POST["user_name2"]; で記述しましたらHTTP ERROR 500となりました。 どこが違うのでしょうか?

関連するQ&A

  • エラーメッセージがブラウザリロードしても消えない

    https://www.web-officer.com/php/make-login-system-with-php.php エラーメッセージが出たあと、ブラウザをリロードしても消えないままです。 リロードしたら消える方法を教えて下さい。

    • 締切済み
    • PHP
  • php ログインについて

    php ログインについて phpでログイン画面を作っているのですがログインできません。エラー等々もでず、「スタッフコードかパスワードが違います」になります。ちなみにDBにはスタッフのデータはしっかり存在します。 コードとパスワードを正しく入力しているにもかかわらずログインできません。 ソースはこちらです [staff_login.php] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>ログイン</title> </head> <body> スタッフログイン<br/> <br/> <form method="post" action="staff_login_check.php"> スタッフコード<br/> <input type="text" name="code"><br/> パスワード<br/> <input type="password" name="pass"><br/> <br/> <input type="submit" value="ログイン"> </form> </body> </html> [staff_login_check.php] <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code=htmlspecialchars($staff_code); $staff_pass=htmlspecialchars($staff_pass); $staff_pass=md5($staff_pass); $dsn='mysql:dbname=*****;host=********'; $user='*********'; $password='********'; $dbh=new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8'); $sql='SELECT name FROM mst_staff WHERE code=? AND password=?'; $stmt=$dbh->prepare($sql); $data[]=$staff_code; $data[]=$staff_pass; $stmt->execute($data); $dbh = null; $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print'スタッフコードかパスワードが違います<br/>'; print'<a href="staff_login.html">戻る</a>'; } else { header('Location: staff_top.php'); } } catch(Exception $e) { print'エラーが発生しました'; exit(); } ?> 解決方法、ご指摘ございましたら教えていただきたいです。

    • ベストアンサー
    • PHP
  • PHPのログイン処理について

    PHPのログイン処理について教えてください。 「login_auth.phpファイル」 <?php //session開始 session_start(); session_regenerate_id(true); //エラーメッセージを格納する変数を初期化 $error_message=""; //ログインボタンが押されたかを確認 if(isset($_post["sub"])){ if($_post["auth_id"] == "auth" && $_post["auth_pass"] == "1234"){ //ログインが成功した証拠をセッションに保持する $_session["login_name"] = $_post["auth_id"]; //管理者トップへWebブラウザをリダイレクトさせる $login_url = "http://{$_server["http_host"]}/reservation/auth_top.php"; header("Location: {$login_url}"); exit; } $error_message = "IDかPASSが間違えています"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'.$error_message.'</font>'; } ?> <center> <hr size="2" color="blue" width="50%"><br><br> <font size="4"><b>管理者認証画面</b></font> <br><br><hr size="2" color="blue" width="50%"><br><br> ユーザID/パスワードを入力してください。 <form action="login_auth.php" method="post"> <table border="2"> <tr> <td bgcolor="cyan">ユーザID</td> <td><input type="text" name="auth_id" value=""></td> </tr> <tr> <td bgcolor="cyan">パスワード</td> <td><input type="password" name="auth_pass" value=""></td> </tr> </table> <input type="submit" name="sub" value="ログイン"> </form> <a href="javascript:window.close();" target=_parent>閉じる</a> </center> </body> </html> 「auth_top.phpファイル」 <?php //セッションを開始する session_start(); //ログインが成功した証拠である変数のチェックを行なう if (!isset($_SESSION["login_name"])) { //変数に値がセットされていない場合は不正な処理とみなし、ブラウザをログイン画面へリダイレクトさせます $no_login_url ="http://{$_server["http_host"]}/reservation/login_auth.php"; header("Location: {$no_login_url}"); exit; } ?> 管理者画面です。 この簡単なプログラムなんですが、IDとPASSを入力しても画面が切り替わりません。 今、そこで行き詰っています。 どなたか教えていただけないでしょうか??

    • 締切済み
    • PHP
  • PHP ログインについて

    PHPを使い会員サイトを作っています。 遷移としては index→login→top でログインして中の各ページで、サイトロゴをクリックすればマイページトップに戻るようにしたいです。 ログイン時はPOSTでデータを受け取り、ログイン後はセッションで全ページを繋いでいます。 そののtopで困っています。 ログインしようとすると画面が真っ白になり、検証を見てもエラーは出ていませんでした。エラー表示になるよう設定しており、今までのエラーは見れていました。 session_start(); if(!isset( $_SESSION["uid"])&&(!isset( $_SESSION["pass"]))){ if(!isset ( $_POST ["uid"] )&&(!isset( $_POST["pass"]))){ header ( "Location: login.php" );} } if((isset ( $_POST ["uid"] ))&&(isset( $_POST["pass"]))){ login(); exit; } 上記で$_SESSIONのuidとpassがなければ$_POSTのuidとpassをチェック。$_POSTもなければ、login画面に移動。 $_POSTが入っていたら次のIF文で、関数login()。 関数login()は下記の通りです。 function login(){   function inputCheck($uid, $pass){ $flg=0; // IDの登録チェック require("dbConnect.php");//接続 $sql = "select * from usr where uid ={$uid}" ; //echo "sql=".$sql."<br>"; $result = $dbInfo->query ( $sql ); $record = $result->fetch ( PDO::FETCH_ASSOC ); $count = $result->rowCount (); if($count<=0){ echo "このIDは存在しません<br>"; $flg=1; } if($pass<>$record["pass"]){ echo "パスワードが違います<br>"; $flg=1; // データベースの切断 $dbInfo = null; } return $flg; } // 送信データの取得 $uid = htmlspecialchars($_POST ["uid"], ENT_QUOTES); $pass = htmlspecialchars($_POST ["pass"], ENT_QUOTES); $flg=inputCheck($uid, $pass); if($flg<>0){ require("login.php"); exit; }} 関数に入れ子で関数が使えると見たので中に入れましたが、inputCheck()をlogin()の外に出してみても同じように画面が真っ白になりました。 最初にログインだけ作って動かした際にはログインすることが出来ました。 ログイン状態のチェックが悪いのか関数の使い方が悪いのか、わかりません。 ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • 一つのphpファイルでログイン画面を作りたい

    一つのphpファイルでログイン画面を作りたい 一つのphpファイルでログイン画面→管理者画面 ログインエラー画面を作りたいと思っております。 下記のスクリプトで上手くセッションが保持できないので、 どなたかご教授ください。 宜しくお願いいたします。 -------------------------------------------- session_start(); //パスワードチェック $error_flag = 0; if(isset($_POST["login"])){ if($_POST["id"] == $login_id && $_POST["password"] == $login_pass){ $_SESSION["login"]["admin"] = 1; }else{ $error_flag = 1; } } if(isset($_SESSION["login"]["admin"]) && $_SESSION["login"]["admin"] == 1){ //管理者画面 }else{ //エラー画面 }

    • ベストアンサー
    • PHP
  • IDとパスの文字列を使い一発ログインしたい

    今まで過去に作成したIDとパスワードがたくさんあります(Yahoo,Gmail,Microsoft,等々)。 これらの生存確認や簡単ログインのため、IDの文字列とパスワードの文字列を 入力するだけで、上記サイトに簡単にログインしたいです。 どのような方法がありますか? 自分のつたない知識だと以下のような方法ができるのかなと思っています。 例1) http://www.yahoo.co.jp/login****ID****Password***** のようなURL指定 例2) VB.netなどで、プログラミング 何かしらアドバイスください。 よろしくお願いいたします。

  • phpでログイン時のIDチェック

    phpでIDとパスワードを入力してもらいそれをチェックしてログインするシステムを作っています。 普通にログインはできるのですがIDがsから始まりその後に数字が7桁来れば会員専用のメイン画面に移行し、それ以外のIDであれば普通のメイン画面に移行するプログラムを書きたいです。 例)IDがs1234567であれば会員用の画面、それ以外s1234,1234567,d1234567などのIDであれば違う画面に移行したいです。 自分が書いたコードはこのようになっておりこちらをどのように改良していけばこのようなプログラムが書けるか知りたいです。 どなたかご教授お願いします。 <?php require('dbconnect.php'); session_start(); 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(); header('Location: group.php'); exit(); } else { $error['login'] = 'failed'; } } else { $error['login'] = 'blank'; } } ?>

    • ベストアンサー
    • PHP
  • ログインページ

    PHPとMySQLで ログインするときに、ログインIDとパスワード(md5処理)を 入力する普通のログインページをつくったのですが 照合するときに例えば ログインIDがphp パスワードが178だとログインできず ログインIDがabe パスワードがabeだとログインできる ログインIDがパスワード一致の場合だけ何故かログインできて しまうのですが、自分で書いていてなんなんですが 以下のプログラムではそういう風になってしまうんでしょうか。 <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } if($_POST["action"]=="login"){ $login_id = mysql_real_escape_string($_POST["login_id"]); $sql="select * from users where login_id= '$login_id' and state='0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date = '".date('Y-m-d H:i:s')."' where login_id= '".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • 簡単なIDとパスで偶然ログイン出来てしまっても不正アクセスに該当するのでしょうか?

    ID:111 pass:111や ID123 pass:123 のようなIDとパスワードで登録している人がいて、 他者が何気なくそれを入力して偶然ログインしてしまった場合、これは不正アクセスにあたるのでしょうか? 宜しくお願い致します。

  • WEBサイトへのログイン画面の設置について。

    現在運営しているWEBサイトのページに、パスワードのみのログイン画面へのリンクを張り、 PHPは下記(http://△△△.com/test/login.php)に設置し、パスワード認証が成功した場合は 会員専用ページ(http://△△△.com/test/○○○.html)に飛び、 失敗の場合はエラーページ(http://△△△.com/test/×××.html)に飛ばすようにしたいと思っております。 以前ソースを教えていただいて、下記のように設置してみたのですが、 任意のページに飛ぶことができません。 ローカルでのテストでは問題なく動作したのですが、サーバにアップしてテストしてみると、 パスが「http://△△△.com/test/login.php」から「http://△△△.com/test/http://△△△.com/test/login.php」に変わり、 ページが「WEBページが見つかりません」のエラーが出ます。 私はまったく知識がありませんので、どこがおかしいのか見当がつきません。 知識をお持ちの方、どなたかご教示いただけませんでしょうか。 よろしくお願い申し上げます。 <?php $post_pass = $_POST['passwd']; $user_pass = "0000"; $ok = "./http://△△△.com/test/○○○.html"; $error = "./http://△△△.com/test/×××.html"; $script = "./http://△△△.com/test/login.php"; $doc_title = "ログイン画面"; if ( $_POST['pass_check'] === "true" && $post_pass != "" ) { if($user_pass == $post_pass){ header("Location: $ok"); }else{ header("Location: $error"); } } ?> <html> <head> <title><?php echo $doc_title; ?></title> <meta http-equiv="Content-Type" content="text/html;Charset=Shift_JIS"> <script type="text/javascript"> <!-- function check() { if(document.formxx.passwd.value.length == 0) { alert("パスワードが入力されてません"); return false; } return true; } //--> </script> </head> <body> <h3><?php echo $doc_title; ?></h3> <form action="<?php echo $script; ?>" method="post" name="formxx"> <input type="password" name="passwd" size="15"> <input type="hidden" name="pass_check" value="true"> <input type="submit" value=" ログイン " onClick="check()"> </form> </body> </html>

    • ベストアンサー
    • PHP