Blätterfunktion? (Mit zwei getrennten Scripten)

monoblock

Mitglied
Hallo!

Da ich eigentlich nichts mit PHP mache bin ich schon sehr stolz auf die beiden kleinen Scripte die ich hier gebaut haben, aber jetzt stehe ich vor einem Problem:

wear.php liest eine Datenbank (wenn man will mit bestimmten Filtern) aus und generiert daraus XMLOutput. (Eine Liste mit Bild+Link zur zoom.php)

zoom.php ist dafür da, dass es ein größeres Bild und genauere Informationen zum Artikel darstellt.

Aber wie kann ich jetzt in zoom.php einen Vor- und Zurückbutton integrieren um zum nächsten bzw. vorherigen Artikel zu springen? Sollte doch eigentich per ID der Artikel möglich sein, aber die ist nicht fortlaufend, da beginnt für mich das Problem.

Weiß jemand Rat? Ich denke, es ist noch ein relativ simples Problem :P Nur für mich als "" nicht so...

Gruß
Dominik

wear.php
PHP:
<? header('Content-type: text/xml'); ?>
<? require_once('head.php'); ?>
<?
	//  Inputs für SQL:
	//	$c = Kollektions ID
	//	$a = Kollektions Art 					-> collection
	//										Golf	-> golf
	//	$sa = Kollektions Unterart			Hosen -> pants
	//										Gürtel -> belts
	//	$ty = Typ							Denim, Tops, Wear,... etc.
	
	//	Inputs für XML
	//	$ra = Replacementarea 				ID des HTML Elemnts, welches ersetzt werden soll
	//										
	
	
	if ($ty == "" and $a == "collection") {
	 	$sql = "SELECT *
				FROM db_collectionsitems
				WHERE collection_ref=".$_GET['c']."
					AND area='".$_GET['a']."'
					AND subarea='".$_GET['sa']."'";
	} else {
	 	$sql = "SELECT *
				FROM db_collectionsitems
				WHERE collection_ref=".$_GET['c']."
					AND area='".$_GET['a']."'
					AND subarea='".$_GET['sa']."'
					AND type='".$_GET['ty']."'";
	} 

	$resp = mysql_query($sql, $db);
	$i=-1;

	$pants = array();
	if( $resp )
		// alles in Gruppen sortieren
		while( $row = mysql_fetch_assoc($resp) ) {
			if( !array_key_exists($row['type'], $pants) )
				$pants[$row['type']] = array();
				$pants[$row['type']][] = $row;
		}
?>
<root>
	<title set="<?echo $st?>"><![CDATA[<?echo $ti?>]]></title>
	<destination mode="replace" zone="<?echo $ra?>"/>
	<data><![CDATA[
		<ul class="iListing">
			<? foreach( $pants as $name => $content ): ?>
			<li class="list_headline"><h2>BlaBla <?= $name ?></h2></li>
			<? foreach( $content as $pant ): $i++; ?>
			<li<?=($i % 4 == 0 ? ' class="first"':'')?>>
				<a href="sites/zoom.php?id=<?= $pant['id'] ?>#_Zoom" rev="async" title="<?= $pant['style']?>"><img src="img/<?=$pant['area']?>/thumbs/<?= $pant['img_ref'] ?>.jpg" /></a></li>
			<? endforeach;?>
			<li class="last_child"></li>
			<? endforeach;?>
		</ul>]]>
	</data>
</root>

zoom.php
PHP:
<? header('Content-type: text/xml'); ?>
<? require_once('head.php'); ?>
<?
	$sql = "SELECT *
			FROM db_collectionsitems
			WHERE id=".$_GET['id'];
			
	$resp = mysql_query($sql, $db);
	$row = mysql_fetch_assoc($resp);
	//print_r($row);
?>
<root>
	<title set="waZoom"><![CDATA[<?= $row['style']?>]]></title>
	<destination mode="replace" zone="async-Z" />
	<data><![CDATA[
		<div class="iLogo">
			<img src="img/logo-iphone.gif" width="170" height="auto" alt="Logo White">
		</div>
			<ul class="iProduct">
				<li>
					<big>article:</big>
					<small left="true"><?= $row['article']?></small>
				</li>
				<li>
					<big>style:</big>
					<small><?= $row['style']?></small>
				</li>
				<li>
					<big>fit:</big>
					<small left="true"><?= $row['fit']?></small>
				</li>
				<li>
					<big>mat:</big>
					<small><?= $row['material']?></small>
				</li>
				<li class="iSpace"><img src="img/<?= $row['area']?>/zoom/<?= $row['img_ref']?>" style="width: 296px; height:auto;" /></li>
			</ul>
	]]></data>
</root>
 
Zu dem ersten:

Nach irgendeinem Muster müssen deine Einträge in der DB ja gespeichert werden. Wenn nicht nach ID, dann nach Datum ect. Eine nicht fortlaufende ID halte ich persönlich auch für extem unlogisch...*hust*. Falls du weder eine fortlaufende id (auto_increment) noch ein Datum oder ähnliches hast, wird es schwer das nächste oder vorherige Bild / Artikel auszulesen.

Jedenfalls kannst du (ich kenn ja leider deine DB nicht) nicht einfach id + oder id - rechnen und gut ist?

Und mal ein Tipp:

zoom.php
PHP:
$sql = "SELECT * FROM db_collectionsitems WHERE id=".$_GET['id'];
?>

ist extrem unsicher.
Mach es mindestens so:

PHP:
$id = addslashes($_GET['id']);
// $id = htmlspecialchars($id); // wäre zusätzliche Sicherheit.
$sql = "SELECT * FROM db_collectionsitems WHERE id='$id';
 
Ok, danke für den Tipp :) Ich habe mich falsch ausgedrückt, die ID ist schon fortlaufend, nur ist sie zB beim einen Artikel 1 und beim nächsten schon 4, weil zB welche gelöscht wurden. Das meinte ich im ersten Post. Deswegen weiß ich nicht wie ich das machn soll, dass ich einfach einen höher oder niedriger Zähle was die ID angeht...
 
PHP:
$sql = "SELECT * FROM db_collectionsitems WHERE id=".$_GET['id'];
?>

ist extrem unsicher.
Mach es mindestens so:

PHP:
$id = addslashes($_GET['id']);
// $id = htmlspecialchars($id); // wäre zusätzliche Sicherheit.
$sql = "SELECT * FROM db_collectionsitems WHERE id='$id';

Warum den noch extra eine Variable und 2 Zeilen längeren Code.

PHP:
$sql = "SELECT * FROM db_collectionsitems WHERE id=".addslashes(htmlspecialchars($_GET['id']));

Eine andere Möglichkeit wäre es einfach zu prüfen und $_GET['id'] ein Integer Wert ist und falls nicht einfach einen Integer Wert erzeugen.

PHP:
if (is_int($_GET['id'])
{
    $sql = "SELECT * FROM db_collectionsitems WHERE id=".addslashes(htmlspecialchars($_GET['id']));
} else {
    $sql = "SELECT * FROM db_collectionsitems WHERE id=".int(addslashes(htmlspecialchars($_GET['id'])));
}
 
Normalerweise nehme ich auch mysql_real_escape_string. Nur da ich den Vorschlag von String um 2 anders geschriebene Möglichkeiten ergänzen wollte habe ich es nicht genommen. Ich hätte es als 3 Möglichkeit noch hinzufügen sollen.
 
Hallo? Ich finde es ja ganz reitzend, dass ihr euch hier gegenseitig mit Verbesserungen übertrefft, aber ich bin mit meinem Problem noch immer nicht wirklich weiter :(
 

Neue Beiträge

Zurück