Moin Moin!
Gibt es eine bessere Möglichkeit, das Array zu übermitteln?
Vielleicht nicht besser, aber anders. Klarer Nachteil der Methode: Ohne Javascript funktioniert gar nichts, im Gegensatz zu Checkbuttons.
Ich gehe erstmal davon aus, dass jedes Bild eine numerische ID hat. Dann kannst Du mittels Array.join() (http://de.selfhtml.org/javascript/objekte/array.htm#join) die IDs der ausgewählten Bilder bei jeder Auswahländerung in ein Hidden-Feld schreiben, getrennt mit einem Zeichen Deiner Wahl, z.B. einem Komma. Auf dem Server zerlegst Du das Feld an Kommata und hast wieder ein Array, aus dem Du dann die gültigen IDs gerausfischst. (In Perl: my @a=grep { /^\d+$/ && isValidId($_) } split ',',param("arrayname");)
Solltest Du die Bilder per Namen ansprechen, geht das prinzipiell genauso. Du benötigst dann allerdings ein Trennzeichen, das garantiert nicht in den Namen vorkommt. ASCII NUL (0x00) wäre ein Kandidat für so ein Zeichen. Die Schwierigkeit hier ist die serverseitige Überprüfung der Bildnamen, um nicht versehentlich Dateien zu liefern, die man besser nicht ausgeliefert hätte. Man stelle sich ein Bild namens "../../../../etc/passwd" oder "../all-my-secret-passwords.php" vor.
Aber ich gehe mal fröhlich davon aus, dass Du dieses Problem entweder schon gelöst hast oder es Dir völlig egal ist. Falls nicht, ein kleiner Tipp: Stelle auf IDs um oder beschränke die für Namen erlaubten Zeichen (white list). Typisch für eine Whitelist-Prüfung wäre z.B. $filename=~/[1]+.(jpg|jpeg|gif|png)$/ or die "Don't try to hack my script";.
Warum keine Blacklist verbotener Zeichen? "Nenne alle problematischen Zeichen!" -- "Slash und Backslash" -- "Was ist mit dem Punkt?" -- "Harmlos" -- "Auch alleine oder zu zweit?" -- "OK, Slash, Backslash, Punkt." -- "Was ist mit dem Stern?" -- "Ooops, glob() übersehen. Stern ist auch nicht gut. Und Fragezeichen wohl auch nicht." Und so weiter. Es gibt noch wesentlich mehr problematische Zeichen. Und sie alle abzudecken ist schwieriger, als eine sehr strikte Liste erlaubter, nachweislich harmloser Zeichen zusammenzusammeln. Ein fehlendes Zeichen in der Blacklist und schon ist alles verloren. Ein fehlendes Zeichen in der Whitelist und der User nörgelt.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
a-z0-9._- ↩︎