2011-02-28 118 views
0

我有一个不断加载永远之后我改变了一些小的一页,我不知道为什么。我使用Chrome浏览器的网页开发实用程序检查了该页面,并表示它无限尝试$_GET的东西,但是根本没有任何代码存在这样的请求。我还有什么可以尝试调试并找出造成问题的原因?PHP页面加载永远

这是代码,我认为这是负责该块:

<?php 
$con = mysql_connect(...); 
if (!$con) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db(db, $con); 

$thisZone = $_SESSION["zoneSelected"]; 

$newSQL = mysql_query("SELECT id FROM coupons WHERE zone ='$thisZone'"); 

$numIDs = mysql_num_rows(mysql_query($newSQL)); 

$newCoups = array(); 
while($row = mysql_fetch_array($newSQL)) 
{ 
    $newCoups[] = $row; 
} 

//generates the 3 random 

$randID1 = mt_rand(1, $numIDs); 
do { 
    $randID2 = mt_rand(1, $numIDs); 
} 
while(in_array($randID2, array($randID1))); 
do { 
    $randID3 = mt_rand(1, $numIDs); 
} 
while(in_array($randID3, array($randID1,$randID2))); 

$randArr1 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$randID1' AND zone = '$thisZone'")); 
$randStats1 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$randID1'")); 
$randArr2 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$randID2' AND zone = '$thisZone'")); 
$randStats2 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$randID2'")); 
$randArr3 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$randID3' AND zone = '$thisZone'")); 
$randStats3 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$randID3'")); 

//generates the 3 new 

$coupsThisZone = count($newCoups); 
$newID1 = $newCoups[($coupsThisZone - 1)]; 
$newID2 = $newCoups[($coupsThisZone - 2)]; 
$newID3 = $newCoups[($coupsThisZone - 3)]; 

$newArr1 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$newID1' AND zone = '$thisZone'")); 
$newStats1 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$newID1'")); 
$newArr2 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$newID2' AND zone = '$thisZone'")); 
$newStats2 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$newID2'")); 
$newArr3 = mysql_fetch_array(mysql_query("SELECT retailerName,savingsDetails,dateExp,qrPicture FROM coupons WHERE id = '$newID3' AND zone = '$thisZone'")); 
$newStats3 = mysql_fetch_array(mysql_query("SELECT views,saves,QRScans,prints FROM stats WHERE id = '$newID3'")); 
?> 
+0

您可以发布关于一些代码的微小的变化? – kjy112 2011-02-28 17:49:26

+0

变更是否涉及'header('location = ...');'? – mellamokb 2011-02-28 17:50:32

+0

是的,有一个'header('Location:...');',但那是永远存在的。注释它也不会影响页面加载。 – AKor 2011-02-28 17:53:27

回答

1

什么是do...while目的在那里,如果你能达到与if同样简单的效果呢? while是一个非常危险的陈述,并且在大多数情况下,总会遇到无限循环的情况。

+0

不错...这是我第一个接受的答案。 :P – 2011-02-28 18:20:56

0

把一些调试输出(例如echo "1";echo "2";。)在你的页面的不同部分。每次输出后冲洗输出缓冲区(flush();)。然后,你就可以看到确切脚本挂...

0

一个挂页面往往会下降到错误while和for语句。尝试评论每个人的声明,将其缩小到一个单一的循环。

+0

我将整个页面中的所有循环注释掉了,并且它的挂起方式没有任何变化。 – AKor 2011-02-28 18:04:44

0

要清理你的代码,并删除可能导致你的页面挂起的while循环,除了INNER JOIN'ing这两个表之外,你可能还想使用MySQL的RAND()一起。你将能够清理你的代码,同时仍然保持你要做的功能。

1

要获得随机X,你可以轻松地洗牌ID阵列($ newCoups),并得到他们的第一个x。这会产生正确的结果。在你的代码中,你会生成3个随机ID,假设这些ID在该区域(这可能会在某个时候失败)。你可以使用sql来获得新的和随机的,这将是最有效的方法。

随机3:

SELECT c.id, c.retailerName,c.savingsDetails,c.dateExp,c.qrPicture, s.views,s.saves,s.QRScans,s.prints 
FROM coupons c 
LEFT JOIN stats s ON c.id = s.id 
WHERE c.zone = '$thisZone' 
ORDER BY RAND() 
LIMIT 3 

最新3:

SELECT c.id, c.retailerName,c.savingsDetails,c.dateExp,c.qrPicture, s.views,s.saves,s.QRScans,s.prints 
FROM coupons c 
LEFT JOIN stats s ON c.id = s.id 
WHERE c.zone = '$thisZone' 
ORDER BY c.id DESC 
LIMIT 3