if-Abfrage in einer while-Schleife?

KingChimera

Mitglied
Servus zusammen.
Hab ein Problem: ich möchte innerhalb einer Navi (deren Inhalt sich dynamisch aus einer Datenbank generiert) eine if-Abfrage einbauen, und irgendwie klappt das nicht.

Mal der Code von der Schleife:
Code:
    <?php do { ?>
    <a class="xxx" href="index.php?link=auswahl&id=<?php echo $row_xxx['id']; ?>"><?php echo htmlentities($row_xxx['motivname'], ENT_QUOTES, 'UTF-8'); ?></a><img src="images/zeile.jpg" border="0" /><br />
    <?php } while ($row_xxx = mysql_fetch_assoc($xxx)); ?>

Und dann soll sich, wenn in der URL eine id übergeben wird folgendes einblenden:
Code:
<?PHP
if($_GET[id]){
include("navi_kat.php");
}
?>

Soll quasi ein Untermenü werden, das nur dann auftauchen soll wenn die entsprechende id in der URL auftaucht. Natürlich auch nur unterhalb des aktiven Links.

Wie kriege ich das hin, oder anders gefragt: kann ich das auch irgendwie anders lösen? :D

Danke!!
 
Was genau klappt denn nicht? Die Struktur will mir grad nich in Kopf.

Bei dem ersten Code hast du bestimmt einmal einen leeren Link, weil das $row_xxx erst nach der Ausgabe gefüllt wird. Lieber umgekehrt:
PHP:
while ( $aRow = mysql_fetch_array($hSQLResult) ) {
  // code
}
 
Zuletzt bearbeitet:
Wenn ich den Code so schreibe:
Code:
    <?php do { ?>
    <a class="xxx" href="index.php?link=auswahl&id=<?php echo $row_xxx['id']; ?>"><?php echo htmlentities($row_xxx['motivname'], ENT_QUOTES, 'UTF-8'); ?></a><img src="images/zeile.jpg" border="0" /><br /><?PHP
if($_GET[id]){
include("navi_kat.php");
}
?>
    <?php } while ($row_xxx = mysql_fetch_assoc($xxx)); ?>
sehe ich nur den ersten Eintrag, darunter dann das "Submenü", aber keine weiteren Links mehr.

Wenn ich schreibe:
Code:
<?php while ( $row_xxx = mysql_fetch_assoc($xxx) ) {
 echo "<a class=\"xxx\" href=\"index.php?link=auswahl&id=$row_xxx[id]>$row_xxx[motivname]</a><img src=\"images/zeile.jpg\" border=\"0\" /><br /><?PHP
if($_GET[id]){
include("navi_kat.php");
}
?>
sehe ich die Navi wie immer, nur fehlt mir dann der erste Eintrag. Der Aufruf des "Submenüs" klappt jedoch nicht.

Was das ganze überhaupt werden soll: in der Navigation gibts versch. Motive (das ganze dient als "drumherum" für einen Shop), wenn ich jetzt Motiv 1 anklicke soll unterhalb des Links zu Motiv 1 die "navi_kat.php" geladen werden, die dann die verfügbaren Produkte anzeigt. Die Selektion erfolgt immer über eine URL-Variable.
Wenn ich Motiv 2 anklicke soll diese Produktliste unter Motiv 1 weg, und dafür unter Motiv 2 angezeigt werden etc. pp...

Bisher habe ich diese Produktauswahl unterhalb der Motivanzeige, was tadellos funktioniert. Nur wäre es eben schöner wenn diese Anzeige immer beim jeweiligen Motiv stehen würde...
 
Wenn dir bei dem der erste fehlt hast du sehr wahrscheinlicht dadrüber noch irgendwas stehen mit mysql_fetch_assoc(); was die erste Zeile schon ausliest. Nimm das einfach weg.

Und der include klappt vielleicht nicht weil du die while-Schleife nicht geschlossen hast und zwei mal hintereinander <?PHP schrieben hast.
 
Okay, den Fehler das er den ersten Eintrag rauswirft konnte ich dank deinem Hinweis schonmal ausmerzen.

Hab jetzt den Code mal so geschrieben:
Code:
    <?php while ($row_xxx = mysql_fetch_assoc($xxx)) { 
    echo "<a class=\"xxx\" href=\"index.php?link=auswahl&id=$row_xxx[id]\">";
	echo htmlentities($row_xxx[motivname], ENT_QUOTES, 'UTF-8');
	echo "</a><img src=\"images/zeile.jpg\" border=\"0\" /><br />";
	if($_GET['id']){ include("navi_kat.php") ; };
	} ?>

Aber das Problem bleibt. Wenn ich in der Navi zB das zweitoberste Motiv anklicke bleibt der Motivname von Motiv 1 stehen, darunter dann die includierte navi_kat.php, und darunter dann immer noch folgende Fehlermeldung (alle weiteren Motivnamen werden gar nicht mehr angezeigt):
Warning: mysql_fetch_assoc(): 8 is not a valid MySQL result resource in E:\xampp\htdocs\XXX\navi.php on line 37

So, line 37 ist das hier: <?php while ($row_xxx = mysql_fetch_assoc($xxx)) {

Fies gesagt steh ich immer noch am Start, und bin nicht vorwärts gekommen.
 
In den allermeisten Fällen liegt der Fehler genau in dem was die Meldung sagt: "not a valid resource", oder zu deutsch, $xxx enthält einen Tippfehler oder sonstwie ungültigen Feldnamen.

Was ich gerne mache um solche Fehler zu finden ist:

Mit echo oder print $xxx anzeigen lassen.
Via copy&paste das Ganze in PHPMyAdmin kopieren, und dort ausführen.
Das sollte genausowenig gehen, aber dir dafür anzeigen, wo genau der Fehler liegt.
 
Hi,

$xxx ausgeben zu lassen, bringt hier nichts, da es sich nicht um den String mit der fehlgeschlagenen Abfrage handelt. Den bräuchten wir aber.

LG
 
Er greift ja in der kompletten Datei auf ein und dieselbe Tabelle in der Datenbank zurück. Die Anzeige für die Felder (motivname, id etc) t auch einwandfrei.

Ich glaube der stolpert da immer über das if($_GET['id']). Denn es gibt einmal das Feld id in der Datenbank, und einmal das id als URL-Variable.
Könnte es daran liegen?
 
Hi,

$xxx ausgeben zu lassen, bringt hier nichts, da es sich nicht um den String mit der fehlgeschlagenen Abfrage handelt. Den bräuchten wir aber.

LG

Also ich poste jetzt einfach mal den Aufbau der Datei, in komplett.
PHP:
<?php require_once('Connections/XXX.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_XXX);
$query_XXX = "SELECT * FROM tabelle ORDER BY position ASC";
$XXX = mysql_query($query_XXX) or die(mysql_error());
$totalRows_XXX = mysql_num_rows($XXX);
?>
    <?php while ($row_XXX = mysql_fetch_assoc($XXX)) { 
    echo "<a class=\"xxx\" href=\"index.php?link=auswahl&mid=$row_XXX[id]\">";
	echo htmlentities($row_XXX[motivname], ENT_QUOTES, 'UTF-8');
	echo "</a><img src=\"images/zeile.jpg\" border=\"0\" /><br />";
	if($_GET['id']){ include("navi_kat.php") ; };
	} ?>
Die Zeile:
$row_XXX = mysql_fetch_assoc($XXX)
stand auch nochmal bei $query_... etc., nur musste ich die da rausnehmen damit der erste Eintrag nicht flöten geht.
 
Hi,

ich kann an der Stelle keinen Fehler sehen. Wenn die Abfrage fehlgeschlagen wäre, hätte das Script ja durch das "or die(..." abbrechen müssen. Du stellst nicht zufällig innerhalb der Schleife etwas mit der Variablen $XXX an, z.B. in navi_kat.php?

LG
 
Zurück