0

以下のコードが正しいかどうか疑問に思っていました。これで多くのエラーが発生しましたが、問題が実際にここに存在するかどうかはわかりません。コードは以下のとおりです。

ユーザーは「グループの終了」をクリックします。

<p class="logout"><a id="exit" name="logout" href="#">Exit Group</a></p>

[グループの終了]をクリックしたときに実行する必要のあるコードは次のとおりです。

if(isset($_GET['logout'])){ 

    //CODE TO BE EXECUTED        
                            } 

ただし、ユーザーが[グループの終了]をクリックしたときに実行しようとしているコードは実行されていません。多くの人がチェックしているので、中括弧内のコードに問題はありません。しかし、私の問題が上記のコードにあるのではないかと思っていましたか?ありがとうございました。

4

6 に答える 6

5

リンクをクリックしても、URLにはフラグメント識別子#しか含まれていないため、何も起こりません。リクエストすら発行されません。GET

通常、この種のリンクを使用して、ページ内の要素にジャンプします(たとえば<a href="#top">Top</a>、IDを持つ要素にジャンプしますtop)。これはブラウザで完全に処理されます。

そして、そこにフラグメント識別子を置くだけでは、何も起こりません。これは、リンクがJavaScriptを実行する必要があり、実際には他の何かにリンクしてはならない場合によく使用されます。


$_POSTサーバー側でアレイをテスト しています。POSTただし、フォームからリクエストを開始した場合、この配列には要素のみが含まれます。つまり、送信ボタンを使用してフォームを作成する必要があります。例:

<form action="" method="POST">
    <input type="submit" name="logout" value="Exit Group" />
</form>

ここで、配列nameのキーとなる属性が機能します。$_POSTただし、これを通常のリンクに割り当てても効果はありません。


リンクを使用することもできますが、GETリクエストを使用すると次のようになります。

<a id="exit" href="?logout=1">Exit Group</a>
<!--                 ^-- parameter must be part of the URL, name has no effect    -->

if(isset($_GET['logout'])){    
    //CODE TO BE EXECUTED        
} 

ここでパラメータを渡す必要があることに注意してくださいlogout


混乱しGETPOSTリクエストがあったようです。フォームがある場合、フォーム要素namesはパラメータとしてサーバーに送信されます。つまり、次の形式が与えられます。

<form method="POST">
    <input type="text" name="foo" value="" />
    <input type="text" name="bar" value="" />
    <input type="submit" name="send" value="Send" />
</form>

ユーザーが送信ボタンをクリックする$_POSTと、サーバー側のアレイに次のキーが表示されます。

$_POST['foo']
$_POST['bar']
$_POST['send']

ただし、これはリンクでは機能しません。リンクをクリックすると通常のGETリクエストが作成されます。ここでは、パラメータはURLの一部であり、疑問符の後に追加?され、アンパサンドで区切られている必要があり&ます。

<a href="somePage.php?foo=1&bar=1&andMore=0"> Link </a>

結果として

$_GET['foo']
$_GET['bar']
$_GET['andMore']

おそらくHTTPプロトコルについて読む必要があります。

于 2010-07-17T20:57:58.293 に答える
3

通常のハイパーリンクを使用しているため、フォームは投稿されません。そのためには、フォームに何らかの送信ボタンが必要method="post"です。通常のリンクはGETリクエストをもたらすだけで、そのように投稿されることはありません。

編集:簡単な例を追加:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
    <head>
        <title>Form test</title>
    </head>
    <body>
<?if ($_SERVER['REQUEST_METHOD'] == 'POST'):?>
        <pre><? print_r($_POST)?></pre>
<?endif;?>
        <? // $_SERVER['REQUEST_URI'] holds the current URL, so we know that ?>
        <? // we'll end up back in this file when the form is submitted.     ?>
        <form method="post" action="<?= $_SERVER['REQUEST_URI']; ?>">
            <input type="text" name="textbox" 
                value="<?= isset($_POST['textbox'])?$_POST['textbox']:'Type something' ?>" />
            <input type="submit" name="submitbutton" value="Submit" />
        </form>
    </body>
</html>
于 2010-07-17T20:55:24.180 に答える
3

aフォームコントロールではありません。inputまたはselect、フォーム内にある必要があります。

手動リンクの場合は、href="/page?logout"

于 2010-07-17T20:55:37.543 に答える
1

$_POSTが付いたフォームを使用した場合にのみ入力されますmethod=post

于 2010-07-17T20:56:00.120 に答える
0

はい。POSTとGETは2つの異なるものです;)

if(isset($_GET['logout']))
于 2010-07-17T20:56:24.317 に答える
0

これ<a id="exit" name="logout" href="#">はである必要があります<a id="exit" href="?logoff=true#">

次にlogoff$_GET配列になります。

于 2010-07-17T21:09:24.163 に答える