PHP 问题:表单变量
问题
给定以下形式:
<form method="post" action="index.php"><input type="input" value="" name="text" />
<input type="submit" value="Submit" />
</form>
表单提交后如何获取输入框的值?
回答
为了获得这里的输入框,我们将使用 $_POST 超全局数组。这个数组填充了从表单提交的所有内容,包括提交按钮的值。isset()在请求之前使用该函数检查该值是否已设置是一个好主意,否则您的代码将产生警告和通知。
if (isset($_POST['text'])) {$text = $_POST['text'];
}
我们使用 $_POST 超全局变量是因为表单的方法是“post”。如果该方法被省略,或设置为“get”,那么我们将使用 $_GET 超全局数组代替。这与 $_POST 的工作方式相同。
理论上可以使用 $_REQUEST 超全局变量来获取这些数据,如下例所示。
if (isset($_REQUEST['text'])) {$text = $_REQUEST['text'];
}
$_REQUEST 超全局数组将采用 $_COOKIE、$_GET、$_POST 超全局变量中的变量值。问题是任何 $_COOKIE 值都会覆盖任何 $_GET 和 $_POST 变量,这意味着如果攻击者设法在用户机器上设置 cookie,他们可以覆盖他们提交的任何表单数据。如果这是密码信息,这尤其危险。从 PHP 5.3 开始, request_order 指令可用于更改 $_REQUEST 变量填充方式的顺序,但也可以完全忽略 $_COOKIE 值。但是,最好暂时避免使用 $_REQUEST 变量,因为它被认为有些不安全。
当然,仅仅接受来自 $_GET 和 $_POST 超全局数组的值是非常危险的。必须使用类似函数strip_tags()和某种形式的转义函数来避免诸如 SQL 注入攻击或跨站点脚本之类的安全问题。要转义字符串,您可以使用addslashes()或首选的数据库特定功能,例如mysql_real_escape_string(),但请注意,您需要一个活动的数据库连接才能使用这些功能。下面的示例是一个狡猾的字符串,用户可能会尝试输入该字符串,以便在将其打印到浏览器时显示弹出框。通过剥离标签并正确转义来防止攻击。
$input = '<script type="text/javascript"><!--//--><![CDATA[// ><!--
alert("boo!");
//--><!]]>
</script>';
$text = addslashes(strip_tags($input));
mysql_connect('hostname', 'username', 'password');
$text = mysql_real_escape_string(strip_tags($input));
echo $text;
$text 变量现在包含“alert('boo');” 并且如果打印出来不会被执行。同样,任何 SQL 注入攻击也会失败,因为注入代码将被覆盖并按原样插入数据库。这些知识相当简单,但却是 PHP 开发人员技能的重要组成部分。
以上是 PHP 问题:表单变量 的全部内容, 来源链接: utcz.com/z/317336.html