Hallo Leute!
Ich habe einen Server zuhause stehen, an dem ein Gießroboter (per RS232)
angeschlossen ist.
Außerdem läuft auf dem Server (Apache-Server) ein von mir geschriebenes
CGI-Skript, welches bei einem bestimmten Übergabewert (z.b.
http://meine-seite.de/giessen.cgi?=1) das Gießen der Pflanze-1 bei
giessen.cgi?=2 das Gießen der Pflanze-2 usw. einleitet.
Sofern klappt das alles auch wunderbar, nur möchte ich das Übergeben
dieser Parameter verschlüsseln.
Ich habe es bereits so gemacht, dass ich durch klicken eines Buttons auf
einer HTML-Seite die jeweilige URL mit dem jeweiligen Wert ausführe.
-> Bei Klick auf Button-1: (http://meine-seite.de/giessen.cgi?=1 wird
ausgeführt).
Das Problem ist nur, dass jeder, der auf dieser Seite landet, mit der
rechten Maustaste -> Quellcode anzeigen; den Übergabeparameter sieht und
meine Pflanzen gießen kann so oft er mag^^
Gibts da eine Lösung?
Vielen Dank
ok, das wäre auch noch eine variante :)
das einzige Problem ist aber, dass User, die nur die Betriebsdaten
angezeigt bekommen wollen (z.B. FÜllstand des Wasserkanisters, Erde:
Feuchtigkeit usw) sich nicht anmelden brauchen.
Das heißt, dass Betriebsdaten von mir aus von ALLEN gesehen werden
können. Ich will nur nicht, dass jemand die Pumpen ein/ausschaltet.
Geht doch ganz einfach:
#Variante 1:
Einen Pseudozufallszahlengenerator in das CGI integrieren. Die aktuelle
Zyklusnummer (Anzahl Takte), damit man den aktuellen Registerzustand
berechnen kann.
Haken:
Du brauchst eine Blackbox, die dir den aktuellen Wert aus der
Zyklusnummer berechnet.
#Variante 2:
Du generierst eine Zufallszahl mit ca. 8 Stellen. Bastelst Dir eine
beliebige
Gleichung z.B. (Stelle1 + Stelle2) / (Stelle 3 - Stelle 4) ..... = X.
X wird zur Authentifizierung erwartet.
Vorteil: Ein taschenrechner (in jedem neuren Handy vorhanden) hat man
meistens zur Hand. Probieren geht nicht, da jedes Mal eine neue
Zufallszahl generiert wird.
Und eine dritte Variante ganz ohne Esoterik und Taschenrechner: Das
CGI-Skript dazu bringen, ein Formular anzuzeigen, in welches man ein
Passwort eingibt. Sicher ists dank SSL und wer was darf kannst du im
Skript festlegen.
Du brauchst ja nur eine zweite variable zu übergeben, welche als
Passwort dient. Ist sie nicht vorhanden (Passwort leer), zeigst Du
einfach den status an; ist das Passwort definiert und gültig, dann
kannst Du auch die Buttons fürs Pumpen etc. anzeigen.
Also...das sind ja schonmal wertvolle Tipps :) -> Danke erstmal!
Nun bin ich gerade leicht verwirrt. Ich benötige also erstmal ein vom
Apache erzeugtes Anmeldefeld mit Benutzername und Passwort.
Hergang: Ich geh auf die Seite http://meineseite.de/giessen.cgi
-> Jetzt zeigt er mir die Werte an, da ich dem "giessen.cgi" keinen Wert
übergeben habe. Auf der Seite steht jedoch ein Anmeldeforumlar, mit dem
ich die Benutzerdaten dem CGI-Skript übergebe. Nachdem ich dann auf OK
klicke sieht die URL wie folgt aus:
http://meineseite.de/giessen.cgi?=[benutzer]&Passwort=[passwort]
und schon habe ich das Problem, dass in der URL mein Benutzername und
mein Passwort steht.
Sorry blicks grad nicht so ganz.
Ja dann so:
Für die Anzeige (nur Anzeige implementiert + Link aufs geschützte cgi
fürs Giessen):
http://meineseite.de/giessen.cgi?=...
Fürs giessen (Anzeige und Giessvorgang implementiert):
http://meineseite.de/protected/giessen.cgi?=...
Das protected Unterverzeichnis kannst Du mit htaccess schützen und dann
hast nur Du darauf Zugriff.
Edit:
Ahhh jetzt weiß ich wie ihr meint. ich brauch ja im Prinzip nur das vom
im CGI-Skript erzeugte Anmeldeforumular IN CGI auswerten.
Das würde ja dann heißen, dass ich dem CGI-Skript einen Wert übergebe (=
Inhalt der Texbox) und dort dann in einer Variable abspeichere.
if variable = true -> zeige Button zum schalten der Pumpen.
if variable = 0 -> zeige nur die Ist-werte
meint ihr das so?
NEIN!!! Die Variable könnte ja wieder jeder Depp setzen.
Das mit dem Formular für ein Passwort war schon goldrichtig. Dass das
Passwort dann auch übertragen wird, kannst du nicht verhindern. Wenn du
allerdings das Formular mit method="POST" attributierst, landen die
Eingaben schonmal nicht in der Adresszeile.
Im Klartext werden sie aber immer noch übertragen. Und das ist piepegal,
wenn du das mit SSL anstellst :-)
PS: Auch bei HTACCESS werden Benutzer+Passwort im Klartext übertragen.
Das ist vollkommen normal und üblich. Wers richtig sicher braucht ->
SSL.
aber mmooooment, die Variable im CGI-Skript kann doch nicht jeder Depp
setzen, wenn ich sie z.B. in einer if-Anweisung abfrage?!
var = 188392276762 'das eigentliche Passwort
peter wrote:
> aber mmooooment, die Variable im CGI-Skript kann doch nicht jeder Depp> setzen, wenn ich sie z.B. in einer if-Anweisung abfrage?!
Jo, und? Kennt doch sonst keiner das genaue Passwort...
Probier mal: (symbolischer Code...)
Jaa genau das meinte ich ja, so hatte ich es ja vor, wie du geschrieben
hast (dein Codebeispiel) :-)
Ich habe nur deshalb das geschrieben
>aber mmooooment, die Variable im CGI-Skript kann doch nicht jeder Depp>setzen, wenn ich sie z.B. in einer if-Anweisung abfrage?!
weil du oben
>NEIN!!! Die Variable könnte ja wieder jeder Depp setzen.
geschrieben hast :)
Anscheinend haben wir aneinander vorbei geredet :)
Die Frage ist nur, wie kann ich im CGi-Skript den Inhalt einer Textbox
(welche ja Javascript ist) einer Variablen der CGI-Programmiersprache
(in meinem Falle C) übergeben.
Danke
peter wrote:
> weil du oben>>NEIN!!! Die Variable könnte ja wieder jeder Depp setzen.>> geschrieben hast :)> Anscheinend haben wir aneinander vorbei geredet :)
Das ist solange ok, wie du die Variable vernünftig prüfst. Eine Variable
auf '1' setzen, das kann jeder Depp, aber das Passwort kennst ja nur du.
> Die Frage ist nur, wie kann ich im CGi-Skript den Inhalt einer Textbox> (welche ja Javascript ist)
Ist er nicht, s.u.
> einer Variablen der CGI-Programmiersprache> (in meinem Falle C) übergeben.
Ist dein CGI-Skript tatsächlich in C? Dann such nach 'CGIC'.
Gut.
Jetzt muss ich aber trotzdem noch einiges wissen. Da ich meinen
Linux-Server vorerst abschaffen möchte und dafür ein altes Windows
XP-Laptop verwenden möchte, habe ich nun ein paar Fragen zur
CGI-Programmierung in C.
Ich habe das Skript nicht in "CGIC" sondern in normalem "C" für CGI
geschrieben. Da ich etch (auf dem Laptop) via PuttY ferngesteuert habe
und somit alles in der Konsole gemacht habe, weiß ich leider keinen
Befehl, mit dem man von Windows (Dev-C++ -> GCC) ein C-Programm in CGI
wandeln kann. in Linux wars glaub ich so:
> gcc -o /srv/cgi/programm.c /srv/cgi/programm.cgi
Wie mach ich das beim GCC unter Windows?
Als nächstes möchte ich mir einen Webserver auf diesem XP-Laptop
einrichten. Ich habe mich dafür für XAMPP entschieden.
Mehr möchte ich zunächst nicht machen. Erstmal eine einfache Seite
bauen, die dann auf dem "Webserver (XAMPP)" (XP-Laptop) läuft.
Vielen Dank!
Ok, die Frage mit dem Compilieren in Windows mit der Konsole hat sich
geklärt, funktioniert genauso wie unter Linux :-)
Nun muss ich nur noch wissen, wie ich mein XAMPP zu konfigurieren habe,
damit dieser CGI kann.
Um zu sehen, wie ich mein CGI-Skript geschrieben habe, hier ein Beispiel
unter folgendem Link:
http://openbook.galileocomputing.de/c_von_a_bis_z/c_026_008.htm#RxxobKap02600804002C761F0171E4
Danke!
peter wrote:
> Jetzt muss ich aber trotzdem noch einiges wissen. Da ich meinen> Linux-Server vorerst abschaffen möchte und dafür ein altes Windows> XP-Laptop verwenden möchte,
Schlechte Idee, meiner Meinung nach -- aber wie du möchtest.
> Ich habe das Skript nicht in "CGIC" sondern in normalem "C" für CGI> geschrieben.
Es gibt kein 'normales C für CGI', CGIC ist nur eine C-Bibltiothek, die
dir Argumente aus dem Datenrumpf (POST) oder der URL (GET) rauspopelt.
> Da ich etch (auf dem Laptop) via PuttY ferngesteuert habe> und somit alles in der Konsole gemacht habe, weiß ich leider keinen> Befehl, mit dem man von Windows (Dev-C++ -> GCC) ein C-Programm in CGI> wandeln kann.
Ein CGI-Programm ist ein normales Programm, da gibt es nichts
umzuwandeln.
> in Linux wars glaub ich so:>> > gcc -o /srv/cgi/programm.c /srv/cgi/programm.cgi
Glaub ich nicht... eher vertauscht.
> Wie mach ich das beim GCC unter Windows?
Genauso.
> Als nächstes möchte ich mir einen Webserver auf diesem XP-Laptop> einrichten. Ich habe mich dafür für XAMPP entschieden.
Wie schon eingangs gesagt -- wenn du mit Linux klarkommst, bleib dabei.
Mit XP holst du dir dann nur wieder Stress ins Haus -- never change a
running system.
Ansonsten ist XAMPP viel zu fett dazu, du brauchst weder Perl, noch
Mysql noch PHP. Und eigentlich auch keinen dicken Apache, mit lighttpd
wärst du sicher schneller fertig :-}
Ok.
Dann kann ich mir mal den lighttpd anschauen :)
Noch eine Frage. Ich habe jetzt die compilierte cgi-Datei in den Ordner
"C:\xampp\cgi-bin\test.cgi" kopiert.
Leider fordert er mich beim ausführen der URL auf, die Datei "test.cgi"
herunterzuladen.
Warum bekomme ich nicht die Seite angezeigt/das Skript zum laufen??
Danke
meinst du jetzt die Docu oder die httpd.conf?
Ich möchte, dass mein CGI-Skript mich nicht zum speichern auffordert,
sondern wie im Skript geschrieben steht, im Browser angezeigt wird :)
Das Problem ist nur, dass es das nicht macht. Unter Linux hatte ich
damals glaube ich das gleiche Problem, ich habe es durch "chmod 777"
gelöst. aber unter Windows???
Sitze nun seit mehr als 2 Stunden hier und habe ALLE erdenklichen
Möglichkeiten (von deinem Doku-Link bis hin zu Tipps aus diversen
Internetforen) durchgespielt.
Es klappt einfach NICHT!
Hat denn keiner von den Linux-Gurus einen Tipp?!
>Richtige Pfade eintragen... keine Rückstriche dabei verwenden
Ist es denn bei Windows entscheidend ob es ein "Back-Slash" oder ein
"Slash" ist, der z.B. "C:/xampp" bzw. "C:\xampp" voneinander trennt?
Content-Type im CGI-Skript setzen? Warum hat es dann vorher unter Linux
funktioniert?
Danke!
peter wrote:
>>Richtige Pfade eintragen... keine Rückstriche dabei verwenden>> Ist es denn bei Windows entscheidend ob es ein "Back-Slash" oder ein> "Slash" ist, der z.B. "C:/xampp" bzw. "C:\xampp" voneinander trennt?>> Content-Type im CGI-Skript setzen? Warum hat es dann vorher unter Linux> funktioniert?>> Danke!
Es kommt drauf an...
peter wrote:
> Ist es denn bei Windows entscheidend ob es ein "Back-Slash" oder ein> "Slash" ist, der z.B. "C:/xampp" bzw. "C:\xampp" voneinander trennt?
Bei Linux ist es entscheident. Bei Windows bin ich mir nicht sicher --
eigentlich dient der Rückstrich als Escape-Zeichen (\n -->
Zeilenumbruch).
Ich weiß auch nicht, was dann Vorrang hat, wenn man für sein
Betriebssystem beknackterweise den Rückstrich auch noch als Pfadtrenner
benutzt...
> Content-Type im CGI-Skript setzen? Warum hat es dann vorher unter Linux> funktioniert?
Hat es?
WAS genau möchte denn immer runtergeladen werden -- die Programmdatei
oder eine Datei, die deine erzeugte Ausgabe enthält? In letzterem Fall
stimmt eindeutig der Content-type nicht.
Sven Pauli wrote:
> eigentlich dient der Rückstrich als Escape-Zeichen (\n
Eigentlich nicht... der Rückstrich sagt hier, dass das nachfolgende
Zeichen als Steuerzeichen interpretiert werden soll.
In vielen Programmiersprachen wird es AUCH als Escape für
Stringbegrenzer wie " vorgesehen. Dann kann man natürlich ein Einzelnes
\ auch mit \\ darstellen.
> Ich weiß auch nicht, was dann Vorrang hat, wenn man für sein> Betriebssystem beknackterweise den Rückstrich auch noch als Pfadtrenner> benutzt...
Und das hat nix mit dem Betriebssystem zu tun und ist auch nicht
beknackt, man könnte genausogut auch | als Pfadtrenner nehmen oder oder
oder...
Die Umsetzung in Programmen/Programmiersprachen ist dann wieder was
anderes, unter Java z.B. ist es egal ob man / oder \ nimmt unter
Windows, da das intern korrekt umgesezt wird. Bei Linux gibt es da aber
wohl manchmal Probleme.
Generell KÖNNTE man es ja mal probieren ob es daran liegt ich tippe aber
auch eher auf ein anderes Problem, weil wenn etwas falsch konfiguriert
ist gibts meist schlicht nen Fehler...
Ok.
Wegen der Herunterzuladenden Datei:
Ich habe wiegesagt im Ordner "cgi-bin" eine vorher unter Linux
einwandfrei funktionierende "test.cgi" liegen.
Wenn ich nun im Browser die Datei mit "C:\xampp\cgi-bin\test.cgi"
AUSFÜHREN will (im Falle unter Linux wird dabei eine Einfache
Hallo-Welt-Seite angezeigt), dann fragt er mich, ob ich die Datei
test.cgi speichern möchte.
Richtig wäre eben, dass er mir ein "hallo welt" ausgibt.
Danke
Läubi Mail@laeubi.de wrote:
> Sven Pauli wrote:>> eigentlich dient der Rückstrich als Escape-Zeichen (\n> Eigentlich nicht... der Rückstrich sagt hier, dass das nachfolgende> Zeichen als Steuerzeichen interpretiert werden soll.
Oder so.
> In vielen Programmiersprachen wird es AUCH als Escape für> Stringbegrenzer wie " vorgesehen. Dann kann man natürlich ein Einzelnes> \ auch mit \\ darstellen.
Kann nicht, sondern muss sogar, weil sonst das nachfolgende Zeichen
wieder ausgehebelt würde...
>> Ich weiß auch nicht, was dann Vorrang hat, wenn man für sein>> Betriebssystem beknackterweise den Rückstrich auch noch als Pfadtrenner>> benutzt...> Und das hat nix mit dem Betriebssystem zu tun und ist auch nicht> beknackt, man könnte genausogut auch | als Pfadtrenner nehmen oder oder> oder...
Ja sicher, aber wenn sowohl die Programmiersprache des Betriebssystemes
(C, C++, C#, wie auch immer) den Rückstrich als Escape-Zeichen benutzen,
dann ist die Wahl doch selten blöde, oder nicht?
1
char*pfad="c:\\hier\\ist\\mein\\Verzeichnis";
Zumindest fand ich persönlich das immer verdammt lästig, also ich noch
für Windows programmiert habe.
> Die Umsetzung in Programmen/Programmiersprachen ist dann wieder was> anderes, unter Java z.B. ist es egal ob man / oder \ nimmt unter> Windows, da das intern korrekt umgesezt wird. Bei Linux gibt es da aber> wohl manchmal Probleme.
Regel: Pfadtrenner ist '/', alle anderen Zeichen (\0 wird gefiltert)
sind im Dateinamen erlaubt. Punkt.
Ich würds sonst auch begrüßen, wenn der Fragende mal einen Schnippel
seiner Logdatei anhängen würde :-)
peter wrote:
> Ich habe wiegesagt im Ordner "cgi-bin" eine vorher unter Linux> einwandfrei funktionierende "test.cgi" liegen.
Blöde Frage aber: Hast du dein Programm auch unter Windows kompiliert
oder einfach das von Linux rüberkopiert..?
> Wenn ich nun im Browser die Datei mit "C:\xampp\cgi-bin\test.cgi"> AUSFÜHREN will (im Falle unter Linux wird dabei eine Einfache> Hallo-Welt-Seite angezeigt), dann fragt er mich, ob ich die Datei> test.cgi speichern möchte.
Dann speicher sie mal irgendwo ab und guck mit nem Editor rein -- steht
da binäres Zeugs drinne oder etwa 'hallo welt'?
Aaaalso es Klappt :) JUHUU :)
Danke erstmal bis dahin.
Ich kann jetzt mal den C-Code posten, der bei mir funktioniert. Ein
Augenmerk ist dabei auf die Parameter zu richten, die nicht wie in html
selbst mit einem davor- und dahintergestelltem "" anfangen/enden:
z.B. <input type="text"> in CGI sieht's so aus <input type=text>.
Jetzt habe ich aber bezüglich des CGI-Skripts selbst noch eine Frage.
Wie kann ich nun so ein Forumular erstellen, welches eine
Passwortabfrage macht? In meinem bisher programmierten Fall soll es eine
Abfrage sein, ob der Benutzer "1" oder "rest der Welt" anmeldet.
Wenn ich auf "OK" klicke, soll eine neue HTML seite geladen werden
(später dann eben die Buttons für das EIN/Ausschalten von den Pumpen).
Könntet ihr mir helfen?
Hier mal der bis dahin funktionierende Code.
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<fcntl.h>
4
#include<sys/types.h>
5
#include<sys/stat.h>
6
7
8
9
voidprint_html_header(void)
10
{
11
printf("Content-Type: text/html\n\n");
12
printf("<html><head>\n");
13
printf("<title>Test!!</title>\n");
14
printf("</head><body bgcolor=#b3b3b3><pre>\n");
15
printf("<script type=text/javascript></script>");
16
printf("<form method=post action=>");
17
18
19
}
20
/* Das Ende eines HTML-Dokuments */
21
voidprint_html_end(void)
22
{
23
printf("</pre></body></html>\n");
24
}
25
/* Damit überhaupt ein HTML-Dokument ausgegeben wird */
Achso...Warum es nicht geklappt hat:
Ich hatte immer die Pfadangabe in den Browser geschrieben:
C:\xampp\cgi-bin
Das war der Fehler!
Richtig wäre gewesen:
http://localhost/cgi-bin/test.cgi
peter wrote:
> Aaaalso es Klappt :) JUHUU :)>> Danke erstmal bis dahin.> Ich kann jetzt mal den C-Code posten, der bei mir funktioniert.
Gut.
> Ein> Augenmerk ist dabei auf die Parameter zu richten, die nicht wie in html> selbst mit einem davor- und dahintergestelltem "" anfangen/enden:
Hat das einen konkreten Sinn? Weder C, noch CGI noch sonstwer fordern
sowas.
> z.B. <input type="text"> in CGI sieht's so aus <input type=text>.
Ist syntaktisch absolut schlampig... da gehören Anführungszeichen drum.
> Jetzt habe ich aber bezüglich des CGI-Skripts selbst noch eine Frage.> Wie kann ich nun so ein Forumular erstellen, welches eine> Passwortabfrage macht?
Indem du dir CGIC besorgst und die übertragenen Formulardaten
auswertest.
Es ist natürlich "selten dämlich" das HTML gerade als Einklammerung für
seine Attribut Werte das gleiche Zeichen nutzt das C für die Begrenzung
von Strings vorsieht :P ;)
Läubi Mail@laeubi.de wrote:
> Es ist natürlich "selten dämlich" das HTML gerade als Einklammerung für> seine Attribut Werte das gleiche Zeichen nutzt das C für die Begrenzung> von Strings vorsieht :P ;)
Nimm doch das Apostroph '. Das geht genau so gut in HTML.
Übrigens: Windows ist es (seit längerem) egal ob du einen / oder einen \
als Trennzeichen auf der Konsole benutzt. Beides völlig gleichwertig.
Simon K. wrote:
> Übrigens: Windows ist es (seit längerem) egal ob du einen / oder einen \> als Trennzeichen auf der Konsole benutzt. Beides völlig gleichwertig.
Und warum darf man >, <, | usw. nicht im Dateinamen benutzen? Richtig:
weil der Rückstrich als vermutlich gebräuchlichstes Escape-Zeichen schon
verbaut ist :-)
Und: Selbst wenn es Windows egal ist: Apache kommt aus der Unix-Welt, da
ist es nicht egal, mitunter ist der Rückstrich in dessen
Konfigurationsdateien tatsächlich als reines Escape-Zeichen gedacht.
Sven Pauli wrote:
> Simon K. wrote:>> Übrigens: Windows ist es (seit längerem) egal ob du einen / oder einen \>> als Trennzeichen auf der Konsole benutzt. Beides völlig gleichwertig.> Und warum darf man >, <, | usw. nicht im Dateinamen benutzen? Richtig:> weil der Rückstrich als vermutlich gebräuchlichstes Escape-Zeichen schon> verbaut ist :-)>> Und: Selbst wenn es Windows egal ist: Apache kommt aus der Unix-Welt, da> ist es nicht egal, mitunter ist der Rückstrich in dessen> Konfigurationsdateien tatsächlich als reines Escape-Zeichen gedacht.
Ich wollte ja auch viel eher sagen, dass man egal ob Windows oder Linux,
immer einen Slash ("/") benutzen kann und aus den von dir genannten
Gründen auch tun sollte :-)
Hey Leute!
Also jetzt habe ich mal eine Frage wie das nun im Skript selbst
aussieht.
Wie sieht es nun mit meinem oben geposteten CGI-Skript aus?
Der Code ist eine Anmeldemaske mit einer Textbox. Sobald in dieser
Textbox eine "1" steht und auf den Button "ok" geklickt wird (dieses
"google.gif" tut überhaupt nix zur Sache), soll abgefragt werden ob das
Passwort richtig ist.
Ist es richtig, so soll eine Seite geladen werden, die z.B. "Richtig"
anzeigt. Diese "richtig-Seite" soll später dann mal die Möglichkeit mit
den Buttons aufzeigen, sprich nur Leuten, die das Passwort richtig
eingegeben haben, Zugriff gewähren :)
Ist der "Benutzer" falsch, soll eine neue Seite (HTML-Seite, keine
message-Box!) mit "Falsch" ausgegeben werden.
Wie kann ich da eine neue Seite laden, bzw. die HTML-Seite
aktualisieren?
Vielen Dank!
Schau dich doch am besten erstmal auf php.net um, dort sind viele kleine
Beispiele wie man etwas mit Formularen macht.
Kurzfassung:
Beim Submit werden die Parameter an das script aus "action" übergeben
(etweder in der URL oder als Header). Das Script werdet dann die
Parameter aus und liefert als Antwort eine neue webseite aus.
Ne Frage: Was hat PHP damit zutun?
Ich programmiere ja im Grunde in C -> HTML und JavaScript, so dachte ich
es zumindest.
Denn in Javascript habe ich ja in meinem Skript eine Textbox erstellt.
Sobald ich auf "OK" klicke, soll ja die Textbox ausgewertet werden.
Es wird die Funktion "Ubergebe()" aufgerufen und DANN eine Seite geladen
werden.
Warum mit PHP?
Danke!
Weil du damit erstmal die Grunlagen verstehts, mit php sind es 3Zeilen
und es geht - man kann testen was wie geht. Wenn man das dann einmal
verstanden hat kann man auf CGI umstellen.
nachtrag:
> onclick=Ubergebe()
Ich hoffe du glaubst nicht das mit dem html code wirklich deine C
funktion
void Ubergebe(void)
aufgerufen wird, oder etwas doch?
Hallo...
Nun habe ich mal etwas rumprobiert und die erste Seite klappt schon mal.
Das Problem ist aber die zweite Seite.
Als Versuch habe ich zunächst einmal einfach eine Eingabe mit einem
"Namen"-Feld und deinem "Text"-Feld und einem Button "Abschicken".
Der C-Code lautet wie folgt (er funktionierrt auch einwandfrei):
Nun zum Problem:
Sobald ich auf den Button klicke, sollte eigentlich ein Formular mit
"ihr name war: ..." angezeigt werden. Eben mit dem Namen, der vorher in
die Texbox eingegeben wurde. -Das macht es aber nicht!
Ich habe vorerst das Ganze in einer normalen test.php auf meinem
XAMPP-Server probiert, da lief das Skript einwandfrei. Anschließend habe
ich es in CGI eingebunden, hier der Code dafür.:
1
#include<stdio.h>
2
#include<stdlib.h>
3
#include<fcntl.h>
4
#include<sys/types.h>
5
#include<sys/stat.h>
6
7
8
9
voidprint_html_header(void)
10
{
11
printf("Content-Type: text/html\n\n");
12
printf("<html><head>\n");
13
printf("<title>Test!!</title>\n");
14
printf("</head><body bgcolor=#b3b3b3><pre>\n");
15
16
}
17
/* Das Ende eines HTML-Dokuments */
18
voidprint_html_end(void)
19
{
20
printf("</body></html>\n");
21
}
22
/* Damit überhaupt ein HTML-Dokument ausgegeben wird */
23
24
25
26
intmain(void)
27
{
28
print_html_header();
29
printf("<?php echo "IhrName:$_POST[name]?>");
30
print_html_end();
31
32
return EXIT_SUCCESS;
33
}
Das Problem ist aber, dass er nix anzeigt. Komischerweise, wenn ich mit
der rechten Maustaste auf "Quelltext anzeigen" gehe und dann diesen Code
in eine "test.php" einfüge, klappt das Skript einwandfrei und zeigt mir
an "Ihr Name: ".
Warum nicht im CGI-C-Skript?? Kompilieren tut er einwandfrei.
Probier schon seit ner Stunde rum, komm einfach nicht drauf!
Danke
Du schnallst das nicht wirklich, wie das mit CGI funktioniert, oder?!
Dein letzter C-Schnippsel lässt sich übrigens unter Garantie nicht
compilieren.
Zur Erinnerung: Common GATEWAY Interface.
Nachtrag: OK, ersten Fehler bemerkt.
Warum kopierst du die Quelltexte nicht einfach, anstatt sie andauernd
abzutippen...?
>Nachtrag: OK, ersten Fehler bemerkt.>Warum kopierst du die Quelltexte nicht einfach, anstatt sie andauernd>abzutippen...?
Hö?? Was meinst du damit?
der letzte Codeschnippsel lässt sich sehr wohl kompilieren, wiegesagt
das Backslash gehört natürlich überall dahin, wo innerhalb der
"printf-Funktion" ein -> " <- (Gänsefüßchen) steht.
Wenn ichs schnallen würde, würde es funktionieren ;)
Was soll soetwas in einen C Programm
("<?php echo "Ihr Name: $_POST[name] ?>");
entweder du machst PHP oder C(CGI) dann musst du dir etwas einfallen
lassen die du an die Variable $_POST[name] rankommst - das nimmt dir PHP
sonst ab.
>die den Wert einer Variablen holt??
Das Problem ist das es die Variable nicht gibt, woher soll sie auch
kommen.
Es gibt verschienden Möglichkeiten, etweder musst du die URL
(xyz.cgi?test=abc) selber auseinander nehmen oder du nimmst eine fertige
CGI lib. Aber ich würde sagen du machst es lieber mit PHP und startest
aus dem PHP dein Programm - damit wird du schneller zum ziel kommen.
Dann mach es dir einfach, schreibe es in PHP und wenn du alles soweit
geprüft hast (Passwort OK) dann startest du dein Programm aus dem PHP
System("programm[.exe]");
Mir is das hier alles zu konfus. Der eine sagt das, der andere
das...Wenns mal eine Schritt-für-Schritt-Anleitung für IRGENDWAS gäbe,
dann wäre das alles einfacher. Aber nur irgendwelche eingeworfenen
Vorschläge, damit kann ich nix anfangen.-Sorry.
Ich wollte es in CGI und zwar in C CGI schreiben, einfach nur ein
Formular mit einer Passwortabfrage.
Aber anscheinend sprengt es den Rahmen.
Sorry das du es nicht verstehst, aber wer es als C-Programmierer nicht
hinbekommt eine Lib einzubinden für den ist ein CGI programm der falsche
Einstieg. An deinen Versuchen sieht man das du nicht einmal genau weiss
an welcher Stelle was ausgeführt wird ( Browser oder Server).
Also Fang erstmal mit den Grundlagen an! Oder mache es mit PHP und sein
estmal froh das es geht.
@Peter: Zum Prüfen kommts ja erst garnicht, anscheinend kann man ja nich
den Inhalt von dem Textfeld abfragen. Wiegesagt, binde ich cgic ein,
dann klappts nicht. vielleicht mache ich auch einen Fehler...
Ich verwende Dev-CPP.
Ich binde die Dateien (alle aus dem Ordner CGIC) über Rechtsklick auf
das Projekt -> Zum Projekt hinzufügen ein.
Ich kompiliere -> Fehler: Build Error [test.exe] Fehler 1.
Ich kenne leider Dev-CPP nicht. Aber wenn man mit C anfängt sollte man
auf die Kommandozeile gehen und das erste "Hallo World" Programm von
Hand übersetzen (Compiler -> Linker ).
Wenn man dann estmal verstanden hat wie die schritte sind kann sich auch
mit der IDE Arbeiten.
Ich glaube auch nicht das das der komplette Fehler ist
Fehler: Build Error [test.exe] Fehler 1.
da steht doch bestimmt mehr da, denn mit der Zeile kann man nichts
anfangen.
Also ich werds jetzt so machen.
Ich schreibe mir eine "intro.cgi", die zur Anzeige (nur zur Anzeige!)
der Messwerte dient. Die Werte bekommt sie über eine von dem
Kommunikationsprogramm (welches ebenfalls auf dem Server läuft und die
Sensorik am AVR über ser. Schnittstelle überprüft) erstellten dat-Datei.
Dort liegen alle Infos über die am AVR angeschlossenen Sensoren.
Beim Ausführen des intro.cgi werden diese Werte aus der dat-Datei
(fread()) eingelesen und daraus eine HTML-Seite erzeugt.
Neben der Anzeige der Messwerte befindet sich ein Button "Schalte
Verbraucher". Sobald auf diesen Button geklickt wird, soll via .htaccess
eine Passwortabfrage erfolgen. Wenn die Abfrage erfolgreich verlaufen
ist, kommt der User auf eine weitere cgi-Seite, die mehrere Buttons hat.
(Pumpe-1, Pumpe-2, Pumpe-3 usw).
Wenn nun auf einen dieser Button geklickt wird, wird eine CGI mit dem
jeweiligen Parameter aufgerufen.
Beispiel: http://meineseite.de/cgi-bin/schalte.cgi?=1 (wäre das
schalten von Pumpe-1) cgi?=2 (wäre schalten von Pumpe-2) usw.
Die jeweilige CGI setzt dabei dann ein Flag in eine Auftrag.dat. Sobald
dort ein Flag gesetzt ist, holt sich durch sekündliches Abfragen diese
Information das Kommunikationsprogramm. Dort wird dann die jeweilige
Pumpe angesteuert.
htaccess ist glaube ich eh die sichere Variante.
Danke!
Für zu hause mag das ja gehen, aber Datenübergabe mit Dateien ist sehr
unsauber. Was passiert wenn die Datei gerade geschrieben wird und ein
andere die Datei lesen will? Bei der Auftrag.dat das gleich problem wie
willst du dort 2Aufträge reinschreiben (eventuell sogar gleichzeitig).
Für Solche sachen gibt es IPC
http://de.wikipedia.org/wiki/Interprozesskommunikation
übrigens, ich wollte noch hinzufügen, dass diese "index"-Seite NACH der
htaccess-Anmeldung auch eine HTML-Seite sein kann, diese braucht ja nur
eine URL ausführen beim klick auf den jeweiligen Button.
;)
Danke