来自PHP之外的变量——HTML表单(GET和POST)

本文介绍了HTML表单如何通过GET和POST方法向PHP脚本提交数据,并展示了如何在PHP中访问这些数据。同时,还探讨了HTTP Cookies的使用,包括设置、访问和处理多个值。PHP会自动处理变量名中的点,将其转换为下划线,同时提供了多种函数来确定变量的类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自PHP之外的变量——HTML表单(GET和POST)

HTML表单(GET和POST)

当一个表单提交给PHP脚本时,表单中的信息会自动在脚本中可用。有很多访问此信息的方法,例如:

Example #1 一个简单的 HTML 表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="foo.php" method="POST">
    Name: <input type="text" name="username"><br>
    Email: <input type="text" name="email"><br>
    <input type="submit" name="submit" value="Submit me!">
</form>
</body>
</html>

Example #2 从一个简单的 POST HTML 表单访问数据

<?php
    echo $_POST['username'];
    echo $_REQUEST['email'];
    ?>

使用 GET 表单也类似,只不过要用适当的 GET 预定义变量。GET 也适用于 QUERY_STRING(URL 中在“?”之后的信息)。因此,举例说,http://www.example.com/test.php?id=3 包含有可用 [$_GET’id’] 来访问的 GET 数据。

PHP也懂得表单变量上下文中的数组。例如可以将相关的变量编成组,或者用此特性从多选输入框中取得值。例如,将一个表单POST给自己并在提交时显示数据:

Example #3 更复杂的表单变量

<?php
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
    echo '<pre>';
    print_r($_POST);
    echo '<a href="'.$_SERVER['PHP_SELF'].'">Please try again</a>';
    echo '</pre>';
} else  {
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbr</option>
    </select><br>
    <input type="hidden" name="action" value="submitted">
    <input type="submit" name="submit" value="submit me!">
</form>
<?php
}
?>

HTTP Cookies

PHP透明地支持HTTP cookies。Cookies 是一种在远端浏览器端存储数据并能追踪或识别再次访问的用户的机制。可以用 setcookie() 函数设定 cookies。Cookies 是 HTTP 信息头中的一部分,因此 SetCookie 函数必须在向浏览器发送任何输出之前调用。对于 header() 函数也有同样的限制。Cookie 数据会在相应的 cookie 数据数组中可用,例如 [ C O O K I E ] ( h t t p s : / / p h p . g o l a r a v e l . c o m / r e s e r v e d . v a r i a b l e s . c o o k i e s . h t m l ) , _COOKIE](https://php.golaravel.com/reserved.variables.cookies.html), COOKIE](https://php.golaravel.com/reserved.variables.cookies.html)HTTP_COOKIE_VARS 和 $_REQUEST。更多细节和例子见 setcookie() 手册页面。

如果要将多个值赋给一个cookie变量,必须将其赋值成数组,例如:

<?php
 	setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
	setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
 ?>

这将会建立两个单独的cookie,尽管MyCookie在脚本中是一个单一的数组。如果想在仅仅一个 cookie 中设定多个值,考虑先在值上使用 serialize()explode()

在Chorm浏览器Network->Doc中,可以看到Request Header里有两个Set-Cookie字段:

Set-Cookie: MyCookie[foo]=Testing+1; expires=Mon, 23-Nov-2020 16:32:27 GMT; Max-Age=3600 Set-Cookie: MyCookie[bar]=Testing+2; expires=Mon, 23-Nov-2020 16:32:27 GMT; Max-Age=3600

注意在浏览器中一个cookie会替换掉上一个同名的cookie,除非路径或域不同。因此对于购物车程序可以保留一个计数器一起传递,例如:

Example #4 一个 setcookie() 的示例

isset

<?php
//    一个setcookie()的示例
if (isset($_COOKIE['count'])) {
    $count = $_COOKIE['count'] + 1;
} else {
    $count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
    ?>

变量名中的点

通常,PHP 不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。至于原因,看看:

<?php$varname.ext; /* 非法变量名 */?>

这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)‘ext’。很明显这不是想要的结果。

出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线。

确定变量类型

因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如:gettype()is_array()is_float()is_int()is_object()is_string()。参见类型一章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值