1

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

一个php模板),它发送用户输入以“?”的值放入数据库中 对于动作属性:

<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中的字符,我需要你的帮助:)我所知道的

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

我也有其他问题,但这些问题将在下次提出;)提前非常感谢。

4

3 回答 3

3

如果您有这样的网址:

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

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

myParam1 = value1
myParam2 = value2

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

所以在 PHP 中,可以使用这些参数的值来检索$_GET['myParam1']

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


表单操作是表单将发布到的 URL。如果您指定 ? 您实际上是在说当前 url +“?”。这意味着它将使用 ? 将表单提交到当前 url 最后(实际上这并不是真正需要的)

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


所以在你的代码中,

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

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

于 2013-01-24T14:44:49.157 回答
1

只是为了补充@cowls 所说的内容,特别是?vs发生了什么?addjoke。当点击页面上的链接时,(比如 example.com/index.php),您会在 example.com/index.php?addjoke 结束。

现在,在 PHP 中,addjoke 是查询字符串的一部分,这意味着它在$_GET. 这就是为什么if (isset($_GET['addjoke']))存在;仅当转到?addjoke链接时才包含附加笑话表单。

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

希望能回答一些问题。

于 2013-01-24T14:55:47.143 回答
1

URL 中的 ? 符号用于将参数与 HTTP GET 请求中的资源分开。举个例子:

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

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

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

如果您需要任何进一步的信息,我建议您在 wikipedia 中查找HTTP 动词以及处理 GET 和 POST参数的 PHP。

于 2013-01-24T14:56:45.640 回答