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

回到顶部