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