当表单被提交到一个PHP脚本,来自表单的信息就会自动的变成脚本中的变量。 有很多方法可以访问这些信息,例如:
例1 一个简单的HTML表单
<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>
取决于你的具体安装和个人偏好设置,有许多方法可以访问HTML表单里面的数据。一些例子为:
例2 从简单的HTML POST表单访问数据
<?php
// Available since PHP 4.1.0
echo $_POST['username'];
echo $_REQUEST['username'];
import_request_variables('p', 'p_');
echo $p_username;
// Unavailable since PHP 6. As of PHP 5.0.0, these long predefined
// variables can be disabled with the register_long_arrays directive.
echo $HTTP_POST_VARS['username'];
// Available if the PHP directive register_globals = on. As of
// PHP 4.2.0 the default value of register_globals = off.
// Using/relying on this method is not preferred.
echo $username;
?>
使用GET表单跟这个很类似只是要用对应的GET预定义变量。 GET也用于QUERY_STRING(地址中'?'后面的信息)。 所以,例如http://www.example.com/test.php?id=3包含的GET数据,可以用$_GET['id']访问。 参见$_REQUEST以及import_request_variables()函数。
注意: Superglobal arrays,如$_POST和$_GET,由PHP 4.1.0引入。
如上,在PHP 4.2.0之前register_globals开关的默认值是打开。 PHP社区鼓励不要依赖于这个开关,假定它为关闭,并据此编程。
注意: magic_quotes_gpc配置开关对Get,Post和Cookie值都有影响。 如果打开,值(It's "PHP!")会自动转换为(It\'s \"PHP!\")。 在往数据库插入数据时需要这种转义。 参见函数addslashes(),函数stripslashes()和开关magic_quotes_sybase。
PHP还可以理解在表单变量中的数组(参见相关faq)。例如,你可以把相关的变量组织起来,使用这个特性获得多选输入的值。例如,我们让一个表单Post给自己,然后在提交后显示数据:
例3 更复杂的表单变量
<?php
if ($_POST) {
echo '<pre>';
echo htmlspecialchars(print_r($_POST, true));
echo '</pre>';
}
?>
<form action="" 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äu</option>
</select><br />
<input type="submit" value="submit me!" />
</form>
我们可以用一个图像代替标准提交按钮来提交表单,它的标记形如:
<input type="image" src="image.gif" name="sub" />
当用户点击图像时,表单就会传输到服务器去,并带有两个附加的值,sub_x和sub_y(译注:sub就是图像的name)。 它们包含了用户点击在图像时的位置。 有经验的开发者可能会发现浏览器发送到服务器的实际变量名包含一个点,而不是下划线(也就是原始的变量为sub.x和sub.y),但是PHP自动把这个点转换成下划线了。
通常,当变量传入脚本时,PHP不会修改它的名字。 然而,英文句号在PHP的变量名中不合法。所以,如下:
<?php
$varname.ext; /* invalid variable name */
?>
现在,解析器看到的变量名应该为$varname,紧跟这一个字符串连接符(译注:也就是英文句号),然后跟着一个裸字符串(没有双引号的字符串,也不匹配任何已知的关键字和保留字)'ext'。显然,这无法得到任何立即结果。
出于这种原因,请注意PHP会自动把引入的变量名中的英文句号替换为下划线。
因为PHP自动检测变量的类型,并把它们转换为需要的类型,在任何一个时刻一个变量的类型都是不明确的。 PHP包含了几个函数用来查询变量的类型,如: gettype(),is_array(),is_float(),is_int(),is_object(),和is_string()。参见类型。