Hallo mede PHP'ers

Ik ben bezig met mijn studie PHP. Hiermee ben ik eens een banner_rotatie systeem aan het maken die object georienteerd is. Dit slechts om het wat meer onder de knie te krijgen.

Ik krijg netjes uit 1 functie een waarde wat gelijk staat aan een banner ID, die weer gekozen wordt uit een query van de aanwezige, actieve banners. Alleen af en toe krijg ik dus geen waarde terug waardoor de pagina in zijn geheel niet laad.

Weet iemand hier een oplossing voor?

Ik zal hieronder even de stukken code plaatsen:


De classes.

<?php
class banner_rotatie {
	
	public function banner_id() {

		$get_banners=mysql_query("SELECT banner_id FROM banner_rotatie WHERE banner_active=1")or die(mysql_error());
		
		/* ------------- 
		Bevat alleen maar banner_id's die actief zijn.
		Eerst even kijken hoeveel waarden we in de array hebben staan.
		-------------- */
		
		$max_waarde=mysql_num_rows($get_banners)+2;
		for ($i=1; $i!=$max_waarde; $i++){
			$banner_array[$i]=mysql_fetch_row($get_banners);
		}
		
		/* -------------
		We tellen het aantal ID's zodat we random kunnen maken tussen 0 en het aantal banner_id's
		------------ */
		
		$banner_nr=mt_rand(1, $max_waarde);
		
		/* ---------
		De banner overzetten naar $banner_id[0].
		deze krijgt een array waarde dus de [0] is nodig.
		------------ */
		
		$banner_id=$banner_array[$banner_nr];
		
		if (empty($get_banners)) {
			$banner_id=1;
			return $banner_id[0];
		} else {
			return $banner_id[0];
		}
			
	}
	
	public function banner_details($banner_id) {
		
		$get_banner=mysql_query("SELECT banner_clickcount, banner_file, banner_url FROM banner_rotatie WHERE banner_id='".$banner_id."'")or die(mysql_error());
		$banner_details=mysql_fetch_array($get_banner, MYSQL_BOTH)or die(mysql_error());
		
		return $banner_details;
	}
}?>


En hieronder het aanroepen en het verwerken van de data. En het plaatsen van de banner.


<?php
include ('config.php');
include ('function.php');

/* ----------------- functie aanroepen voor een nieuwe banner: */
$banner = new banner_rotatie();
/* ----------------- We halen maar eens een banner_detail op: */
$banner_id[0] = $banner->banner_id();
/* ----------------- We hebben een detail die geven we mee aan de query: */
$banner_details = $banner->banner_details($banner_id[0]); 
/* ----------------- 
	$banner_details is een array 
	[0]=clickcount
	[1]=banner bestand
	[2]=url waar de banner naar toe moet linken
	
	print ''.$banner_details[0].'<br>';
	print ''.$banner_details[1].'<br>';
	print ''.$banner_details[2].'<br>';
----------------- */
print ''.$banner_id[0].'<br>';

if (empty($banner_details[1])) {
	$banner_details[1]='banner\energy_lan_banner.gif';
}
if (!file_exists($banner_details[1])) {
	$banner_details[1]='banner\energy_lan_banner.gif';
}
$_SESSION['url']=$banner_details[2];
?>

<table width="100%" border="1" style="border-collapse:collapse;">
<tr>
	<td colspan="2" align="center"><a href="click_out.php?id=<?php print $banner_id[0]; ?>"><img src=<?php print "".$banner_details[1].""; ?> /></a></td>
</tr>
?>
$max_waarde=mysql_num_rows($get_banners)+2;

Gokje .... +2 ???
Handig om <?php bovenaan de code te zetten voor de mooie highlight.
SanThe schreef op 04.12.2008 11:07
$max_waarde=mysql_num_rows($get_banners)+2;

Gokje .... +2 ???


De array die wordt opgehaald begint bij [1] ipv 0. De waardes verschuiven vooraan een achter dus 1 wat dus 2 maakt.

Maar dit heb ik vooraf ook al getest. Dit lost het probleem niet op.

Maar toch bedankt voor de input.
Je gooit maar met variabele etc. Daarnaast heb je bij de HTML img tag geen quotes op de src. En heb je in PHP bij print "". en ."" die weg kunnen.
Maar dan moet hier wel -1 bij staan:
$banner_nr=mt_rand(1, $max_waarde);

Dus
$banner_nr=mt_rand(1, $max_waarde -1);
Dennis Mertens schreef op 04.12.2008 11:20
Je gooit maar met variabele etc. Daarnaast heb je bij de HTML img tag geen quotes op de src. En heb je in PHP bij print "". en ."" die weg kunnen.


Volgens helpt dit niet veel, aangezien de src in HTML tussen dubble of enkele quotes "moet" staan is de output nu: "banner/voorbeeld.jpeg" Dus of ik nu


<html>
src="<?php print $banner_details[2]; ?>" 
</html>


of

<html
src=<?php print "".banner_details[2].""; ?> 
</html>



plaats maakt dit geen verschil. De output is het zelfde.

SanThe schreef op 04.12.2008 11:21
Maar dan moet hier wel -1 bij staan:
$banner_nr=mt_rand(1, $max_waarde);

Dus
$banner_nr=mt_rand(1, $max_waarde -1);


Ook als ik dit test maakt dit geen verschil. Dit is inpricipe het zelfde als

<?php
$max_waarde=mysql_num_rows($get_banners)+1;
?>
Zet dit bovenin je script.
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
Hugo Zonderland schreef op 04.12.2008 11:38

Volgens helpt dit niet veel, aangezien de src in HTML tussen dubble of enkele quotes "moet" staan is de output nu: "banner/voorbeeld.jpeg" Dus of ik nu
Owja?

Dat is knap.

1: HTML wil je dat je dubbele quotes gebruikt geen enkele.
2: <?php print "".$var.""; ?>
Betekent geef alleen de waarde van $var op het scherm weer, geen quotes. Dus het maakt wel uit.
<?php print "".$var.""; ?>
Dit is onzin. Het heeft geen zin om een 'lege' string te printen.
<?php print $var; ?>
Exactly what I tried to say but you wouldn't listen :(

Reageren