40107


前回『イメージボタン押下をPHP側で検知して、セッションをクリアしたい』という問い合わせを  
させて頂きましたが、未だ無事に達成できておらず、問い合わせ主旨も大分異なるので別案件として  
問い合わせさせて頂きました。

PHPで以下記述をしていますが、当該ボタンが押下された検知をうまく行えていないらしく  
サーバ送信が行われるだけ・自画面が再度呼び出されるだけの状態になってしまいます。  
【PHP】

[code]

    if (isset($_POST["logoffbtn"])){
            session_destroy();
            header("location: logon.php");
            exit;
    }
    
[/code]

【HTML】

[code]

    <form method="post" action="">
        <h1>
            <div style="width: 50%; float: right; text-align:right; color:#FF0000; font-size:large" >
                <span id="auto"></span>
                <a href="menu.php"><img src="img/btn_tomenu_ontop.png" alt=""></a>
                <input type="image" name="logoffbtn" src="img/btn_logoff_ontop.png" />
            </div>
        </h1>
    </form>
    
[/code]

====質問====  
INPUT要素type=imageのボタン押下をphpで検知する方法を教えてください。  
ひょっとして、押下された・されていないの判断を行う為の別input要素を用意し、  
JavaScriptのボタン押下発火で、用意するinput要素に押下された証を格納（PHP側でこちらを参照）  
する、という手立てが一般的なのでしょうか？？

（これを機にINPUT要素type=submitの押下検知もおさらいしておきたいですが、issetで大丈夫ですよね？？）

＝＝＝＝追記＝＝＝＝  
皆様 ご支援をありがとうございます。  
当方の未熟さから、ご教示頂いた内容を誤った解釈をしているらしく、input
type="image"のボタンを押下しても、無反応な状況となってしまっています。（先ほどは押下すると自画面が再表示されてしまう状況だったので、PHP側でどう押下の察知をすればよろしいか問い合わせました。JavaScriptを用いクリックイベントでINPUT要素（別・同一でも可？）に値格納し、その有無をPHP側で判断する方針は強ち間違いでないと解釈）

一先ずセッションクリア以前に、当該ボタンが押下されたらログイン画面への遷移を達成したいのですが、なにしろボタン押下が無反応になってしまっているので、今自分が取り組んでいる方針はあっているのか？（クリックイベントで当該input要素のvalに値を格納する手立て・issetで当該input要素を確認する方式は妥当か）を確認させて頂けないでしょうか？  
Myaku様申し訳ないです、Ajaxではない方針で対応しようとしています。

【実行ページのブラウザ開発ツールで、HTMLを抜粋：クリックイベントで目的のinput要素valに値を確認】

[code]

    <form method="post" action="sortex.php">
        <h1>
            <div>
                <span id="auto"></span>
                <a href="menu.php"><img alt="" src="img/btn_tomenu_ontop.png"></a>
                <input name="logoffbtn" class="logoffbtn" type="image" src="img/btn_logoff_ontop.png" value="*">
            </div>
        </h1>
    </form>
    
[/code]

【PHP】

[code]

    if (isset($_POST["logoffbtn"])){
    //  session_destroy();
        header("location: logon.php");
        exit;
    }
    
[/code]

【JavaScript（JQuery）】

[code]

    $(".logoffbtn").on("click",function() {
        $(this).val("*");
        return false;
    });
    
[/code]

====更に追記====  
前回当方が追記したコーディングに示していたように、【ボタン押下も無反応になってしまっている要因】を特定したい（セッションクリア以前に、）と考えています。  
前回追記のコーディングでsession_destroy();の部分をコメントアウトにしていたのは、この理由でして、まず無反応な要因を特定する必要があると感じたためでした。参考記事一応に確認させて頂きましたが、ボタン押下も無反応な状況とは直接関係のないのかな？？  
という認識をしてしまいまして、未だ熟読できていない、というのが正直なところです、申し訳ございません）

現況ですが、ご見解からイメージボタンのx座標y座標のissetで確認する条件も追加し、条件適合の場合は、ログオン画面へ遷移するだけのコーディングにしてありますが
相変わらず押下しても無反応な状況です。  
①ボタン押下後の動作無反応な状況とセションクリアは関係ないのですよね？  
②問題のWebページは、前画面のタグリンク（href）で遷移されてきているページです。  
話題に取り上げているイメージボタンは、問題Webページのformタグ（method="post"）内で定義されたinput type="image"ですが
これに起因した問題ではないですよね？？  
③下記コーディングがPHP内で当該ボタンの押下察知（＆画面遷移）するものですが、formタグの外で記載して問題ないですよね？？

[code]

    if (isset($_POST["logoffbtn"]) || isset($_POST["logoffbtn_x"]) || isset($_POST["logoffbtn_y"])){
    //  session_destroy();
        header("location: logon.php");
        exit;
    }
    
[/code]

input type="image"の要素なんてものは皆様でもよく採用されていることと思いますので、なぜ私だけ．．．という気持ちになってきました。


CC BY-SA 3.0
2017-12-07T05:56:56.907
40106
2017-12-08T02:20:38.647
2017-12-08T02:20:38.647
25696
25696
question
php html
PHP上のイメージボタン（input type="image"）の押下の検知方法を教えてください


質問の追記を受けて大きく書き直しました。  
１．`input type='image'`ですが、ブラウザにより"value"が送信されたりされなかったりします。  
２．回避としてはクリック位置の`_x`もしくは`_y`を使用する。そもそも、`input type='image'`ではなく別に`input
type="hidden"`などで値を送信する。のどちらかです。  
３．以前の回答で「[参考例](http://php.net/manual/ja/function.session-
destroy.php)」を記述しましたがご覧になられましたか？例の通りに削除するように確り書き直しました。（少し大げさなところは有りますが…）

[code]

    <?php
    session_start();
    if (isset($_POST["logoffbtn"]) || isset($_POST["logoffbtn_x"]) || isset($_POST["logoffbtn_y"])){
        // セッション変数を全て解除する
        $_SESSION = array();
    
        // セッションクッキーも削除する。
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();
            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
    
        // 最終的に、セッションを破壊する
        session_destroy();
        header("location: logon.php");
        exit;
    }
    $_SESSION['loginState'] = 'dammy';
    ?><html>
    <head>
    </head>
    <body>
    <!-- 遷移先PHPファイル(同じなら当ページのファイル)を指定する -->
    <form method="post" action="./test.php">
        <h1>
            <div style="width: 50%; float: right; text-align:right; color:#FF0000; font-size:large" >
                <span id="auto"></span>
                <a href="menu.php"><img src="img/btn_tomenu_ontop.png" alt=""></a>
                <input type="image" name="logoffbtn" src="img/TopPage2.gif" />
            </div>
        </h1>
    </form>
    </body>
    
[/code]


CC BY-SA 3.0
2017-12-07T06:44:58.187
40107
2017-12-08T00:29:13.833
2017-12-08T00:29:13.833
40106
answer