0

这可能是 register_globals = on issue 或 url rewriting 问题。我通过使用基本的 php 链接语法消除了 url 重写的可能性。我尝试了几个补丁来模拟 register_globals 开启但无济于事。直到上周更新 php.ini 文件时,该站点一直正常运行。它是一个带有 php 5.4.23 的 Apache 服务器。基本上我有一个目录页面,它显示从 mysql 数据库调用的作品列表。当用户单击链接时,它会将用户带到相应的项目页面。目录列表显示正确,但链接不再起作用,也没有显示错误。它总是链接到 mysql 请求的第一项,而不是请求的链接,即使显示的 url 是正确的。下面是连接数据库的代码:

<?php
$db = mysql_connect("localhost", "user", "pw"); 
mysql_select_db("database_name",$db); 
$sqlNum = 'SELECT * FROM callejas ORDER BY engname ';
$sql = 'SELECT * FROM callejas ORDER BY engname LIMIT '.(($page-1)).",".(1);
$resultNum = mysql_query($sqlNum);
$numRows = mysql_num_rows($resultNum);
$sqlnext = 'SELECT * FROM callejas ORDER BY engname LIMIT ' .(($page)).",".(1);
$sqlpre = 'SELECT * FROM callejas ORDER BY engname LIMIT ' .(($page-2)).",".(1);
//sommaire
$req = 'SELECT * FROM callejas ORDER BY engname  '; 
$result = mysql_query($req); 
$result1 = mysql_num_rows($result);
$milieu =  $result1 / 2;
$mil = (int)$milieu ;
$left = 'SELECT * FROM callejas ORDER BY `engname`  ASC LIMIT 0,'.($mil);
$right = 'SELECT * FROM callejas ORDER BY `engname`  ASC LIMIT '.($mil).",".($result1);
?>

这是catalog.php文件的一部分,除了链接之外,它可以正常工作

    <?
include ("connecttodatabase.php");
$i=1;
$j=0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1  /DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<div align="right" id="left" style="position:absolute; width:200px; height:388px; z-index:42; left: 6px; top: 170px;" class="interline30"> 
<?
$leftres = mysql_query($left);
function StandardizeString($img)
{
      $img = strtr($img,
             'ŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöøùúûüýÿ',
             'SZszYAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy' );
      $img = preg_replace('/[\'"]/', '',$img); // Eliminate all quotes
      $img = preg_replace('/[^a-zA-Z0-9]+/', '-', $img); // Remove all spaces
      $img = trim($img, '_'); // Remove any leading or trailing underscored
      // Return the result
      return $img;
  }
while(($myrow = mysql_fetch_array($leftres)))
{
$img= $myrow['engleg'] ;
$little = "".$myrow['little'];
$tittle = StandardizeString($img); 
?>
<div align="center"
<?
echo  "id=\"$i\"";
?>
style="position:absolute; width:153px; z-index:49; left: 207px;top: 
<?
echo "$j px;"
?> 
visibility: hidden;"> 
<?
echo "<img src= \"{$little}\" title= \"{$img}\"  alt= \"{$img}\">";
?>
</div>
<?
echo "<p><a href='works.php?tittle=$tittle&page=$i' 
$img</a></p>";
$i++;
$j = $j+30;
}
?>
</div>
</body>

我一直看不出有什么问题。这段代码已经运行了几年,在阅读了 php 5.3 和 5.4 之间的差异之后,我没有看到任何已弃用的代码,但我知道 register_globals 已启用。

4

2 回答 2

2

Hum...register_globals 自 PHP 5.3.0 起已弃用,在 PHP 5.4 中已删除"

您的问题肯定出在此脚本中:works.php

请考虑这个快速而肮脏的修复:register_globals fix

于 2014-01-07T10:43:16.623 回答
0

您的代码中的以下行未关闭。您可以通过用分号关闭它来修复它。

<?
echo "$j px;";
?> 

也可以按照这个 SO answer 运行你的脚本,比如启用全局注册。 https://stackoverflow.com/a/16706242/817365

于 2014-01-07T10:55:21.563 回答