Schleifen & statische HTML Tabelle

bosstone

Grünschnabel
Hi Leute,

ich versuche den Sitzplan eines Theaters aus einer MySQL Tabelle auszulesen und dann in eine "statische" HTML Tabelle einzutragen (d.h. jede Zelle repräsentiert einen Sitzplatz) - leider habe ich mein Problem mit der Schleife, denn nur der letzte Eintrag wird korrekt angezeigt:

PHP:
<?
	mysql_select_db($database, $connect);
	$tablename = "seat";
	$sql = "SELECT * FROM $tablename";
	$result = mysql_query($sql,$connect);
	$data = mysql_fetch_array($result); 

?>

<? while ($daten = mysql_fetch_assoc($result)) { ?>

</td>
    <td><label>
      <div align="center"></label>
        <label>
  <div align="center"></div>
        </label>
      </form>
    <label>      </label></td>
  </tr>
  <tr>
    <td><table width="500" border="0" cellspacing="0">
        <tr>
          <td bgcolor="#003366"><div align="center"><span class="Stil1">1</span></div></td>
          <td width="20" bgcolor="#003366"><span class="Stil1"></span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">01</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">02</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">03</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">04</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">05</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">06</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">07</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">08</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">09</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">10</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">11</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">12</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">13</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">14</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">15</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">16</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1"></span></td>
          <td bgcolor="#003366"><div align="center"><span class="Stil1">1</span></div></td>
        </tr>
        <tr>
          <td bgcolor="#003366"><div align="center" class="Stil1">2</div>          </td>
          <td width="20">&nbsp;</td>
          <td width="20"><? if ($daten[row] == '1' and $daten[seat] == '10' ) {
		  						echo "<img src='images/5_90.png' width='13' height='13'>";
								} else {
							    echo "<img src='images/3_90.png' width='13' height='13'>";
		  } ?></td>
          <td width="20"><? if ($daten[row] == '1' and $daten[seat] == '11') {
		  						echo "<img src='images/5_90.png' width='13' height='13'>";
								} else {
							    echo "<img src='images/3_90.png' width='13' height='13'>";
								}
							  ?></td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td bgcolor="#003366"><div align="center" class="Stil1">2</div>          </td>
        </tr>
<? } ?>

Im Grunde soll es so aussehen, dass wenn row == 1 & seat == 1 in der Tabelle steht (row|seat|id|datum|occupied) dann ist der platz reserviert und wird rot angezeigt - wenn diese Bedingung nicht erfüllt wird, dann ist der Platz frei und wird demnach grün angezeigt.

Der Grund warum es nicht funktioniert ist mir klar - ich überschreibe mit meinem Code die Variable - die Lösung ist mir ganz und garnicht klar, deshalb bitte ich um Eure Mithilfe...

So nebenbei - es handelt sich hier um kein kommerzielles Projekt - ich knacke gerne rätsel und mache meinen Freunden gerne eine Freude... :-)

Vielen Dank für Eure Mühe und Hilfe,

Stefan
 
Hallo,

du musst deine Tabelle dynamisch erweitern, dass heißt also mit jedem Schleifendurchgang muss eine weitere Zeile über PHP erstellt werden, die dann mit Daten gefüllt wird. PHP kümmert sich nur um code, der auch im PHP-Bereich steht, dass heißt also deinen reinen HTML-code in der PHP-Schleife interessiert PHP nicht.

Gruß
cesupa
 
Der Grund warum es nicht funktioniert ist mir klar - ich überschreibe mit meinem Code die Variable - die Lösung ist mir ganz und garnicht klar, deshalb bitte ich um Eure Mithilfe...

Axo? Es ist dir klar? :) Welche Variablen überschreibst du denn? Sehe da recht wenig... Verstehe irgendwie dein Problem nicht. :confused: Bitte näher/besser beschreiben.

du musst deine Tabelle dynamisch erweitern, dass heißt also mit jedem Schleifendurchgang muss eine weitere Zeile über PHP erstellt werden, die dann mit Daten gefüllt wird. PHP kümmert sich nur um code, der auch im PHP-Bereich steht, dass heißt also deinen reinen HTML-code in der PHP-Schleife interessiert PHP nicht.

Und genauso ist das eben nicht. Der läuft ganz normal die Schleife durch. Was mir aber schon gleich auffällt: HTML in der Schleife fängt mit </td> an und endet mit </tr> => Fehlerpotential bei der Darstellung.

PS: Bei den Keys der Arrays würde ich lieber keine Konstanten benutzen, sondern Strings.

dmx
 
Zuletzt bearbeitet:
@holzmensch:

Ich meinte die Variablen: $daten[row] == '1' and $daten[seat] == '10'

also was passiert?

ich habe eine HTML Tabelle in der ich pro Zelle (insgesamt 20 reihen & 15 sitzplätze pro Reihe) einen Sitzplatz anzeigen möchte.

Nun habe ich folgendes gemacht:

ich habe in 4 zellen meinen code
PHP:
<? if ($daten[row] == '1' and $daten[seat] == '10' ) {
		  						echo "<img src='images/5_90.png' width='13' height='13'>";
								} else {
							    echo "<img src='images/3_90.png' width='13' height='13'>";
		  } ?>

geschrieben (natürlich jeweils row & seat angepasst.

1/10
1/11
10/10
10/11

In meine Tabelle habe ich nun row:10/seat:10, row:10/seat:11 eingetragen, d.h. laut meinem code sollte nun bei 10/10 & 10/11 images/5_90.png angezeigt werden - tut es aber nur beim letzten, d.h. bei 10/11 -> daraus folge ich, dass ich meine variablen entweder überschreibe, oder einfach die schleife falsch setze...

Vielen Dank für Deine Mühe...

lg,

Stefan
 
Ok, nun habe ich deinen Plan und den Fehler durchschaut. ;-)

Aussehen müsste es so:

PHP:
<?
    mysql_select_db($database, $connect);
    $tablename = "seat";
    $sql = "SELECT * FROM $tablename";
    $result = mysql_query($sql,$connect);
    $data = mysql_fetch_array($result); 

?>

</td>
    <td><label>
      <div align="center"></label>
        <label>
  <div align="center"></div>
        </label>
      </form>
    <label>      </label></td>
  </tr>
  <tr>
    <td><table width="500" border="0" cellspacing="0">
        <tr>
          <td bgcolor="#003366"><div align="center"><span class="Stil1">1</span></div></td>
          <td width="20" bgcolor="#003366"><span class="Stil1"></span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">01</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">02</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">03</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">04</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">05</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">06</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">07</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">08</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">09</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">10</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">11</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">12</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">13</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">14</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">15</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1">16</span></td>
          <td width="20" bgcolor="#003366"><span class="Stil1"></span></td>
          <td bgcolor="#003366"><div align="center"><span class="Stil1">1</span></div></td>
        </tr>
        <tr>
          <td bgcolor="#003366"><div align="center" class="Stil1">2</div>          </td>
          <td width="20">&nbsp;</td>
          <? while ($daten = mysql_fetch_assoc($result)) {  # <-- schleifeninhalt anfang
          		print "<td width='20'><img src='images/";
          		if( $daten["row"]==1 AND ($daten["seat"]==10 OR $daten["seat"]==11) ) # <-- bedingung
          			print "5";
          		else
          			print "3";
          		print "_90.png' width='13' height='13'></td>";
          } # <-- schleifeninhalt zuende ?>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td width="20">&nbsp;</td>
          <td bgcolor="#003366"><div align="center" class="Stil1">2</div>          </td>
        </tr>

Generell würde ich auf deiner Stelle ein paar Übungen mit den Schleifen machen, denn wie mir scheint hast du es noch nciht so ganz verinnerlicht. Zudem scheint mir auch der Tabellenaufbau eher suboptimal. ;)

holzmensch
 
@holzmensch

da bist Du nicht auf dem Holzweg - mit Schleifen habe ich tatsächlich meine Probleme... und wie es meist ist - hat man das Problem in einer Sprache, dann in allen anderen auch... :-)

Egal ob Applescript, Objective-C oder hier in PHP - so ganz durchschaue ich das System nicht... Aber wie heißt es so schön: Übung macht den Meister...

Vielen Dank für Deine Mühe und Deine Hilfe - ob es funktioniert sag ich Dir heute in der Früh... :-)

lg,

Stefan
 
@holzmensch,

sorry, aber ich blicke nicht durch:

PHP:
while ($daten = mysql_fetch_assoc($result)) {  # <-- schleifeninhalt anfang
                  print "<td width='20'><img src='images/";
                  if( $daten["row"]==1 AND ($daten["seat"]==10 OR $daten["seat"]==11) ) # <-- bedingung
                      print "5";
                  else
                      print "3";
                  print "_90.png' width='13' height='13'></td>";
          } # <-- schleifeninhalt zuende ?>

ich dachte, ich müßte eine Schleife über die auszufüllende Tabelle (HTML) legen - Dieser Code gibt mir das jpg einmal aus - und zwar dann, wenn row==1 and (seat==10 && seat==11) - besser wäre es natürlich, wenn es so funktionieren würde:

Schleife ($daten[seat]==1, $daten[row]==1) über die ganze Tabelle - ist ein solcher Eintrag in der Tabelle (d.h. aus dem SQL Statement) und ist der jeweilige Eintrag wahr, dann ein grünes Image in der jeweiligen Zelle - herausgefunden wird diese Bedingung mittels:

PHP:
<?
		  			if ($daten[row] == '1' and $daten[seat] == '11') {
		  						echo "<img src='images/5_90.png' width='13' height='13'>";
								} else {
							    echo "<img src='images/3_90.png' width='13' height='13'>";
		  						}
		 			 } ?>

und dann weiter mit $daten[seat] == 2, $daten[row]==1,... und wieder der check ob war oder falsch...

*smile* aber auch dieses geheimnis werde ich knacken... :-)

oder könnte man die ganze tabelle nicht trotzdem dynamisch aber mit fixen breiten/höhen machen?

Vielen Dank und lg,

Stefan
 
ich dachte, ich müßte eine Schleife über die auszufüllende Tabelle (HTML) legen

Generell "legt" man nicht "über" eine Tabelle eine Schleife, sowas gibts nicht. Wie gesagt, guck dir am besten ein paar Tutorials zu Schleifen an.
ZB: http://tut.php-quake.net/schleifen.html

Übe an einfachen Sachen (wobei diese Sitzplatz-Sache auch nicht gerade komplex ist, aber durch das ganze HTML verlierst du an Überblick und denkst dir ein paar Sachen nurmal so selber -> "Schleife über eine Tabelle legen" :) ) und dann klappt das auch mit dem Verständnis. ;)

holzmensch
 
Zurück