在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
答案 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将任意变量注入到代码中,这是一件非常危险的事情;这就是删除此功能的原因。