PHP版本从4.4更新到5.3.6

PHP版本从4.4更新到5.3.6,php,migration,php4,Php,Migration,Php4,不知何故,当将站点移动到较新的服务器时,php代码崩溃了。我们确实先在一个临时场地进行了测试,但它还是坏了 列表的所有动态链接都不再有效。我有一个“下一步”按钮,除了更改url外,它什么也不做。单击“下一步”时,仍会显示第1页(共5页)。但是我知道有些事情是正确的,因为在这个页面的顶部,它获取记录的数量并从数据库中显示出来 我听说这段代码很旧,而且正在创建一个新站点,所以我需要做的就是修复错误。我不需要重做整个页面,因为那样会浪费时间。无论如何,他们将在未来几个月内取消它 我更像是一个.NET开

不知何故,当将站点移动到较新的服务器时,php代码崩溃了。我们确实先在一个临时场地进行了测试,但它还是坏了

列表的所有动态链接都不再有效。我有一个“下一步”按钮,除了更改url外,它什么也不做。单击“下一步”时,仍会显示第1页(共5页)。但是我知道有些事情是正确的,因为在这个页面的顶部,它获取记录的数量并从数据库中显示出来

我听说这段代码很旧,而且正在创建一个新站点,所以我需要做的就是修复错误。我不需要重做整个页面,因为那样会浪费时间。无论如何,他们将在未来几个月内取消它


我更像是一个.NET开发人员,所以我甚至不确定如何检查PHP站点的错误。下面是被破坏的代码和定义这些变量的函数

<?php
echo "<br>\n";
echo "<strong>";
if($page_num > 1) {
    $prev_page = $cur_page - 1;
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    echo "<A HREF=\"$PHP_SELF?action=list_records&sort_order=$org_sort_order&order_by=$order_by&cur_page=$prev_page$search_link\">&lt;&lt; Previous</A>\n";
 }
if($page_num <  $total_num_page) {
    $next_page = $cur_page + 1;
    $last_page = $total_num_page - 1;
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    echo "<A HREF=\"$PHP_SELF?action=list_records&sort_order=$org_sort_order&order_by=$order_by&cur_page=$next_page$search_link\">Next &gt;&gt;</A>";
 }
 echo "</strong>";
?>



function list_records() {global $tbl_units, $tbl_members;
global $unit_array, $location_array;
global $default_sort_order, $default_order_by, $records_per_page;
global $sort_order, $order_by, $cur_page, $search_db, $search_txt, $search_link;
global $PHP_SELF;

$query = "SELECT count(*) FROM $tbl_units 
                    INNER JOIN $tbl_members ON   $tbl_units.memberid = $tbl_members.username 
                    WHERE $tbl_members.status = 'Active' AND $tbl_units.status = 'Available' $search_db";
$result = mysql_query($query);
if(!$result) error_message(sql_error());

$query_data = mysql_fetch_row($result);
$total_num_user = $query_data[0];
$page_num = $cur_page + 1;
$total_num_page = $last_page_num 
              = ceil($total_num_user/$records_per_page);

if($total_num_user > 0) {
    echo "<CENTER><H3>$total_num_user unit(s) found. ";
    echo "Displaying the page $page_num out of $last_page_num.</H3></CENTER>\n";
} else {
    echo "<CENTER><div class='vacancy'>No vacancies at this time!</div></CENTER>\n";
}

if(!empty($search_txt)) echo $search_txt;

if(empty($order_by)) {
    $order_by_str = "ORDER BY $default_order_by";
    $order_by = $default_order_by;
}
else $order_by_str = "ORDER BY $order_by";

if(empty($sort_order)) {
    $sort_order_str = $org_sort_order = $default_sort_order;
    $hold_order = $sort_order;
    $sort_order = 'DESC';
}
else {
    $sort_order_str = $org_sort_order = $sort_order;
    $hold_order = $sort_order;
    if($sort_order == 'DESC') $sort_order = 'ASC';
    else $sort_order = 'DESC';
}

if(empty($cur_page)) {
    $cur_page = 0;
}

$limit_str = "LIMIT ". $cur_page * $records_per_page . ", $records_per_page";
$query = "SELECT $tbl_units.* FROM $tbl_units 
                    INNER JOIN $tbl_members ON $tbl_units.memberid = $tbl_members.username 
                    WHERE $tbl_members.status = 'Active' AND $tbl_units.status = 'Available' $search_db 
                    $order_by_str $sort_order_str $limit_str";
$result = mysql_query($query);   
if(!$result) error_message(sql_error());

函数列表_记录(){global$tbl_单位,$tbl_成员;
全局$unit\u数组,$location\u数组;
全局$default\u sort\u order、$default\u order\u by、$records\u per\u page;
全局$sort\u order、$order\u by、$cur\u page、$search\u db、$search\u txt、$search\u link;
全球$PHP_SELF;
$query=“从$tbl\U单位中选择计数(*)
内部加入$tbl_单位上的$tbl_成员。成员ID=$tbl_成员。用户名
其中$tbl_members.status='Active'和$tbl_units.status='Available'$search_db';
$result=mysql\u query($query);
如果(!$result)错误消息(sql错误());
$query\u data=mysql\u fetch\u行($result);
$total_num_user=$query_data[0];
$page\u num=$cur\u page+1;
$total_num_page=$last_page_num
=ceil($total_num_user/$records_/页);
如果($total\u num\u user>0){
回显“$total\u num\u已找到用户单位。”;
echo“显示$last_page_num中的$page_num。\n”;
}否则{
回显“目前没有空缺!\n”;
}
如果(!empty($search_txt))回显$search_txt;
if(空($order_by)){
$order\U by\U str=“按$default\U order\U by订购”;
$order\u by=$default\u order\u by;
}
else$order\u by_str=“order by$order\u by”;
if(空($sort_order)){
$sort\u order\u str=$org\u sort\u order=$default\u sort\u order;
$hold_order=$sort_order;
$sort_order='DESC';
}
否则{
$sort\u order\u str=$org\u sort\u order=$sort\u order;
$hold_order=$sort_order;
如果($sort_order='DESC')$sort_order='ASC';
else$sort_order='DESC';
}
如果(空($cur_page)){
$cur_page=0;
}
$limit_str=“limit”。$cur_page*$records_per_page.,$records_per_page”;
$query=“从$tbl\U单位中选择$tbl\U单位。*”
内部加入$tbl_单位上的$tbl_成员。成员ID=$tbl_成员。用户名
其中$tbl_members.status='Active'和$tbl_units.status='Available'$search_db
$order_by_str$sort_order_str$limit_str”;
$result=mysql\u query($query);
如果(!$result)错误消息(sql错误());

如果有人能帮我弄清楚如何让我的链接发挥作用,我将不胜感激!我在这里和那里做了一些尝试,但我无法让页面重定向到下一页的结果。

用你能理解的术语来说:这就像把一个.NET 1.0站点放到一个.NET 4.5环境中。[可能更糟]

有些东西正在破坏它:

  • IIRC
    $PHP\u SELF
    早就被弃用了,
    $\u SERVER['PHP\u SELF']
    应该是等效的,但不应该像这样使用,除非您喜欢XSS攻击
  • 所有这些全局变量声明让我很难过
  • #2中的所有内容和生成的URL使我相信此脚本是使用
    register_globals=On
    创建的,这是非常不安全的,应该修复。[默认情况下,它是
    关闭的,因为至少5.0,永远不应该打开。]使用$\u GET和/或$\u POST superglobal数组并验证您的输入
  • 除了mysql_*函数正在被弃用之外,您使用它们的方式使您对SQL注入敞开了大门。使用mysqli或PDO的参数化查询将帮助您避免这种情况

  • 修复这些问题将使页面正常工作,但实际上你应该让人从头开始重写它。即使对于PHP4来说,这段代码也让我觉得很无聊。

    用你应该理解的术语来说:这就像把一个.NET 1.0站点放到一个.NET 4.5环境中。[可能更糟]

    有些东西正在破坏它:

  • IIRC
    $PHP\u SELF
    早就被弃用了,
    $\u SERVER['PHP\u SELF']
    应该是等效的,但不应该像这样使用,除非您喜欢XSS攻击
  • 所有这些全局变量声明让我很难过
  • #2中的所有内容和生成的URL使我相信此脚本是使用
    register_globals=On
    创建的,这是非常不安全的,应该修复。[默认情况下,它是
    关闭的,因为至少5.0,永远不应该打开。]使用$\u GET和/或$\u POST superglobal数组并验证您的输入
  • 除了mysql_*函数正在被弃用之外,您使用它们的方式使您对SQL注入敞开了大门。使用mysqli或PDO的参数化查询将帮助您避免这种情况

  • 修复这些问题将使页面正常工作,但实际上你应该让人从头开始重写它。即使对于PHP4,这段代码也让我觉得很无聊。

    “我更像是一个.NET开发人员,所以我甚至不确定如何检查PHP站点的错误。”查找PHP错误日志(PHP_error.log)这是在网站的php.ini文件中定义的。旧网站是否碰巧启用了
    register\u globals
    ?创建一个新的
    info.php
    文件,其中仅包含
    Add
    error\u报告(-1);ini\u集('display\u startup\u errors',1);ini\u集('display\u errors',1)
    在文件开头并重新加载页面时,如果不是错误,至少会收到一条警告。谢谢!