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此处传递参数。


看来您混淆了GET请求POST。如果你有一个表单表单元素name的s将作为参数传输到服务器。这意味着给定这种形式:

<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不是表单控件。它必须是一个inputselect如果它在一个表格内。

对于手动链接,请执行href="/page?logout"

于 2010-07-17T20:55:37.543 回答
1

$_POST仅当您使用带有 的表单时才会填写method=post

于 2010-07-17T20:56:00.120 回答
0

是的。POST 和 GET 是两个不同的东西;)

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 回答