AKor
AKor

Reputation: 8882

PHP page loading forever

I have a page that keeps loading forever after I changed something minor, and I'm not sure why. I inspected the page with Chrome's utility for web dev and it said it was infinitely trying to $_GET something, but there is no such request in any of my code at all. How else could I try to debug and figure out what is causing the problem?

This is the block of code that I believe is responsible:

<?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'"));
?>

Upvotes: 0

Views: 4574

Answers (5)

frail
frail

Reputation: 4118

To get random x you can easily shuffle the id array ($newCoups) and get the first x of them. which would yield the correct result. In your code you generate 3 random ids assuming that those id's is in that zone (which would possibly fail at some point). You can use sql to get both new and random aswell which would be the most efficient way.

Random 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

Latest 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

Upvotes: 1

Gelmir
Gelmir

Reputation: 1857

What is the purpose of do...while there, if you can achieve the same simple effect with if? while is a very dangerous statement and in most cases there is always a situation where you get infinite loops.

Upvotes: 1

Jason MacLean
Jason MacLean

Reputation: 513

To clean up your code a little bit, and to remove the while loops that might be causing your page to hang, you might want to look into using MySQL's RAND(), in addition to INNER JOIN'ing those two tables together. You will be able to clean up your code significantly, while still maintaining the functionality you are going for.

Upvotes: 0

Ivan
Ivan

Reputation: 3645

Put some debugging outputs(e.g. echo "1";, echo "2";) in the different parts of your page. Flush the output buffer( flush(); ) after each output. Then you'll be able to see where exactly your script hangs...

Upvotes: 0

Daniel Greaves
Daniel Greaves

Reputation: 987

A hanging page will often be down to erroneous while and for statements. Try commenting out each individual while statement to narrow it down to a single loop.

Upvotes: 0

Related Questions