我想知道关于“?”的一切action属性的值

时间:2013-01-24 14:41:09

标签: html forms url action

我想知道关于“?”的一切表格的行动价值。正如您在下面的代码中看到的,我们有一个表单(放在

中)

一个php模板),用于将用户输入发送到数据库中,其值为“?”对于action属性:

<form action="?" method="post">
<div>
<label for="joketext">Type your joke here:</label>
<textarea id="joketext" name="joketext" rows="3" cols="40">
</textarea>
</div>
<div><input type="submit" value="Add"></div>
</form>

我们还有另一个模板,显示存储在我们数据库中的数据,正如您在下面的代码中所看到的,此模板已

带有链接的部分,以便通过点击该链接,用户可以在我们的数据库中添加数据(笑话):

<body>
<p><a href="?addjoke">Add your own joke</a></p>
<p>Here are all the jokes in the database:</p>
<?php foreach ($jokes as $joke): ?>
<blockquote>
<p><?php echo htmlspecialchars($joke, ENT_QUOTES, 'UTF-8');
?>
</p>
</blockquote>
<?php endforeach; ?>
</body>

我的第一个问题是为什么我们将href属性的值设置为“?addjoke”?我的意思是“?”的工作是什么?在“?addjoke”中?

好吧,另一个问题是:我们的index.php文件中有一个if语句,如下所示:

if (isset($_GET['addjoke']))
{
include 'form.html.php';
exit();
}

我无法在$ _GET数组中得到“addjoke”变量的概念。我的意思是我确切知道$ _GET数组的作用,但我不能

理解使用“addjoke”变量的整个想法。我的意思是“addjoke”在这里做什么?

很明显,我对理解“?”有很多问题。 URL中的字符,我需要你的帮助:)我所知道的

“?”是当我们需要指向我们所在的同一页面时使用此值。正确?

我也有其他问题,但是这些问题会在另一时间被问到;)非常感谢你提前。

3 个答案:

答案 0 :(得分:3)

如果你有这样的网址:

http://www.domain.com/index?myParam1=value1&myParam2=value2

这是对www.domain.com服务器的GET请求,它通过了两个参数。

myParam1 = value1
myParam2 = value2

之后的一切?是查询字符串,被视为要传递给服务器的查询参数。

因此在PHP中,可以使用$_GET['myParam1']

检索这些参数的值

?本身表示查询字符串的开头(包含这些参数,并且&amp;分隔每个参数。


表单操作是表单将发布到的URL。如果你指定?你实际说的是当前的网址+“?”。这意味着它会将表单提交给当前的网址?最后(实际上这不是真的需要)

另请注意,查询字符串参数仅在GET请求中传递。当您提交带有method=POST的表单时,表单字段和值将在请求正文中提交。


所以在你的代码中,

if (isset($_GET['addjoke']))
{
    include 'form.html.php';
    exit();
}

只有在传递名为addjoke的查询字符串参数(例如?addJoke = joke)时才会执行这两行。这意味着仅当addjoke参数位于URL中时才包含该表单。

答案 1 :(得分:1)

只是添加@cowls所说的内容,特别是? vs ?addjoke的内容。单击页面上的链接(比如example.com/index.php),您最终会看到example.com/index.php?addjoke。

现在,在PHP中,addjoke是查询字符串的一部分,这意味着它在$_GET中被“设置”。这就是if (isset($_GET['addjoke']))存在的原因;只有转到?addjoke链接时才会包含addjoke表单。

现在,由于表单操作是"?",一旦用户提交了一个笑话,他们就会回到正常页面example.com/index.php?,并且特定的addjoke代码就会消失。

希望回答一些问题。

答案 2 :(得分:1)

URL中的?-sign用于将参数与HTTP GET-Request中的资源分开。请看以下示例:

http://www.example.com/resource/index.php?testvalue=123

在此示例中,调用目录资源中的脚本index.php,并将设置名为testvalue的请求参数值为123.只有第一个参数使用问号(?),其他参数将添加一个&符号(&amp; ;)

在您的示例中,您设置了一个没有任何值的GET参数。你也不应该混合POST和GET参数,我建议根据你的行动坚持其中一个(GET用于数据检索,例如搜索,POST用户输入)。

如果您需要任何进一步的信息,我建议您在维基百科和HTTP verbs参数中查找PHPs handling of GET and POST