Galerie Problem

nexdh

Mitglied
hi,
ich hab ein problem und zwar ich hab mir eine Bildergalerie gemacht und jetzt will ich die Bilder per Jahr auswählen also:
HTML:
<form action="index.php" method="post">
<select onChange="this.form.submit()" name="jahr">
<option value="alle">Alle</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
</form>

Diese Daten zu den Bildern sind in einer Datenbank gespeichert mit Jahr.
Ich kann sie auch aus der Datenbank auslesen für des jeweilige Jahr:

PHP:
$sql = "SELECT id, jahr FROM bilder WHERE jahr=$jahr ORDER BY id DESC";

Jetzt mein Problem, wie kann ich die Bilder alle holen und anzeigen lassen, also nicht mit dem jahr, sondern aus allen jahren (siehe Dropdown Menü "Alle").
Da komm ich ned drauf, wie ich des machen soll !

Danke
nex
 
PHP:
<?
if($_POST['jahr'] == 'alle') {
  $sql = "SELECT * FROM bilder ORDER BY id DESC";
}
?>
Dann einfach mittels while-schleife anzeigen lassen.
Manchmal ist es so simpel, da übersieht man es halt :D
 
Nur noch ne Info nebenbei:

Falls du den Code wirklich so wie er hier im Noard steht in deinem Script hast, hast du ein verdammt großes Sicherheitsproblem.

Wenn jemand nun einfach ne bisschen andere HTML-Seite baut und dort einen form mit deiner Seite als target macht, kann er frei auswählen, was in dem SQL-Syntax bei year eingesetzt wird. Er kann somit (fast) eine eigene DB-Abfrage formulieren und so beispielsweise an sensible Daten kommen oder auch einfach deine komplette DB löschen.


Als erstes solltes du in der php.ini register_globals auf 0 setzen und stattdessen $_GET bzw. $_POST verwenden.

Dann solltest du noch unbedingt die Variablen, die du im SQL-String verwendest, escapen.

Also schreibst du anstelle von
PHP:
$sql = "SELECT id, jahr FROM bilder WHERE jahr=$jahr ORDER BY id DESC";
Eben
PHP:
$jahr = $_POST['jahr'];
$sql = "SELECT id, jahr FROM bilder WHERE jahr='$jahr' ORDER BY id DESC";


swEEper
 
da hat sweeper wohl recht. ganz gleich ob register_globals auf on oder off ist solltest du immer $_GET oder $_POST verwenden, da so sicher gestellt, dass das skript auch da , wo register globals auf 0 ist - du bist dann davon unabhängig. Das sicherheitsproblem ist die zweite sache, da hat dich sweeper drauf hingewiesen.
 
Nur nebenbei: escapen ist folgendes:
PHP:
$sql = "SELECT id, jahr FROM bilder WHERE jahr='".mysql_escape_string($jahr)."' ORDER BY id DESC";

siehe auch:
--> [phpf]mysql_escape_string[/phpf]

Sven
 
Zurück