• ベストアンサー

if文の判定に変数をつかって

とりあえず、 $action['click'] = $_GET['login']; if($action['click']) { ログインの認証処理    および ログイン後の処理 } else { <form aciton="このファイル" method=get> ログイン画面 <input type=submit name=login value="ログイン"> } と書いた場合、初回アクセス時には$action['click']には何もないのでfalseでログイン画面が表示され、 ログインボタンを押下したら$action['click']には"ログイン"が入っているので(実際にこの場合、何が入っててもよいんですが・・・)trueなのでログイン認証に入るという動きを期待しているのですが、perlではこのような動きをします。ですがphpの場合、このような動きをしたりしなかったりします。 気づいた限りでは連想配列で書くと動いてるような気がします。 $click = $_GET['login']だと動きません。(絶対とはいえませんが) emptyという関数があるが個人的には上記の方法で行いたいのですが、phpの仕様上この書き方は認められてないのでしょうか? だからempty()があるのでしょうか? (issetは=''でtrueを返すので今回は却下)

  • PHP
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
  • nyalio
  • ベストアンサー率58% (20/34)
回答No.1

ちょっと(回答が)的外れかもしれませんが、 if($action['click']) これで動きますよ。 ただ、この場合だと、PHP側ではいろいろな意味に取る可能性があります。それで(isset)や(empty)などがあるのです。 $action['click']が存在すればOKなのか、中身が空であればOKなのかということなんですが、 $action['click']!=''ならば1回目はfalseに飛ぶと思うのですがどうでしょう。 そして、連想配列など、配列を使うのであれば、配列の初期化をするのが望ましいです。(しなくてもよいけど環境によってはnoticeを出します) 初期化によって、PHP側のとる動きもまたかわりますので。

その他の回答 (2)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

訂正 未定義は$_GET['login']ですね。 わたしも的外れな事を書いた気がします・・・が参考になれば。

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

> 連想配列で書くと動いてるような気がします。 これは関係ないと思うのでどこか書き間違いしているのでは。 現在のerror_reportingのレベルでは表示されていないのでしょうが、 いきなり$action['click']を評価するので警告が出ています。 最初に初期化しておくか、isset、もしくはarray_key_existsを用いるべきです。 emptyはissetも兼ねているので(未定義ならfalse)わりと便利な関数です。 ただ、"0"でもfalseを返すのでそこは注意が必要です。

関連するQ&A

  • if文について

    $a = $_GET['b']; if ($_COOKIE['hogeFlag'] != hoge) && (!isset($a)) {  処理1 } あるページから画面遷移したときに遷移前に食わせたcookieの値とgetで送られてくる値を元にある処理を行いたいのですが、どうもうまく処理1に入ってくれません。 個々にすればちゃんと処理されるのですが、それだと非効率だと思うので、一行で書きたいのですがどうもうまくいきません。 前提 遷移前ページでcookieに値を食わせてかつ別の値をgetで送ってくるようになっているが、cookieの値が食わせた値と違う場合かつgetで送ってこなかった場合に処理1を実行したい。

    • 締切済み
    • PHP
  • 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'; } } ?>

    • ベストアンサー
    • PHP
  • 再帰処理で変数が戻ってきません

    下記プログラムで$viewdataの値が再帰処理時にうまく渡されません。 $actionのregistは渡されるのですが、なぜでしょうか? <html> <head></head> <?php $data_file="new_bbs.log";//ログファイル if(!isset($PHP_SELF)){$PHP_SELF=$_SERVER["SCRIPT_NAME"];} if(!isset($action)){$action=$_POST['action'];} if(!isset($viewdata)){$viewdata=$_POST['viewdata'];} ?> <body> ■TEST<br> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="multipart/form-data" style="margin: 0px;"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="regist"> <INPUT TYPE='SUBMIT' VALUE='---UP---'> <?php if($action != "regist"){ $viewdata= file_get_contents( $data_file );//ログファイルのデータ読込 echo "<br>データ:".$viewdata; }else{ echo "再帰データ:".$viewdata; } ?> </FORM> </body> </html>

    • ベストアンサー
    • 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
  • phpでif文に指定されている条件の意味について

    あるプログラムの中に以下のような処理があったんですが意味がわかりません。 if(true || isset($val)){ 処理 } 上記の場合いずれかが真ならif文の処理を行うということになると思うのですが $valの状態がどうであろうが一つ目の条件に「true」が入ってる時点で必ずブロック内の処理を行うと考えていいのでしょうか?

    • ベストアンサー
    • PHP
  • 「PEAR::Auth認証」の結果による判別について

    現在、PEAR::Authを利用して認証処理を作成しております。 質問させていただきたい内容は、 AuthクラスのgetAuthメソッドについてです。 まず、Authクラスのインスタンスを生成し、 start()メソッドを実行して認証を行い、 その認証の結果をgetAuthメソッドによって 取得しております。 次に、getAuthメソッドにより得た結果を IF文で判別して、結果がTRUEの場合は処理を続行し、 結果がFALSEの場合はログイン画面に戻るように 制御しようとしたところ、 FALSEの場合の制御が思うように動作しませんでした。 以下に、ソースを記述いたします。 login_check.php ************************************************* <?php require_once("Auth/Auth.php"); $params = array( "dsn" => "pgsql://postgres:postgres@win/db", "table" => "test_table", "usernamecol" => "test_user", "passwordcol" => "test_passwd", "cryptType" => "none", ); // インスタンス生成 $auth = new Auth("DB", $params , "LoginFuntion"); // 認証開始 $auth->start(); // 結果を判別 if (!$auth->getAuth()) { // 結果がFALSEだったらログイン画面に戻る header("Location: ./login.php"); exit; } else { // 結果がTRUEであれば処理を続行 ・ ・ ・ } ?> $auth->getAuth()の使い方が違うのかも知れませんが、 Authのソースを見ても分かりませんでした。 どなたか、「PEAR::Auth認証」の結果による判別に ついてお教え下さい。。。 ※今回は、ログイン画面とチェックPHPを分けております。 ログイン画面はHTMLで、チェックPHPにAuthを利用しております。 この利用の仕方が既に間違っているのでしょうか? 併せてお教えいただければと思います。

    • 締切済み
    • PHP
  • if文の$_COOKIEの処理について

    if文の「$_COOKIE」の処理について質問させてください。 3つのif文の処理は同じだと思いそれぞれ使いって みると多少違いがあるようなのですが、その違い がよく分かりません。PHP4の場合はとはちょっと 様子が違うみたいです。 (1) if($_COOKIE['XXXXXXX']) (2) if(isset($_COOKIE['XXXXXXX'])) (3) if($_COOKIE['XXXXXXX']!="") 環境:PHP5 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ブラウザ終了時にセッションを削除する方法

    ログイン入力画面を作成し、以下の動作を確認しています。 (1)正常にログインしてブラウザを終了する。 (2)再びブラウザを起動してログイン後の画面を表示する。 (3)セッションがないため自動的にログイン入力画面へ移動する。 IEだとセッションが消えてログイン入力画面へ移動しますが、 Firefoxではセッションが消えず、ログイン入力画面へ移動しません。 Firefoxでもブラウザ終了後にセッションを消す方法はないでしょうか? 下記のプログラムで確認しました。 -------------------------------------------------------------------- login.php <?php session_start(); $error_message = ""; if(isset($_POST["login"])){ if($_POST["member_name"] == "php" && $_POST["pass"] == "pass"){ $_SESSION["login_name"] = $_POST["member_name"]; $login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/anq_result.php"; header("Location: {$login_url}"); exit; } $error_message = "メンバー名かパスワードが間違ってます。"; } ?> <html> <body> <?php if($error_message){ print '<font color="red">'. $error_message. '</font>'; } ?> <form name="form1" method="post" action="login.php"> <p>メンバー名 <input type="text" name="member_name" value=""> <br> パスワード <input type="password" name="pass" value=""> <br> <input type="submit" name="login" value="ログイン"> </p> </form> </body> </html> ------------------------------------------------------------------------------------------------------------------------- anq_result.php <?php session_start(); if (!isset($_COOKIE["member_name"])) { unset($_SESSION["login_name"]); } if (!isset($_SESSION{"login_name"})) { $no_login_url = "http://{$_SERVER["HTTP_HOST"]}/admin/login.php"; header("Location: {$no_login_url}"); exit; } else { print "ログイン成功です。"; } ?>

    • ベストアンサー
    • PHP
  • 関数の動きと記述方法の意味を教えて下さい

    PHPの記述にて、 下記のような指定の場合の意味を教えて下さい。 $get = (isset($hoge)) ? urlencode($hoge) : 1; 自分なりの解釈では、 「$hogeが空の時にURLエンコードしてtrueなら$getに代入。」 と思っているのですが、思った動きをしてくれません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【php】ログイン後、元いたページにリダイレクト

    こんばんは。phpを勉強し始めたばかりの者です。宜しくお願いします。 会員制サイトを作っています。 そこで、 ページにログインなしで来ると、ログインページにリダイレクト、ログインすると、元いた場所にリダイレクトされるようにしたいです。 以下のような方法はセキュリティ的に問題ありますでしょうか? セッションに戻るページを覚えさせて、 if (!isset($_SESSION["name"])) { $_SESSION['return'] = $_SERVER["REQUEST_URI"]; header("Location: login.php"); exit; } ログイン処理を終えた後、 if(!empty($_SESSION['return'])){ $url = $_SESSION['return']; header("Location: $url"); exit; } else { header("Location: top.php");// 戻るページがない場合、トップページへ exit; } のようにして、戻ります。 が、期待した通りの動きはできたのですが、セキュリティ的に問題がないかどうか不安です。 もし、やめた方が良いのでしたら、どのような方法が考えられますでしょうか。 ご指導ください。宜しくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう