Kjapp og trygg hosting for Wordpress

Server krasjer ved bruk av $i++

Walgermo

New Member
Hei

Jeg velger ut noe fra DB og skal telle det.
På localhost på min egen datamaskin fungerer det, men på serveren min krasjer det. Mest sannsynlig for forskjellige versjoner av mysql/php.

Her er koden, er det noen andre måter å skrive dette på som gjør at serveren ikke krasjer:

PHP:
$num = mysql_num_rows($result);
$i=1;
if($i < $num)
{ 
echo "<table border='1' width='100%'>";
echo "<tr><th>#</th><th>" . ucf(translate('country')) . "</th><th>" . ucf(translate('navn')) . "</th><th>" . translate('date') . "</th><th>" . ucf(translate('bodyweight')) . "</th><th>". translate('lifted') ."</th></tr>";

// keeps getting the next row until there are no more to get
while ($row = mysql_fetch_array( $result )) 
{
	// Print out the contents of each row into a table
	echo "<tr><td align='center'>";
echo $i++; // Krasj??
	echo "</td><td align='center'>";
	echo "<div><img src='img/flags/16/". strtolower($row['user_country']) .".png' /></div> " . translate(ucf(getCountryName(strtolower($row['user_country'])))) . "";
	echo "</td><td align='center'>";
	echo "<a href='index.php?action=profile&sub=show&tid=". $row['training_id'] ."'>" . getNameFromId($row['user_id']) . "</a>"; 
	echo "</td><td align='center'>";
	echo formatDate($row['date'], $dateformat);
	echo "</td><td align='center'>";
	echo r_nr2(calcFromKg($row['bodyweight'])). $w_metric;
	echo "</td><td align='center'>"; 
	echo r_nr(calcFromKg($row['kg'])). $w_metric;
	echo "</td></tr>"; 
}

echo "</table>
<div class='fixed'>
					</div>
				</div>
				</div>
			<div class='fixed'>
			</div>
			<div id='footer'>
			<a id='gotop' href='#' onclick='MGJS.goTop();return false;'>" . translate('top') . "</a>
				<div align='center' id='copyright'>&copy; " . translate('copyrightyear') . " " . translate('header_text'). " - " .  translate('curversion') ." - <a href='index.php?action=contact'>" . translate('contact') ."</a> - <a href='index.php?action=about'>" . translate('about') . "</a> - " . translate('onlineusers'). ": " . getActiveUsers() . "<br />
                </div>";
	exit;
	
}
else
{

Versjoner:
Lokalt: php 5.3 mysql 5.1.36
Server: php 5.29 mysql 5.0.87

Håper det er noen som ser noe jeg ikke har sett her :p hehe..
Takk for svar :)
 
Sist redigert:

Walgermo

New Member
Får du noen feilmeldinger her? Forsvinner feilen om du kommenterer vekk $i++?

Lokalt så fungerer det, bare tallene blir borte. På serveren får ikke jeg noe feilmelding, bare NSL (Never stops loading) akkurat som det blir en uendelig loop av tellingen :s derfor det er vansklig å skjønne hva som foregår. hehe..
 

Nutz

Med lem
Hva skjer hvis $i er lik $num?
Hva skjer hvis $i er større enn $num?

Har du spurt deg disse spørsmålene?
Mulig det er løsningen på en end-less loop.
 

Walgermo

New Member
Hva skjer hvis $i er lik $num?
Hva skjer hvis $i er større enn $num?

Har du spurt deg disse spørsmålene?
Mulig det er løsningen på en end-less loop.

prøvde å sette $i == $num og $i > $num, men da får ikke jeg ut noe resultat.
Vet ikke helt om det var dette du mente?
 

Nutz

Med lem
Nei, mente egentlig ingenting ang løsning, bare lurte på om du hadde stilt deg de spørsmålene.
Dersom du slipper igjennom noe uforutsett, eller tar forgitt at en tilstand "ikke kan bli", så er det ofte det man forutsetter som gir hakeslipp.. :)
 

Walgermo

New Member
Nei, mente egentlig ingenting ang løsning, bare lurte på om du hadde stilt deg de spørsmålene.
Dersom du slipper igjennom noe uforutsett, eller tar forgitt at en tilstand "ikke kan bli", så er det ofte det man forutsetter som gir hakeslipp.. :)
Okej ;)

Har sendt en melding til hosten om å endre til nyeste php og mysql versjon, får satse på det hjelper :)
 
Hvis problemet her er at du får en uendelig loop, har det iallefall absolutt ingenting med $i å gjøre. Loopen her er while ($row = mysql_fetch_array( $result )), $i er bare en tilfeldig variabel som brukes i loopen.

Og du har ingen andre looper på siden ... hm. Mystisk. Hva med funksjonene dine, er det noen mulighet for at feilen ligger der? Er det noen looper i getNameFromID eller getCountryName eller calcFromKg eller noe sånt som kan være problemet her? Sannsynligvis ikke, men ...
 

Walgermo

New Member
Her er hele PHP koden, kanskje det hjelper litt mer.

Og du har ingen andre looper på siden ... hm. Mystisk. Hva med funksjonene dine, er det noen mulighet for at feilen ligger der? Er det noen looper i getNameFromID eller getCountryName eller calcFromKg eller noe sånt som kan være problemet her? Sannsynligvis ikke, men ...

Tvilsomt siden det fungerer på lokale serveren.

PHP:
if(isset($_POST['select']))
{
	$ex_id = $_POST['select_exercise'];
	$gender = $_POST['gender'];
	$nr_reps = $_POST['reps'];
	$nr_to_show = $_POST['nr_to_show'];

echo "<br /><h1>" . ucf(translate(getExercisename($ex_id))) . " - ". $nr_reps . "RM - ". translate('top') ." " . $nr_to_show ."</h1><br />";
	
//Her stopper det, kommer ikke lenger!!!!!!!! hmm :(	

if($gender == "")
{
	// Get all the data
	$result = mysql_query("SELECT 
	date, 
	user_country, 
	training.user_id, 
	users.user_id AS uu, 
	kg, 
	rep, 
	training.training_id, 
	lifts.training_id AS lt, 
	bodyweight 
	FROM lifts, training, users 
	WHERE kg=(SELECT max(kg) FROM lifts WHERE rep= ". $nr_reps ." AND exercise_id = ". $ex_id ." AND training.training_id = lifts.training_id AND training.user_id = users.user_id) 
	GROUP BY user_id
	ORDER BY ABS(kg) DESC, ABS(bodyweight) ASC, ABS(date) ASC 
	LIMIT ". $nr_to_show ." ") or die(mysql_error()); 
}
else
{
	// Get all the data with sex seleceted
	$result = mysql_query("SELECT 
	date, 
	user_country, 
	training.user_id, 
	users.user_id AS uu, 
	kg, 
	rep, 
	training.training_id, 
	lifts.training_id AS lt, 
	bodyweight 
	FROM lifts, training, users 
	WHERE kg=(SELECT max(kg) FROM lifts WHERE rep= ". $nr_reps ." AND exercise_id = ". $ex_id ." AND training.training_id = lifts.training_id AND training.user_id = users.user_id AND user_gender='". $gender ."') 
	GROUP BY user_id
	ORDER BY ABS(kg) DESC, ABS(bodyweight) ASC, ABS(date) ASC 
	LIMIT ". $nr_to_show ." ") or die(mysql_error()); 
}
$num = mysql_num_rows($result); 
$i=1; 
if($i < $num) 
{  
echo "<table border='1' width='100%'>"; 
echo "<tr><th>#</th><th>" . ucf(translate('country')) . "</th><th>" . ucf(translate('navn')) . "</th><th>" . translate('date') . "</th><th>" . ucf(translate('bodyweight')) . "</th><th>". translate('lifted') ."</th></tr>"; 

// keeps getting the next row until there are no more to get 
while ($row = mysql_fetch_array( $result ))  
{ 
    // Print out the contents of each row into a table 
    echo "<tr><td align='center'>"; 
echo $i++; // Krasj?? 
    echo "</td><td align='center'>"; 
    echo "<div><img src='img/flags/16/". strtolower($row['user_country']) .".png' /></div> " . translate(ucf(getCountryName(strtolower($row['user_country'])))) . ""; 
    echo "</td><td align='center'>"; 
    echo "<a href='index.php?action=profile&sub=show&tid=". $row['training_id'] ."'>" . getNameFromId($row['user_id']) . "</a>";  
    echo "</td><td align='center'>"; 
    echo formatDate($row['date'], $dateformat); 
    echo "</td><td align='center'>"; 
    echo r_nr2(calcFromKg($row['bodyweight'])). $w_metric; 
    echo "</td><td align='center'>";  
    echo r_nr(calcFromKg($row['kg'])). $w_metric; 
    echo "</td></tr>";  
} 

echo "</table> 
<div class='fixed'> 
                    </div> 
                </div> 
                </div> 
            <div class='fixed'> 
            </div> 
            <div id='footer'> 
            <a id='gotop' href='#' onclick='MGJS.goTop();return false;'>" . translate('top') . "</a> 
                <div align='center' id='copyright'>&copy; " . translate('copyrightyear') . " " . translate('header_text'). " - " .  translate('curversion') ." - <a href='index.php?action=contact'>" . translate('contact') ."</a> - <a href='index.php?action=about'>" . translate('about') . "</a> - " . translate('onlineusers'). ": " . getActiveUsers() . "<br /> 
                </div>"; 
    exit; 
     
} 
else 
{ 
blabla
 
Sist redigert:

Nutz

Med lem
Tror også som Olaf at fokuset på echo $i++ er feil.
Hva med feil data i database som gjør at en av konverteringsfunksjonene gjør noe krøll?
 
Et spørsmål (som overhodet ikke vil løse problemet ditt, men som kanskje gir oss mer å jobbe med): Hva skjer om du bytter ut denne kodesnutten
Kode:
while ($row = mysql_fetch_array( $result )) {  
    // Print out the contents of each row into a table  
    echo "<tr><td align='center'>";  
echo $i++; // Krasj??  
    echo "</td><td align='center'>";  
    echo "<div><img src='img/flags/16/". strtolower($row['user_country']) .".png' /></div> " . translate(ucf(getCountryName(strtolower($row['user_country'])))) . "";  
    echo "</td><td align='center'>";  
    echo "<a href='index.php?action=profile&sub=show&tid=". $row['training_id'] ."'>" . getNameFromId($row['user_id']) . "</a>";   
    echo "</td><td align='center'>";  
    echo formatDate($row['date'], $dateformat);  
    echo "</td><td align='center'>";  
    echo r_nr2(calcFromKg($row['bodyweight'])). $w_metric;  
    echo "</td><td align='center'>";   
    echo r_nr(calcFromKg($row['kg'])). $w_metric;  
    echo "</td></tr>";   
}
med denne?
Kode:
$row = mysql_fetch_array( $result );
    // Print out the contents of each row into a table  
    echo "<tr><td align='center'>";  
echo $i++; // Krasj??  
    echo "</td><td align='center'>";  
    echo "<div><img src='img/flags/16/". strtolower($row['user_country']) .".png' /></div> " . translate(ucf(getCountryName(strtolower($row['user_country'])))) . "";  
    echo "</td><td align='center'>";  
    echo "<a href='index.php?action=profile&sub=show&tid=". $row['training_id'] ."'>" . getNameFromId($row['user_id']) . "</a>";   
    echo "</td><td align='center'>";  
    echo formatDate($row['date'], $dateformat);  
    echo "</td><td align='center'>";  
    echo r_nr2(calcFromKg($row['bodyweight'])). $w_metric;  
    echo "</td><td align='center'>";   
    echo r_nr(calcFromKg($row['kg'])). $w_metric;  
    echo "</td></tr>";
Får du opp siden slik den skal være (bortsett fra at du får opp bare en rad), eller får du fortsatt feil da?
 

Walgermo

New Member
Lokalt så får jeg opp det første resultatet, på serveren så er det samme problemet. så tror vi kan se bort fra $i++ nå ja.
 

Walgermo

New Member
Prøvde å kjøre spørringen manuelt i phpMyAdmin

Og tror jeg har funnet ut deler av problemet

PHP:
Viser rader 0 - 0 [B](1 totalt, Spørring tok 26.3652 sek)[/B] !!!
SELECT date, user_country, training.user_id, users.user_id AS uu, kg, rep, training.training_id, lifts.training_id AS lt, bodyweight
FROM lifts, training, users
WHERE kg = ( 
SELECT max( kg ) 
FROM lifts
WHERE rep =2
AND exercise_id =5
AND training.training_id = lifts.training_id
AND training.user_id = users.user_id ) 
GROUP BY user_id
ORDER BY ABS( kg ) DESC , ABS( bodyweight ) ASC , ABS( date ) ASC

Lokalt så er tidens noe annet:
PHP:
Viser rader 0 - 3 (4 totalt, Spørring tok 0.0722 sek)
SELECT date, user_country, training.user_id, users.user_id AS uu, kg, rep, training.training_id, lifts.training_id AS lt, bodyweight
FROM lifts, training, users
WHERE kg = ( 
SELECT max( kg ) 
FROM lifts
WHERE rep =10
AND exercise_id =2
AND training.training_id = lifts.training_id
AND training.user_id = users.user_id ) 
GROUP BY user_id
ORDER BY ABS( kg ) DESC , ABS( bodyweight ) ASC , ABS( date ) ASC 
LIMIT 5
 
Sist redigert:
Topp