fredderick monch: PHP MySQL Tabellenproblem

Hallo, ich habe wahrscheinlich ein Denkproblem.

Ich wollte die Webseite von meinen Eltern updaten und der Probe und Übung halber auf MySQL umstellen. Klappt soweit auch alles ganz toll, aber ich bin mit dem Code nicht so ganz zufrieden

und zwar liegt meine Table namens "wein_sorte" wie folgt vor:

idweine	wein_sorte	wein_id	wein_groesse	wein_name	wein_beschreibung	wein_preis	wein_special	zuletzt_bearbeitet  

und wird so von PHP verarbeitet:

$weinsorte = 'Trockene Rotweine 0,75l';  
// sending query  
$result = mysql_query("SELECT * FROM {$table} WHERE $sub = 'Trockene Rotweine 0,75l'");  
if (!$result) {  
    die("Query to show fields from table failed");  
}  
  
echo '<tr><td colspan="4" align="left" valign="top" width="430"><a name="Anchor-Trocken-63692"></a><span class="content2">' . $weinsorte . '<br></span><br></td></tr>';  
while($row = mysql_fetch_array($result))  
  {  
	echo '<tr>';  
	echo '<td class="pl" align="left" valign="top" width="50">' . $row['wein_id'] . ' </td>';  
	echo '<td class="pl" align="left" valign="top" width="50"><!--2007--> </td>';  
	echo '<td class="pl" align="left" valign="top" width="280"><span class="content2"><font color="black">' . $row['wein_name'] . '<br>';  
	echo '</font>';	  
	echo '</span>' . $row['wein_beschreibung'];  
	echo '<br>';  
	echo '</td>';  
	echo '<td class="pl" align="right" valign="top" width="50">' . $row['wein_preis'] . '</td>';  
	echo '</tr>';  
  }  
  
$weinsorte = 'Feinherbe Rotweine 1l';  
// sending query  
$result = mysql_query("SELECT * FROM {$table} WHERE $sub = 'Feinherbe Rotweine 1l'");  
if (!$result) {  
    die("Query to show fields from table failed");  
}  
  
echo '<tr><td colspan="4" align="left" valign="top" width="430"><a name="Anchor-Trocken-63692"></a><span class="content2">' . $weinsorte . '<br></span><br></td></tr>';  
while($row = mysql_fetch_array($result))  
  {  
	echo '<tr>';  
	echo '<td class="pl" align="left" valign="top" width="50">' . $row['wein_id'] . ' </td>';  
	echo '<td class="pl" align="left" valign="top" width="50"><!--2007--> </td>';  
	echo '<td class="pl" align="left" valign="top" width="280"><span class="content2"><font color="black">' . $row['wein_name'] . '<br>';  
	echo '</font>';	  
	echo '</span>' . $row['wein_beschreibung'];  
	echo '<br>';  
	echo '</td>';  
	echo '<td class="pl" align="right" valign="top" width="50">' . $row['wein_preis'] . '</td>';  
	echo '</tr>';  
  }  
  
$weinsorte = 'Feinherbe Rotweine 0,75l';  
// sending query  
$result = mysql_query("SELECT * FROM {$table} WHERE $sub = 'Feinherbe Rotweine 0,75l'");  
if (!$result) {  
    die("Query to show fields from table failed");  
}  
  
echo '<tr><td colspan="4" align="left" valign="top" width="430"><a name="Anchor-Trocken-63692"></a><span class="content2">' . $weinsorte . '<br></span><br></td></tr>';  
while($row = mysql_fetch_array($result))  
  {  
	echo '<tr>';  
	echo '<td class="pl" align="left" valign="top" width="50">' . $row['wein_id'] . ' </td>';  
	echo '<td class="pl" align="left" valign="top" width="50"><!--2007--> </td>';  
	echo '<td class="pl" align="left" valign="top" width="280"><span class="content2"><font color="black">' . $row['wein_name'] . '<br>';  
	echo '</font>';	  
	echo '</span>' . $row['wein_beschreibung'];  
	echo '<br>';  
	echo '</td>';  
	echo '<td class="pl" align="right" valign="top" width="50">' . $row['wein_preis'] . '</td>';  
	echo '</tr>';  
  }  
  
$weinsorte = 'Feinherbe Rotweine 1l';  
// sending query  
$result = mysql_query("SELECT * FROM {$table} WHERE $sub = 'Feinherbe Rotweine 1l'");  
if (!$result) {  
    die("Query to show fields from table failed");  
}  
  
echo '<tr><td colspan="4" align="left" valign="top" width="430"><a name="Anchor-Trocken-63692"></a><span class="content2">' . $weinsorte . '<br></span><br></td></tr>';  
while($row = mysql_fetch_array($result))  
  {  
	echo '<tr>';  
	echo '<td class="pl" align="left" valign="top" width="50">' . $row['wein_id'] . ' </td>';  
	echo '<td class="pl" align="left" valign="top" width="50"><!--2007--> </td>';  
	echo '<td class="pl" align="left" valign="top" width="280"><span class="content2"><font color="black">' . $row['wein_name'] . '<br>';  
	echo '</font>';	  
	echo '</span>' . $row['wein_beschreibung'];  
	echo '<br>';  
	echo '</td>';  
	echo '<td class="pl" align="right" valign="top" width="50">' . $row['wein_preis'] . '</td>';  
	echo '</tr>';  
  }

was im Endeffekt zwar wunderbar funktioniert, aber unglaublich hässlich ist. Jetzt ist meine Frage, wie ich das in PHP verbessern kann, dass ich nur einen Block habe und von da aus alles abgearbeitet wird oder ob ich meine SQL Datenbank (eher ungern, bin froh, dass das Teil endlich läuft und alles drin ist) neu schreiben muss. Sortiert wird wie im Code zu sehen ist nach der wein_sorte.

Vielen Dank schon im Voraus,
 Freddi

  1. dass ich nur einen Block habe und von da aus alles abgearbeitet wird....

    Genau dafür sind Funktionen da

    function bla($param0){  
    	print "$param0\n";  
    }  
      
    bla("sort0");  
    bla("sort1");  
    bla("sort2");  
    
    

    Natürlich kannst du dann auch noch die Parameter in ein Array stopfen und via foreach-Schleife die Funktion mit jedem Parameter aufrufen.

    Wenn dir die Reinfolge der Datensätze egal ist, bis auf das alle "Feinherbe Rotweine 1l" (und die anderen) jeweils zusammen stehen, kannst du auch deine Anfrage an die Datenbank abändern:
    SELECT * FROM $table ORDER BY $sub ASC
    Wobei du dann keine Funktion definieren müsstest, da eh alle Datensätze in einem Rutsch ausgegeben werden.
    Eine Kombination aus beiden Varianten würde dazu führen, dass du mit wenig Code viele unterschiedliche Ausgaben erzielen kannst (z.B. Suchfunktion), aber dazu mehr, wenn Interesse/Bedarf besteht ;)

    MfG
    bubble

    1. Was ich noch vergessen hab anzumerken:
      SELECT * FROM, * sollte man - wenn überhaupt - eigentlich nur für Testzwecke benutzen.

      MfG
      bubble

  2. Hallo zuück,

    Hallo, ich habe wahrscheinlich ein Denkproblem.

    Nun Kategorien würde ich an deiner stelle nicht so

    $weinsorte = 'Trockene Rotweine 0,75l';

    hartcodiert da reinschreiben. Eine extra Tabelle die die Kategorien verwaltet wäre m.E. bedeutend besser.

    Dann könnte man ein Auswahlmenü anbieten und danach die Weine selektieren. Wenn das multiple zulässt sogar mit mehreren Weinen. Die Kategorien IDs kannst Du dann z.B. mit SELECT ... WHERE weinkategorie IN(1,4,12) auswählen.

    Je nachdem was da draus mal werden soll kann man auch noch Auswahltabellen für Füllmengen, Jahrgang, Preis usw. anlegen. Daraus kann der Besucher dann seine Lieblingsweine bequem auswählen.

    Gruß Helmut