旧的PHP代码不能工作的原因


Old PHP code reason for not working?

感谢所有在这里回答我最近相关问题的人,所有的答案都很有帮助,它给了我进步,也给了我一点教育。我不知道原作者写这些代码是多久以前的事了,所以其中可能有一些古老的方法。

在后面的代码中,表单捕获一些用户输入并分配一个变量名(如下面的$dateofbirth),然后在给所有者的电子邮件中使用,是否也适用类似的原则?换句话说,目前出生日期和其他字段不包括在电子邮件
<p>Date of Birth <i>(dd/mm/yyyy)</i><br /><input name="dateofbirth" value="<? echo $dateofbirth;?>" type="text" style="width: 350px;" /></p>

<p><br /><input type="hidden" name="service" value="<?
echo $service;
?>" />
<input type="hidden" name="p" value="<?
echo $p;
?>" />
<input type="submit" value="Order now" /></p>
</form>

发送邮件代码在这里

$emailtext = "From: " . $clientname . "'r'n";
$emailtext .= "Service ordered: " . $service . "'r'n";
$emailtext .= "Price to pay: £" . $p . "'r'n";
$emailtext .= "Date of birth: " . $dateofbirth . "'r'n";
$emailtext .= "Questions:'r'n'r'n" . $questions . "'r'n'r'n";
$emailtext .= "Comments:'r'n'r'n" . $comments . "'r'n'r'n";
$emailtext .= $email;

总之,上面的代码是旧的,过时的,不支持的,需要现代化使其工作吗?

谢谢。

是的,如果PHP配置选项register_globals被打开,上面的代码只能按原样工作。启用这个PHP选项是非常不安全的,根本不建议使用。您只需要将电子邮件模板中的所有变量替换为实际的$_POST数组值:

$emailtext = "From: " . $_POST['clientname'] . "'r'n";
$emailtext .= "Service ordered: " . $_POST['service'] . "'r'n";
$emailtext .= "Price to pay: £" . $_POST['p'] . "'r'n";
$emailtext .= "Date of birth: " . $_POST['dateofbirth'] . "'r'n";
$emailtext .= "Questions:'r'n'r'n" . $_POST['questions'] . "'r'n'r'n";
$emailtext .= "Comments:'r'n'r'n" . $_POST['comments'] . "'r'n'r'n";
$emailtext .= $_POST['email'];

我假设所有这些变量都是在修改后的代码中通过表单发送的。这些行以上的处理函数中设置的任何变量,都不需要像上面那样进行转换。