带有方法post的基本php表单已停止工作


Basic php form with method post stopped to work

在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>`

结果.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

您的代码似乎依赖于启用的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;

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