isset代码没有被执行PHP

时间:2010-07-17 20:53:05

标签: php isset

我想知道下面的代码是否正确,我一直有很多错误,但我不确定问题是否真的存在于此。代码如下:

用户将点击“退出组”。

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

单击“退出组”时应执行的代码如下:

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

    //CODE TO BE EXECUTED        
                            } 

但是,我试图在用户点击“退出组”时执行的代码甚至没有被执行。 大括号内的代码没有任何问题,因为很多人都检查了它。但我想知道我的问题是否可能出现在上面的代码中?谢谢。

6 个答案:

答案 0 :(得分: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个请求。如果您有表单,则表单元素name将作为参数传输到服务器。这意味着给出了这种形式:

<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请求,此处参数必须是网址的一部分,附加在问号?后面并用&符号&分隔:< / p>

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

将导致

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

您可能应该阅读HTTP protocol

答案 1 :(得分: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>

答案 2 :(得分:3)

a不是表单控件。如果它在表单中,则必须是inputselect

对于手动关联,请执行href="/page?logout"

答案 3 :(得分:1)

仅当您使用包含$_POST的表单时才会填写

method=post

答案 4 :(得分:0)

是。 POST和GET是两回事;)

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

答案 5 :(得分:0)

<a id="exit" name="logout" href="#">应为<a id="exit" href="?logoff=true#">

然后logoff将位于$_GET数组中。