5

我一直想知道像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

4 回答 4

6

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

使用 HTML 表单时,method="GET"您会获得键值对,然后可以通过$_GET['key']. 实际上,您在使用 POST 时也会收到这些对,但它们在 URL 中不可见,您可以通过$_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) {
于 2013-01-20T11:46:34.383 回答
1

在使用 URL 之后传递的任何内容?本质上都是一个“查询字符串”。传入的变量可以通过$_GET[]超全局在 PHP 内部访问。

假设在您的示例中,您editname单独editpass传入。然后,您可以使用以下代码处理此问题:

<?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,并根据需要处理所有内容。

于 2013-01-20T11:48:36.053 回答
0

问号后面的所有值都是 http-get-parameters。您可以检查它们是否使用if(isset($_GET['login'])) {}. 您还可以使用 parameter=value 分配给这些参数值。

于 2013-01-20T11:48:39.593 回答
-1

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

URLhttp://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

请记住,&in (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>
于 2013-01-20T11:50:46.097 回答