Variable übergeben

Hi Leute!
Ich habe eine kurze Frage:

<form action="create_idstable.php" method="POST"> <input type="text" size="17" name="max"> <input type="submit" value="Erstellen"> </form>
Dieser Code übergibt beim klicken auf Erstellen den eingegebenen Wert für max an create_idstable.php. Nun möchte ich, dass zusätzlich noch $Password und $Username übergeben werden. Diese sind aber fixe Variablen und sollen nicht auch noch hier eingegeben werden müssen. Wie mache ich so etwas?
Danke schonmal für eure Hilfe!

mfg,
PHP_Master

Meinst du verstecke Formularfelder?

Danke für deine Antwort!

$password = $_POST["password"];
$username = $_POST["username"];

…so bekomme ich das Passwort und den Usernamen übergeben. Und beim öffnen der Seite durch klicken auf Erstellen sollen diese Variablen zur nächsten Seite übergeben werden. Bin mir nicht sicher ob das damit funktioniert, bin auch nur ein Neuling :smiley:

mfg,
PHP_Master

[quote=“PHPMaster”]Bin mir nicht sicher ob das damit funktioniert, bin auch nur ein Neuling :smiley:
[/quote]
Ähm… ich auch nicht? Probier’s doch einfach. Jedenfalls hört sich das für mich so an, als würdest du danach suchen. :wink:

Vielleicht willst du auch sessions ( de.php.net/session ) - mit denen kannst du unter php Variablen über mehrere Seiten hinweg vorrätig halten, ohne dass sie wieder übergeben werden müssen.

Das wirder-übergeben von variablen kann auch nette Sicherheitsprobleme eröffnen (je nach anwendungszweck), diese können so u.U. vermieden werden (da der User nicht an sessiondaten rumspielen kann).

1.) SESSIONS sind zu empfehlen…
2.) Du kannst auch Daten mit POST übergeben:

3.) Was allerdings Sinn macht ist dies hier:

Damit wird die Session-ID über POST übergeben

Warum es keinen Sinn macht, gefährliche Datem mit POST zu übergeben:
Jeder der ein wenig Programmierkenntnisse hat, kann diese Daten jederzeit verfälschen

Dann gibts hald noch die Probleme mit register_globals von wegen “$_POST[“xyz”]” und “$xyz”…

Danke für eure zahlreichen Antworten!

Das mit den hidden-inputs war genau das, was ich gesucht habe.

Aber jetzt habe ich noch eine Frage zu diesen Sessionen:
Ich möchte, dass beim Ausführen eines php-Skripts zuerst eine Nummer ausgegeben wird. Sobald diese dann im Browser sichtbar ist, soll eine weitere php-Datei gestartet werden. Kann man so etwas mit Sessionen lösen?

mfg,
PHP_Master

Hallo,

prinzipiell reicht nach der Ausgabe deiner Zahl ein

header ("Location: <deine php datei>");

dann wird zuerst deine Zahl angezeigt und dann die andere PHP Datei gestartet

Mit header funktioniert das leider nicht, da vor einem header nichts ausgegeben werden darf (so stehts zumindest in der Warnung die ich bei folgendem Code bekomme):

<?php
	echo "1";
	header ("Location: <ListAdmin.php>");
?>

Warnung: “Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\test.php:2) in C:\Programme\xampp\htdocs\test.php on line 3”

mfg,
PHP_Master

Und wozu willst du eine Nummer ausgeben, bevor du umleitest? o.0

Das Problem ist foglendes:
Ich schreibe ein System das für ein Onlinecomputerspiel (wie z.B. CS) eine MYSQL Datenbank mit allen geöffneten Sitzungen des Spiels füllt. Also diese Liste, die man sieht wenn man bei z.B. Cs auf find servers klickt. Nun gibt es eine php Datei, die eine Sitzung in diese Datenbank einträgt. Diese gibt dann eine eindeutige ID-Nummer an meine Gameengine zurück (per echo-Befehl). Danach wird eine weitere php-Datei gestartet, der ich per post die ID übergebe und diese pingt dann regelmäßig zum Server, damit dieser weis, dass die Sitzung noch existiert. Das Problem ist nur, dass wenn der Eintrag erfolgreich erstellt wird und danach die Verbindung ausfällt und die Ping.php Datei nicht mehr gestartet werden kann, dieser Eintrag für immer in der Datenbank steht. Deshalb muss die Datei die die Sitzung einträgt die Ping.php Datei starten. Da php Serverseitig abläuft kann es in diesem Fall egal sein ob der Client (also die Engine) noch eine Verbindung hat oder nicht. Nur sollte trotzdem zuerst die ID ausgegeben werden, und erst dann die Ping.php Datei gestartet werden.
Vl. kann man das Problem auch anders angehen, aber mir fällt momentan keine wirtschaftlichere Lösung ein…

mfg,
PHP_Master

Folgt dieser Client überhaupt Location-Headern? Wenn du die Datei nur ausführen willst, könntest du auch include bzw. virtual() benutzen.

Hier geht’s aber nicht mehr um ein Script auf bplaced, oder?

Doch, das alles sind normale php Datein, die durch ein HTTP-Request der Engine gestartet werden. Nach dem aufruf des HTTP-Requests bekomme ich in einem String das zurückgegeben, was im Browser ausgegeben worden wäre.

Alles wird so ausgeführt, als würde es von einem Browser aus gestartet worden sein.

Das Problem ist, dass das ganze Skript fertig ausgeführt sein muss, bevor erst die ganzen Ausgaben angezeigt, bzw. in meinem Fall übergeben werden. Deswegen habe ich mir gedacht, ob ich nicht einfach die 2. Datei in einem art anderen Thread öffnen kann? Vergleichbar mit einem 2. Browserfenster. Im ersten wird mir die ID übergeben, und im 2. läuft das andere PHP-Skript.

mfg,
PHP_Master

Sorry, sowas wie ein ping-script kannst du auf bplaced wenn ich das richtig verstanden habe aus mehreren Gründen vergessen:

zum anpingen des Servers brauchst Du wohl ausgehende Verbindungen; diese sind im Moment deaktiviert (werden aber wohl bald aktiviert).

Aber viel wichtiger:
Dein ping-script würde auf bplaced nicht besonders lange am laufen bleiben. Wenn ich das richtig verstanden habe, willst Du ein Script schreiben, dass den server alle x sekunden anpingt und guckt ob der noch lebt. Scripts werden auf bplaced aber nach ein paar sekunden laufzeit getötet, weil ein laufendes script viel speicher belegt (und man nie weiss ob es nicht vielleicht abgestürzt ist).

Ich habe das Skript schon erfolgreich getestet :wink:
Es funktioniert auch ein wenig anders als du gesagt hast. Ist leider ein wenig schwer zu erklären, aber im Prinzip kann man sagen, dass das Skript darauf basiert, dass ein Wert in der Datenbank von 0 auf 1 gesetzt wird bzw. darauf wartet, dass sich der Wert ändert.
Außerdem wird das ganze später sowieso seinen eigenen Server bekommen, der nur für dieses System verwendet wird, um möglichst gute performance zu erzielen. bplaced benutze ich momentan nur zum testen dieses Systems und zum hosten meiner Privaten HP.
Nur dieses eine Problem, dass ich oben beschrieben habe bekomme ich nicht wirklich in den Griff. Doch mir ist schon ein Ersatzplan eingefallen. Ich werde einfach die Liste alle paar Stunden total löschen. Das merken dann die Clients und machen einfach ihre Einträge neu. Dadurch bleiben ungültige Einträge die durch irgend welche Fehler im System nicht gelöscht werden nicht ewig in der Liste. Darum wollte ich an dieser Stelle wissen, ob man es irgendwie machen kann, dass der Server automatisch eines von meinen Skripten alle paar Stunden ausführt?

[edit] Was ich noch wissen wollte: Nach wieviel Sekunden wird ein Skript denn automatisch beendet (von bplaced)?

mfg,
PHP_Master

automatisch ausführen lassen kannst du Skripts, mit einem Cronjaob, wobei ich mir nicht sicher bin, obs das auf bplaced auch gibt, aber wenns dann nen anderen Space, bzw, nen eigenen server hat, kannst du das ja dann einrichten :wink:
(ach nur so das günstigste, was kostet, welche ich gefunden habe ist revido.de , dort kostet nen space mit 15 GB nur 1,99 € im Monat :wink: )
mfg
bcg

Wenn Du eh mal einen eigenen server hast… ich weiss ja nicht ob das geht…

aber wäre es dann nicht vielleicht einfacher, Dir ein kleines C- progrämmchen oder script in einer beliebigen “normalen” scriptsprache zu schreiben das in einer dauerschleife auf dem server läuft und immer alle spiele die überprüft werden müssen der reihe nach anpinkt, dann ein paar sekunden / minuten wartet und das dann wiedertut?

Dann musst nicht deinen webserver mit sowas belasten, das ist ja eigentlich auch nicht der gedachte einsatzzweck für so ein riesentrum (und skaliert auch nicht gerade gut).

Ist es eigentlich schwierig seinen eigenen Server einzurichten? Für ein Internetspiel wäre es wohl besser wenn man einen Server hat, der von nichts anderem benutzt wird, um maximale performance zu gewährleisten. Außerdem habe ich praktisch die Gewährleistung, dass mir der Betreiber nicht einfach den Server aus welchen Gründen auch immer schließt und ich dann mein ganzes Spiel vergessen kann.

mfg,
PHP_Master

Ist leider nicht so einfach so etwas zu schreiben. Und soweit ich weiß wird das auch von den richtig “großen” Spielen wie CS so gemacht. So wurde es mir zumindest gesagt…
Außerdem gehe ich mal davon aus, dass mein Spiel sowieso nicht von 100erten Leuten gespielt werden wird. Wäre natürlich toll, aber ist eher unwahrscheinlich…

mfg,
PHP_Master

Ok, mit dem Anfangsthema hat das ganze jetzt zwar nicht mehr soviel zu tun, aber trotzdem…

… ob es einfach ist einen Server einzurichten (und am laufen zu halten) ist sehr stark ansichtssache und kommt halt auf dein Vorwissen an. Man sollte dazu schon etwas erfahrung haben und vor allem die Software auf dem Ding aktuell halten.

Also meiner Meinung nach sollte man schon sicher auf der shell unterwegs sein, wissen wie man einen server ohne die üblichen verdächtigen html-oberflächen konfigurieren kann. Das ist nichts, was man mal so schnell nebenbei in fünf Minuten macht.

Und wenn Du deinen eigenen Server hast musst Du dich halt auch um deine Probleme selber kümmern… wenn Du irgendwas an der Konfiguration verhaust darfst du es auch selber wieder reparieren, etc.

Und cs hat seine Serverliste zumindest früher meines wissens so realisiert, dass sich alle spieleserver ab und zu bei den valve-servern die für die Listen zuständig waren gemeldet haben; wie genau das realisiert wurde weiss ich gan ehrlich nicht, aber ich bezweifle stark, dass es da eine dauernd offene verbindung gegeben hat; ich nehme eher an, dass sich die server da alle paar Minuten mal mit UDP gemeldet haben.