我想知道关于“?”的一切表格的行动价值。正如您在下面的代码中看到的,我们有一个表单(放在
中)一个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中的字符,我需要你的帮助:)我所知道的
“?”是当我们需要指向我们所在的同一页面时使用此值。正确?
我也有其他问题,但是这些问题会在另一时间被问到;)非常感谢你提前。
答案 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。