PHP - 地址工作后的问号怎么办?

时间:2013-01-20 11:44:50

标签: php url

我一直想知道像http://example.com/filename.php?dosomethinghttp://somesite.net?logoff这样的链接。

由于我对PHP知之甚少,而英语不是我的母语,我一直无法找到这样的好信息。

我知道http://mysite.com/edit.php?editpasswordhttp://mysite.com/edit.php?editname可以提供完全不同的内容,但我该如何实现呢?

假设我想将这些代码行实现为?editpassword

Password
<input type="password" name="password">
<input type="submit">

这些行到?editname

Type your name
<input type="text" name="name">
<input type="submit">

如何在可能包含

的文件中执行此操作
<?php 
require "includes/head.php"; 
require "includes/nav.php";
if(!isset($_SESSION['login'])){
    header("Location: index.php");
}
?>



            <div class="row-fluid">
        <div class="span3">
          <div class="well sidebar-nav">
            <ul class="nav nav-list">
            <li class="nav-header">New</li>
              <li><a href="#">sss</a></li>

            </ul>
          </div><!--/.well -->
        </div><!--/span-->
        <div class="span9">
          <div class="row-fluid">
            <div class="span9">
              <h2>Some header</h2>
              <p>Some text</p>
            </div><!--/span-->
          </div><!--/row-->
          <div class="row-fluid">
            ?editname & ?editpassword should appear here.
      </div><!--/row-->

            <?php require "includes/footer.php"; ?>

类似的东西?

4 个答案:

答案 0 :(得分:6)

如果只有?foo $_SERVER['QUERY_STRING']中可用的整个查询字符串为"foo"

使用带有method="GET"的HTML表单时,您会获得键值对,然后通过$_GET['key']提供。实际上,您在使用POST时也会收到这些对,但是在网址中看不到它们,您可以通过$_POST['key']访问它们。


因此,假设您希望它完全简单并且不使用某些高级路由框架,那么您的代码将如下所示:

switch($_SERVER['QUERY_STRING']) {
    case 'editname':
        // do stuff
        break;
    case 'editpassword':
        // do stuff
        break;
    default:
        // do stuff if none of the cases matched
}

但我真的建议你使用正确的GET变量而不仅仅是简单的查询字符串。只需用它修改剪切的第一行:

$action = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
switch($action) {

答案 1 :(得分:1)

使用?的网址后传递的任何内容实质上都是“查询字符串”。传入的变量可以通过$_GET[] superglobal在PHP内部访问。

我们在您的示例中说,您分别传递了editnameeditpass。然后,您可以使用以下代码处理此问题:

<?php
if(isset($_GET['editname']))
{
    // handle edit name code here (i.e. show form, etc.)
}
elseif(isset($_GET['editpass']))
{
    // handle edit pass code here
}
?>

如果失败,您还可以使用$_SERVER['QUERY_STRING']数组值,该值将返回?之后显示的任何内容。如果您要使用许多不同的可能查询字符串,最好使用switch()语句:

switch($_SERVER['QUERY_STRING'])
{
    case 'editname':
        break;

    case 'editpass':
        break;

    default:
        // i.e. no query string.
        break;
}

有时,您可能需要在查询字符串中传入多个变量,在这种情况下,变量由&分隔。您还可以使用通常的赋值运算符(=)为变量赋值。例如,请考虑以下URL:

view-user.php?id=1&action=view

然后,我们可以访问$_GET['id']内的$_GET['action']view-user.php,并根据需要处理所有内容。

答案 2 :(得分:0)

问号后面的所有值都是http-get-parameters。您可以使用if(isset($_GET['login'])) {}检查它们是否已设置。您还可以使用parameter = value。

分配这些参数值

答案 3 :(得分:-1)

?标记第一个网址参数。您可以使用&添加其他网址参数。

网址http://example.com/index.php?foo=1将导致

// index.php
echo $_GET['foo']; // outputs: 1

网址http://example.com/page.php?foo=2&bar=baz

// page.php
echo $_GET['foo']; // outputs: 2
echo $_GET['bar']; // outputs: baz

请记住,(X)HTML中的&(正确)写为&amp;,因为它是保留字符。

所以,一个完整的例子index.php:

<html><head><title>Example</title></head><body>
<?php
    if (isset($_GET['foo'])) {
        echo 'link was clicked '.$_GET['foo'].'x<br>';
        if (isset($_GET['bar'])) {
            echo 'foo is '.$_GET['bar'].'<br>';
        }
        $url = 'index.php?bar=world&amp;foo='.($_GET['foo'] + 1);
    } else {
        $url = 'index.php?foo=1&amp;bar=hello';
    }
    echo '<a href="'.$url.'">click me!</a><br>';
?>
</body></html>