PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] - POST wird nicht immer übermittelt?



verve
14.04.04, 12:31
HI@all,

habe SuSE Linux 8.1 mit apache und php und wollt nun ein einfaches PHP Skript ausführen das folgendermassen aussieht:


<?php

if(isset($_POST['submit'])) {

echo "Hallo: <br>\n";
echo $_POST['name']."<br>\n";
echo $_POST['email']."<br><br><br>\n";


echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";

echo "<p>freischalten</p>\n";
echo " <label for=\"name\">Name</label>\n";
echo " <input type=\"text\" name=\"name\" id=\"name\" value=\"name\" /></li><li>\n";
echo " <label for=\"pass\">pass</label>\n";
echo " <input type=\"text\" name=\"pass\" id=\"pass\" value=\"pass\" /></li><li>\n";
echo " <input type=\"submit\" name=\"frei\" value=\"Benutzer hinzuf&uuml;gen\" />\n";
echo " <input type=\"reset\" name=\"frei\" value=\"Zur&uuml;cksetzen\" />\n";
echo "</form>\n";

} elseif(isset($_POST['frei'])) {

echo "User freigeschaltet, Passwort:<br>\n";
echo $_POST['pass']."<br>\n";

} else {

echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">\n";

echo "<p>Daten senden</p>\n";
echo " <label for=\"name\">Name</label>\n";
echo " <input type=\"text\" name=\"name\" id=\"name\" value=\"name\" /></li><li>\n";
echo " <label for=\"email\">Email</label>\n";
echo " <input type=\"text\" name=\"email\" id=\"email\" value=\"email\" /></li><li>\n";
echo " <input type=\"submit\" name=\"submit\" value=\"Benutzer hinzuf&uuml;gen\" />\n";
echo " <input type=\"reset\" name=\"submit\" value=\"Zur&uuml;cksetzen\" />\n";
echo "</form>\n";
}
?>

Kurz gesagt, wenn das erste Formular ausgefüllt worden ist, soll er das zweite anzeigen, wenn das zweite ausgefüllt worden ist, soll er sagen : freigeschaltet.

Bei mir am WinXP PC (mit apache+php) funktioniert das wunderbar! Auf dem tripod server ebenso! Doch auf meinem linux rechner kommt er irgendwie ständig duchreinander! Wenn man nur einmal den "vor-oder zurück-button" nutzt zeigt er nur noch das erste formular an, egal wie oft man auf submit klickt ... manchmal kommt er auch einfach so durcheinander und zeigt anstatt der nachricht: freigeschaltet wieder das erste formular!

Kann das evt. an irgendeinen einstellungen am apache oder bei der php.ini liegen ??? Gibt es dort solche einstellungsmöglichkeiten ?
Kennt vielleicht jemand das problem? ;)

greetings
verve

Multe
14.04.04, 12:54
Mahlzeit,

das Problem mit den Browser-Buttons hatte ich mal bei einem Perlprojekt.
Ich hab es damals mit einer Quick'n'dirty Lösung geregelt.

Zuerst habe ich per Meta Tags festgelegt, das die Seite jedesmal neu eingelesen wird.
Wenn er das macht, kannst Du mit <Input type hidden... Werte vorgeben und damit prüfen ob er den Züruck Button betätigt hat und das abfangen, geht er den Weg über das Forumlar mit Submit setzt Du die Werte eben wieder zurück und wertest diese dann aus. Wenn Du das geschickt mit 2 Werten machst, kannst Du beide Wege abfangen. Am besten machst das mal auf nem Blatt Papier (ich weiss, wie altmodisch), aber da siehst Du schnell wie das ohne Probleme umzusetzen ist.
Wenn Du das mit Javascript verbindest wird es sogoa noch einfacher (Stichwort, onSubmit)

Nicht wirklich schick, aber funktionell.

Nur so als Ansatz, vielleicht hilft es Dir ja weiter...

Gruß Malte

verve
14.04.04, 16:16
hi,

danke für deine antwort ... nur leider versteh ich das nicht so ganz ;)
Es ist ersteinmal nicht so wichtig, es abzufangen wenn jemand die vor-undzurück button nutzt, sondern allgemein kommt das skript schnell durcheinander ! Auch wenn man .z.b. zu schnell klickt o.ä.

Aufjedenfall hört sich das mit dem onSubmit gut an. Habe auf SelfHTML mal geschaut, aber so das richtige nicht gefunden.
Bei mir schaut das jetzt ca. so aus:



<script type="text/javascript">
<!--
function chkFormular()
{
if(document.Formular.submit.value !== "") {
alert("submit");
}
}
//-->
</script>
<form name="Formular" action="java.php" method="post" onSubmit="return chkFormular()">
// [...]


ob das jetzt so gedacht war weiß ich nicht :-D
Auf jedenfall erkennt er so das das Formular bestätigt wurde.
Aber wie kann ich jetzt einen else bereich da einfügen, das wenn der submit button bestätigt wurde das zweite formualr kommt (anstatt der meldung "sbumit"). Ich kann da in den javascript ja schlecht das Formular einfüren.

Stanislaus
14.04.04, 16:24
Die JavaScript Lösung finde ich nicht praktikabel zumal man JavaScript problemlos deaktivieren kann.

Ich selber hatte mal den Fall, daß POST Variablen nicht sauber übergeben wurden, wenn ich mit dem IE unterwegs war.
<input type="submit" name="submit" /> sollte eigentlich $_POST['submit'] liefern beim IE kam allerdings $_POST['submit_x'] und $_POST['submit_y'] zurück weswegen die Auswertung immer fehl schlug.

Evtl. hängt es bei Dir in einer ähnlichen Ecke. Mach einfach mal ein "print_r($_POST);" an den Anfang des Scriptes und guck Dir die Werte an.

Läuft unter allen 3 genannten Servern die selbe PHP Version?

Bis neulich ...

verve
14.04.04, 16:38
Hi!
danke für den tipp, habe das mal ausprobiert.
Das Problem ist allerdings das er per post nichts sendet! Wenn das Skript durcheinander kommt und nicht mehr weiter geht, dann steht da nur Array ( ) und nicht submit_x oder y.

Die PHP-Versionen sind alle anders!

Mein WinXP -> PHP Version 4.1.2 - hier gehts
Mein SuSE -> PHP Version 4.2.2 - geht nicht
tripod -> PHP4u Version 3.0 Based on PHP-4.3.2 - hier gehts

könnte man bei 4.2.2 etwas umstellen o.ä. damit das geht? ;)

Stanislaus
14.04.04, 17:04
könnte man bei 4.2.2 etwas umstellen o.ä. damit das geht? ;)
Kannst ja mal versuchen "etwas" umzustellen *fg*

Im Ernst. Versuch mal eine aktuelle Version mit der Standard php.ini und guck Dir das Verhalten an. Am Ende liegts an irgendwelchen SuSE eigenen Spielereien.
Versuch mal eine testumgebung aus den original Sourcen nach folgender Anleitung zu bauen:
http://www.php.net/manual/en/install.apache2.php

Viel Erfolg!