html checkboxen mit shell auswerten

Antworten
Nachricht
Autor
Rumpff

html checkboxen mit shell auswerten

#1 Beitrag von Rumpff » 06. Mär 2009 14:19

Hallo,

ich habe eine einfache HTML Form, die ich gerne mit sh (oder auch bash) auswerten würde. Im Prinzip hätte ich einfach gerne eine Liste der Fabrikate, die ausgewählt wurden, in einer extra Datei und natürlich vorher die Auswertung, ob "Abbrechen" (=www.google.de) oder "Senden" (=auswerten.sh) betätigt werden.

Code: Alles auswählen

<form action="auswerten.sh" method="post">
<input type="checkbox" name="Fabrikat"  value="Audi ">Audi<br>
<input type="checkbox" name="Fabrikat" value="BMW">BMW<br>
<input type="checkbox" name="Fabrikat" value="Toyotoa">Toyota<br>
<input type="input type="submit" value="Senden"><input type="reset" value="Abbrechen">
</form>
Leider ist alles recht Java/php lastig zu diesem Thema. Ich bin mir sicher, das geht auch mit sh. Falls jemand also eine Lösung oder einen Link hat, wäre ich sehr dankbar

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 06. Mär 2009 20:12

Per CGI bekommst du die Daten hinter der Basis-URL in der Variable QUERY_STRING übermittelt, wenn du die Methode "get" nimmst. Bei "post" bekommst du die Daten per Standardeingabe. Das Ergebnis gibst du auf die Standardausgabe aus.

Mach mal ein supersimples CGI in bash:

Code: Alles auswählen

#!/bin/bash
printf "Content-Type&#58; text/html\n\n"
printf "<html><head></head><body>"
printf "<h1>env</h1><p><code>"
env
printf "</code></p><hr>"
printf "<h1>stdin</h1><p><code>"
/bin/cat
printf "</code></p>"
printf "</body></html>"
Das Skript oben schreibt dir nur die Variableninhalte und den Inhalt der Standardeingabe in einen HTML-Rahmen und gibt den dann mit passendem HTTP-Header zurück.
Von dieser Basis aus kannst du dann mit Shell-Mitteln und externen Hilfsprogrammen (awk,sed etc.) erweitern.

Weitere Vorschläge hab' ich durch Googlen mit "CGI shell" gefunden. Z.B.
http://www.yolinux.com/TUTORIALS/LinuxT ... cript.html
http://www.mail-archive.com/mathopd%40m ... 00234.html

Dein konkretes Problem erfordert es, den QUERY_STRING in die einzelnen Zuweisungen auseinanderzuschnippeln, was in der Shell selbst nicht ganz trivial ist. IFS auf & zu setzen, dann auf = sollte helfen, aber evtl. ist es besser, gleich den ganzen String in awk reinzuwerfen. Weiteres Problem: Sonderzeichenbehandlung. Beispielsweise wird das Leerzeichen vom Browser entweder als + oder als %20 kodiert, und das + als %2B oder %2b usw. usw.

Oder man nimmt gleich eine Skriptsprache, die für Stringmanipulation gedacht ist, also Tcl oder Perl. Da gibt es dann auch gleich passende Bibliotheken, die einem die Arbeit abnehmen die ganzen Spezialitäten selbst zu entwickeln. Vor allem sind die Bibliotheken sicher besser getestet als das, was man selbst macht.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Rumpff

#3 Beitrag von Rumpff » 09. Mär 2009 18:01

Ich glaube, es geht vie einfacher:

Code: Alles auswählen

#!/bin/sh

echo "Content-type&#58; text/plain"
echo ""

read HTMLPOST  #<- den brauchte ich wohl, da steht alles drin

INPUT=`echo "$&#123;HTMLPOST&#125;" | sed 's/\&//g' | sed 's/LINK\=/\&#58;/g' | sed 's/+/\ /g'`

echo "Die Argumentliste&#58; $HTMLPOST"
echo "Das Ergebnis lautet&#58; $INPUT"

exit 0
Allerdings erstmal nur an einem simplen Beispiel getestet, sah aber schon recht vielversprechend aus.

Benutzeravatar
Janka
Beiträge: 3581
Registriert: 11. Feb 2006 19:10

#4 Beitrag von Janka » 09. Mär 2009 22:37

read HTMLPOST liest einfach die Standardeingabe in die Variable HTMLPOST ein.

Dieses Skript macht im Prinzip genau das, was ich geschrieben habe, also den String an den & in einzelne Parameter aufspalten und dann nach einem bestimmten Parameter suchen, dann das + durch Leerzeichen ersetzen und das Ergebnis dann nach INPUT umspeichern. Nur halt mit sed statt awk oder IFS.

Was das Skript nicht macht, ist eine allgemeine Sonderzeichenbehandlung. Und genau da wird es bei diesem Ansatz kompliziert.

Aber spiele ruhig mal damit. Zum Lernen taugt es allemal.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten