Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP弃用代码?_Php - Fatal编程技术网

PHP弃用代码?

PHP弃用代码?,php,Php,大家好 运行PHP版本5.2.11,我们得到了一个网站,我们被告知该网站运行的是早期版本(可能是4) 我们遇到了一个奇怪的问题,几个页面上有一堆更新MySql的表单,但这些页面不起作用。问题在于更新脚本中使用的变量之前没有在php中的任何地方定义。例如 UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'" 现在如果我们把它改成 $form_firstname = $_POST['form_firstname']; UPD

大家好

运行PHP版本5.2.11,我们得到了一个网站,我们被告知该网站运行的是早期版本(可能是4)

我们遇到了一个奇怪的问题,几个页面上有一堆更新MySql的表单,但这些页面不起作用。问题在于更新脚本中使用的变量之前没有在php中的任何地方定义。例如

UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"
现在如果我们把它改成

$form_firstname = $_POST['form_firstname'];
UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"
然后更新工作。我们可以对每个update语句中定义的每个变量都执行此操作,但我认为,鉴于此操作在以前一定有效,我们正在查看形成这些变量的某些不推荐的代码。我已经找过了

import_request_variables
但是娜达

任何人都能想到在新服务器中默认关闭的任何东西会导致此问题,或者必须在某个地方声明此变量吗


干杯

这是
全球注册
不要使用此选项;这是一个.

我想你需要在php.ini中设置resister\u global=on

我希望你不要把它用于严重的事情。该代码对各种入侵、注入和黑客都是开放的。我有两个答案给你。快速和肮脏:打开寄存器\全局。备选方案:找人从头开始重写你的应用程序,或者找一个更好的应用程序。

如其他地方所述,这是因为原始代码启用了register\u globals,这是非常糟糕的做法

作为一种快速黑客,您可以在每个页面的顶部添加一些代码(在全局范围内):

…其效果大致相同,但以脚本为基础。但这只是为了在正确地重新实现代码时保持站点运行。请注意,这不是代码的唯一问题,将未经检查的用户输入拼接到SQL语句中会导致灾难

您应该将代码改写为

$form_firstname = mysql_real_escape_string($_POST['form_firstname'], $db_handle);
$id = mysql_real_escape_string($_POST['id'], $db_handle);
$qry="UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'";

C.

我坚持这一评论。检查:啊,明白了,那么我们需要手动扔掉$u帖子吗?@Stu,不仅如此,你还需要1)逃离它们;或者2)使用准备好的语句。是的,最好总是显式地访问
$\u POST
$\u GET
。没什么大不了的,我们正在逃避请求。代码仅作示例。干杯。你说你的网站在哪个域名上?邪恶的咧嘴笑不,说真的:这要么是一个noob开发人员的结果,要么是一个懒惰的开发人员的结果,要么是一个被无知的管理人员压扁的开发人员的结果。可能是所有这些的组合。现在你(或你的客户)正在付出旧的草率的代价。干杯,symcbean,是的,我们注意到代码上的插入风险只是好奇的注册全球问题。看来他们需要重做很多东西。谢谢
$form_firstname = mysql_real_escape_string($_POST['form_firstname'], $db_handle);
$id = mysql_real_escape_string($_POST['id'], $db_handle);
$qry="UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'";