【问题标题】:isset code not being executed PHPisset 代码未执行 PHP
【发布时间】:2010-07-18 05:15:34
【问题描述】:

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

用户将点击“退出组”。

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

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

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

    //CODE TO BE EXECUTED        
                            } 

但是,当用户单击“退出组”时,我尝试执行的代码甚至没有被执行。 大括号内的代码没有问题,很多人都检查过。 但是我想知道我的问题是否出在上面的代码中?谢谢。

【问题讨论】:

    标签: php isset


    【解决方案1】:

    如果您单击该链接,则不会发生任何事情,因为该 URL 仅包含 片段标识符 #不会甚至会发出GET 请求。

    您通常使用这种链接跳转到页面内的元素(例如&lt;a href="#top"&gt;Top&lt;/a&gt; 跳转到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 请求。如果你有一个formform 元素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数组就会有key:

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

    但这不适用于链接。单击链接将创建一个普通的GET 请求,这里的参数必须是URL 的一部分,附加在问号? 之后,并以& 符号&amp; 分隔:

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

    会导致

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

    您可能应该阅读HTTP protocol

    【讨论】:

    • 对不起大家,但我应该提到它也不适用于 $_GET。我之前尝试过,因此认为 $_POST 会起作用,但它们都不起作用。
    • @newbie-25:阅读我回答的第一段。您使用的网址有误。
    • 您实际上是否传递了任何 URL 参数?您的示例没有任何内容,它是否忠实地代表了您正在做的事情?
    【解决方案2】:

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

    手动链接,href="/page?logout"

    【讨论】:

      【解决方案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>
      

      【讨论】:

        【解决方案4】:

        $_POST 只有在您使用带有method=post 的表单时才会被填写。

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            这个&lt;a id="exit" name="logout" href="#"&gt; 应该是&lt;a id="exit" href="?logoff=true#"&gt;

            那么logoff 将在$_GET 数组中。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-15
              • 1970-01-01
              • 1970-01-01
              • 2017-05-20
              • 2018-08-24
              • 1970-01-01
              相关资源
              最近更新 更多