我一直想知道像http://example.com/filename.php?dosomething和http://somesite.net?logoff这样的链接。
由于我对PHP知之甚少,而英语不是我的母语,我一直无法找到这样的好信息。
我知道http://mysite.com/edit.php?editpassword和http://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"; ?>
类似的东西?
答案 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内部访问。
我们在您的示例中说,您分别传递了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
,并根据需要处理所有内容。
答案 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中的&
(正确)写为&
,因为它是保留字符。
所以,一个完整的例子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&foo='.($_GET['foo'] + 1);
} else {
$url = 'index.php?foo=1&bar=hello';
}
echo '<a href="'.$url.'">click me!</a><br>';
?>
</body></html>