2014-01-07 49 views
0

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

<?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已打开。

+0

您是否曾尝试在您的网址之前添加'/'? – Peon

+0

刚试过。没有,这是行不通的。给我一个404错误。正如我所说,这已经工作了几年。 – Rich

+0

您是否检查过是否启用了short_open_tag? –

回答

2

呜呜...... register_globals被设置为废弃了,因为PHP 5.3.0和在PHP 5.4" REMOVED

你的问题肯定就在于此脚本:works.php

请考虑这个快速和肮脏的解决办法:register_globals fix

+0

works.php文件没有改变,并且正在运行。此时链接会将我们带到工作页面,但始终显示mysql查询的第一项,但显示的URL是正确的。 – Rich

+0

register_globals修复工作。我明白,这是一个非常临时的解决方案,我必须清理代码。谢谢。 – Rich

0

下面的行代码中的未关闭。您可以通过使用分号关闭它解决它。

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

也跟着这个SO答案来运行您的脚本,如注册全局启用。 https://stackoverflow.com/a/16706242/817365

+0

固定。谢谢,但对链接问题没有帮助。 – Rich

+0

更新了帖子。您可以按照该答案获取寄存器全局功能。 –