基本的php表单,方法帖子停止工作

时间:2016-05-04 15:11:09

标签: php forms

在wordpress博客上我有几个页面,其中的表单显示了不再有效的结果(如测验)。我想了解他们为何停止工作并修复它们。也许是与php版本相关的东西(他们工作了很多年,但我认为他们在一些更新后停止了工作。 这是一个例子

表单页面:

<form action="result.php" method="post">
    Question 1
    <input name="key1" value="1" checked="checked" type="radio" />Yes
    <input name="key1" value="2" type="radio" />No
    <input name="key1" value="3" type="radio" />Don't know
    Question 2
    <input name="key2" value="1" checked="checked" type="radio" />Yes
    <input name="key2" value="2" type="radio" />No
    <input name="key2" value="3" type="radio" />Don't know
    <input name="SEND" type="submit" value="Show result" />
    </form>`

result.php页面

<?php 
    if ($key1==1) {$risposta1=2;}
    else if ($key1==2) {$risposta1=1;} 
    else {$risposta1=0;}
    if ($key2==1) {$risposta2=2;}
    else if ($key2==2) {$risposta2=1;} 
    else {$risposta2=0;}
    $result = $risposta1 + $risposta2;
    ?>
    <? print $result ?>

我有PHP版本5.3.29

1 个答案:

答案 0 :(得分:2)

您的代码似乎依赖register_globals启用,这是一个危险的功能,在PHP 5.3.0中已弃用,在5.4.0中已删除。此外,似乎使用了短PHP标记(<?),这也是不推荐的。

您必须像这样更改代码:

<?php 

$key1 = $_POST['key1'];
$key2 = $_POST['key2'];

if ($key1==1) {$risposta1=2;}
else if ($key1==2) {$risposta1=1;} 
else {$risposta1=0;}
if ($key2==1) {$risposta2=2;}
else if ($key2==2) {$risposta2=1;} 
else {$risposta2=0;}
$result = $risposta1 + $risposta2;

echo $result;

这里最重要的变化是$key1$key2$_POST超全局数组中读出,该数组包含使用HTTP POST发送的值。以前PHP为你自动设置这些变量,这些(虽然增加了一些方便)允许客户端通过HTTP将任意变量注入到代码中,这是一件非常危险的事情;这就是删除此功能的原因。