mySQL Abfrage "verliert" Variable

berlinkw

Mitglied
Hallo
Versuche jetzt schon eine weile das Problem zu finden. Ohne erfolg.
Die Schleife läuft genau einmal durch und dann hängt sie sich auf.
Mit echo hab ich mir die SELECT-Anweisung mal anzeigen lassen.
Und dabei gesehen das nach dem zweiten durchlauf der Wert von $rubrik leer ist.
Dadurch sieht die Select-Anweisung dann so aus

SELECT id,rubrik,name,brandklasse,preis FROM floescher WHERE rubrik = LIMIT 0,4

Es sollte aber so sein

SELECT id,rubrik,name,brandklasse,preis FROM floescher WHERE rubrik = Pulverloescher LIMIT 0,4

Wenn ich die Werte für Rubrik direkt eintrage geht es.

Woran kann das liegen?

Hier noch der Code.

PHP:
include("mysql.inc");
  $anzahl2 = "SELECT rubrik,u_rubrik,bilder1,count(*) AS anzahl FROM floescher WHERE bilder1 <> '' AND rubrik = $rubrik GROUP BY bilder1 ORDER BY id";
  echo $anzahl2;
  $erg2 = mysql_query($anzahl2);
  while(list($rubrik,$u_rubrik,$bilder1,$anzahl) = mysql_fetch_row($erg2))
  {
  	$zahl = $anzahl+2;
  	echo '<div align="center">';
  	echo '<table class="table">';
 	echo '<tr>';
  	echo '<td align="center" class="td" rowspan="'.$zahl.'" width="80px">';
        echo '<img src="thumb.php?image='.$bilder1.'&x=50&y=100">';
        echo '</td>';
  	echo '<th class="td" colspan="4" width="500px">'.$u_rubrik.'</th>';
	echo '</tr>';
        echo '<tr>';
        echo '<th class="td" width="200px">Name</th>';
        echo '<th class="td" width="80px">Brandklassen</th>';
        echo '<th class="td" width="80px">Preis</th>';
        echo '<th class="td" width="80px">Details</th></tr>';
    $x = $anzahl;
    while (0 < $x)
    {
      if(isset($limit1))
      {
      	$limit1 += $limit2;
      }
      else
      {
      	$limit1 = 0;
      }
      $limit2 = $anzahl;
          echo 'rubrik2= '.$rubrik.'<br>'; //Hier ist der Wert nur beim ertsen Durchlauf drinn
        	$abfrage = "SELECT id,rubrik,name,brandklasse,preis FROM floescher WHERE rubrik = $rubrik LIMIT ".$limit1.",".$limit2."";
          echo $abfrage;
          $erg = mysql_query($abfrage);
          while(list($id,$rubrik,$name,$brandklasse,$preis) = mysql_fetch_row($erg))
          {
            echo '<tr><td class="td">'.$name.'</td>';
            echo '<td class="td">'.$brandklasse.'</td>';
            echo '<td class="td">'.$preis.'</td>';
            echo '<td class="td"><a href="detail.php?id='.$id.'&tabelle=pulver" target="_neu">Detail</a></td></tr>';
           $x--;
          }
     }
		echo '</table><br>';
    echo '</div>';
  }
 
Ich versteh zwar deinen Aufwand nicht, die Rückgabe-Daten direkt in Variablen zu schreiben anstatt ein Array zu verwenden, aber naja, jedem das sein ;)

Also Rubrik kann nicht einfach so "nichts" sein, da kommt wohl ein NULL zurück.Setz mal den 1. Query in phpMyAdmin ab und schau dir das Ergebnis an!
 
Man sollte wissen, WIE du dir Variable $rubrik übergibst.. denn es liegt siche rnur an der Übergabe
 
ich weiss jetzt nicht genau, wie php das mit den sichtbarkeiten der variablen händelt, aber mal angenommen, es hat nur globale sichtbarkeiten, dann würdest du in der zeile
PHP:
while(list($id,$rubrik,$name,$brandklasse,$preis) = mysql_fetch_row($erg))
in der 3. schleife die variable rubrik überschreiben
 
Hallo
Beide SQL-Query hab ich in phpMyAdmin getestet. Das ging Problemlos.
Im ersten werden mir die Daten genau wie erwünscht Gruppiert.

HIer noch mal das Gesmmte Script

PHP:
  <?php
  error_reporting(E_ALL);
  $titel = $_GET['link2'];
  switch($titel)
  {
    case "pulver":
      $titel1 = "Pulverlöscher";
      $rubrik = "'Pulverloescher'";
      break;
    case "wasser";
      $titel1 = "Wasserlöscher";
      $rubrik1 = "'Wasserloescher'";
      break;
  }
  echo '<h2>'.$titel1.'</h2>';
  echo '</div>';
  include("mysql.inc");
  $anzahl2 = "SELECT rubrik,u_rubrik,bilder1,count(*) AS anzahl FROM floescher WHERE bilder1 <> '' AND rubrik = $rubrik GROUP BY bilder1 ORDER BY id";
  echo 'rubrik1= '.$rubrik.'<br>';
  echo $anzahl2;
  $erg2 = mysql_query($anzahl2);
  while(list($rubrik,$u_rubrik,$bilder1,$anzahl) = mysql_fetch_row($erg2))
  {
    $zahl = $anzahl+2;
    echo '<div align="center">';
    echo '<table class="table">';
    echo '<tr>';
    echo '<td align="center" class="td" rowspan="'.$zahl.'" width="80px">';
    echo '<img src="thumb.php?image='.$bilder1.'&x=50&y=100">';
    echo '</td>';
    echo '<th class="td" colspan="4" width="500px">'.$u_rubrik.'</th>';
    echo '</tr>';
    echo '<tr>';
    echo '<th class="td" width="200px">Name</th>';
    echo '<th class="td" width="80px">Brandklassen</th>';
    echo '<th class="td" width="80px">Preis</th>';
    echo '<th class="td" width="80px">Details</th></tr>';
    $x = $anzahl;
    while (0 < $x)
    {
      if(isset($limit1))
      {
      	$limit1 += $limit2;
      }
      else
      {
      	$limit1 = 0;
      }
      $limit2 = $anzahl;
      $rubrik = "'Pulverloescher'";  // HIer hab den Wert zum Testen mal direkt eingegeben //
      $abfrage = "SELECT id,rubrik,name,brandklasse,preis FROM floescher WHERE rubrik = $rubrik LIMIT ".$limit1.",".$limit2."";
      echo $abfrage;
          $erg = mysql_query($abfrage);
          while(list($id,$rubrik,$name,$brandklasse,$preis) = mysql_fetch_row($erg))
          {
            echo '<tr><td class="td">'.$name.'</td>';
            echo '<td class="td">'.$brandklasse.'</td>';
            echo '<td class="td">'.$preis.'</td>';
            echo '<td class="td"><a href="detail.php?id='.$id.'&tabelle=pulver" target="_neu">Detail</a></td></tr>';
        		$x--;
          }
     }
		echo '</table><br>';
    echo '</div>';
  }
  ?>

mfg berlinkw
 
Ähhhmmm ...

was 'n das Für ne Abfrage: ".... WHERE bilder1 <> '' .... " ? Kleiner oder Grösser als ne leere Zeichenkette ? *augenroll* ...entweder, Du suchst nach einem Null-Wert oder eben nicht, das geht dann aber etwas anders: "WHERE bilder1 NOT NULL" oder "WHERE bilder1 NULL" sollte da besser sein *denk* ...beides Zusammen macht dann doch keinen rechten Sinn

LG
Andy
 
Bau doch spassenshalber deine while-schleife mal um:
PHP:
while( $ret = mysql_fetch_assoc($erg2) ) {
    $zahl = $ret['anzahl']+2; 
    echo '<div align="center">'; 
    echo '<table class="table">'; 
    echo '<tr>'; 
    echo '<td align="center" class="td" rowspan="'.$zahl.'" width="80px">'; 
    echo '<img src="thumb.php?image='.$ret['bilder1'].'&x=50&y=100">'; 
    echo '</td>'; 
    echo '<th class="td" colspan="4" width="500px">'.$ret['u_rubrik'].'</th>'; 
    echo '</tr>'; 
    echo '<tr>'; 
    echo '<th class="td" width="200px">Name</th>'; 
    echo '<th class="td" width="80px">Brandklassen</th>'; 
    echo '<th class="td" width="80px">Preis</th>'; 
    echo '<th class="td" width="80px">Details</th></tr>'; 
    $x = $anzahl; 

// ......weiterer Code
}

Ich vermute, dass die list()-Funktion das Problem ist
 
Hier ist übrigends noch ein Fehler drin, du hast case "wasser"; geschrieben gehabt. also ; statt :
des weiten solltest du auch eine default bedinung setzen, falles etwas ungültiges im GET steht. Des weiteren nennst du die Variable bei wasser auch $rubrik1 und nicht $rubrik

PHP:
  switch($titel)
  {
    case "pulver":
      $titel1 = "Pulverlöscher";
      $rubrik = "'Pulverloescher'";
      break;
    case "wasser":
      $titel1 = "Wasserlöscher";
      $rubrik = "'Wasserloescher'";
      break;
    default:
      $titel1 = "Pulverlöscher";
      $rubrik = "'Pulverloescher'";   
  }
 
hallo
@andy72
Hab das mal eingebaut leider kommt dann die Fehlermeldung: "Notice: Undefined variable: anzahl in.. Zeile 71. "
Zeile 71 ist hier $x = $anzahl;
Die Variable $anzahl kommt ja aus dem SQL-Query.
Jetzt bin ich noch mehr Verwirrt :)

@engelb
Der case Bereich ist noch nicht fertig gewesen und durch einiges an hin und her kopieren hat sich da bei mir der Fehlerteufel eingeschlichen.
Trotzdem Danke für den Hinweis.

mfg berlinkw
 
Zurück