Formular mit Entertaste abschicken
Anthony Giordano
- html
Hallo,
ich habe folgendes Problem:
Ein Formular (für einen Newsletter) hat zwei Buttons vom Type Submit (sonst keine Buttons) mit den Values "Anmelden" und "Abmelden", das ganze wird per action an ein PHP-Script (im selben Dokument --> echo $PHP_SELF;) geschickt, das je nach value die im textfeld angegebene Adresse entweder ein- oder austrägt.
Das Ganze funktioniert auch wunderbar, solange man den einen oder anderen Button anklickt, wenn man aber die Eingabe mit der Entertaste abschließt, wird die Seite zwar neu geladen, aber das Script macht nichts! Auch mit zusätzlicher Abfrage von $_POST[submit] passiert nichts.
Ich habe selber schon viel überlegt, recherchiert und ausprobiert, aber ich kann den Fehler (oder das Fehlende) nicht finden.
Falls mir jemand helfen kann, wäre ich sehr dankbar.
Mit Besten Grüßen
Anthony Giordano
Manchmal sagt der Code mehr als 1000 Worte, daher hier...
<?php
if (isset($_POST[anmelden]) || isset($_POST[abmelden]) || isset($_POST[submit])) {
if (empty($_POST[adress_for_newsletter])) {
$mssg = 'Keine Adresse angegeben!';
} else {
if (!eregi("[1]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$",$_POST[adress_for_newsletter])) {
$mssg = 'Keine gültige Adresse!';
} else {
$sql = "SELECT * FROM newsletter WHERE adresse = '$_POST[adress_for_newsletter]'";
$nl_result = mysql_query($sql,$DBConnection);
if (mysql_num_rows($nl_result) == 1) {
if (isset($_POST[abmelden])) {
$sql = "DELETE FROM newsletter WHERE adresse = '$_POST[adress_for_newsletter]'";
$result2 = mysql_query($sql,$DBConnection);
if ($result2 == true) {
$mssg = 'Adresse wurde ausgetragen!';
} else {
$mssg = 'Fehler beim Austragen der Adresse!';
}
} elseif (isset($_POST[anmelden]) || isset($_POST[submit])) {
$mssg = 'Diese Adresse ist bereits eingetragen!';
}
} elseif (mysql_num_rows($nl_result) == 0) {
if (isset($_POST[anmelden]) || isset($_POST[submit])) {
$sql = "INSERT INTO newsletter (adresse) VALUES ('$_POST[adress_for_newsletter]')";
$result2 = mysql_query($sql,$DBConnection);
if ($result2 == true) {
$mssg = 'Adresse wurde eingetragen!';
} else {
$mssg = 'Fehler beim Eintragen der Adresse!';
}
} elseif (isset($_POST[abmelden])) {
$mssg = 'Diese Adresse ist nicht eingetragen!';
}
} else {
$mssg = 'Fehler in der Datenbank! Wir werden ihn in Kürze beheben!';
}
}
}
}
?>
<form name="newsletter" method="post" action="<?php echo $PHP_SELF; ?>">
<table>
<tr>
<td>
<input name="adress_for_newsletter" type="text">
<input name="anmelden" type="submit" value="Anmelden">
<input name="abmelden" type="submit" value="Abmelden">
</td>
</tr>
<tr>
<td>
<?php
if (isset ($mssg)) {
echo '<p>'.$mssg.'</p>';
unset($mssg);
}
?>
</td>
</tr>
</table>
</form>
Das wars (keine Sorge wegen fehlender Elemente, ist ein include), für jede Art von Hilfe oder Antwort wäre ich sehr dankbar.
_.0-9a-z- ↩︎
Moin!
Manchmal sagt der Code mehr als 1000 Worte, daher hier...
Zwei Dinge grundsätzlich:
1. Wenn du auf einzelne Elemente eines Arrays zugreifen willst, welche über Textschlüssel referenziert werden (oder auf deutsch: Auf einen Hash zugreifst), dann beachte bitte, dass du bei _festen_ Schlüsseln Strings angibst.
Also statt $_POST[anmelden] bitte $_POST['anmelden'] verwenden. PHP hilft dir bei deiner Version, indem es _derzeit_ noch die unbekannte Konstante namens "anmelden" umwandelt in einen String "anmelden" - und du folglich Erfolg beim Zugriff hast. Die PHP-Entwickler weisen aber IIRC deutlich darauf hin, dass dieses Verhalten in der Zukunft nicht garantiert ist. Ändere also deine Programmierung lieber schon heute. Immerhin ist es ja lobenswert, dass du $_POST benutzt.
2. Was steht in $_POST['submit'] drin? Im Formular ist dieser Wert jedenfalls nicht enthalten.
Und nun der heiße Tipp zum selberdebuggen: Setze ganz zu Beginn deines Skripts mal folgenden Code rein:
echo "<pre>";
var_dump($_POST);
echo "</pre>";
Dann siehst du, was PHP für Daten empfängt, und kannst dem Fehler auf die Spur kommen. Mag sein, dass beim simplen Return-Drücken keiner der beiden Buttons "Erfolg" hat, und somit auch kein Button mitgesendet wird. Bei Submitbuttons ist es ja bekanntlich so, dass nur der zum Absenden benutzte Button "Erfolg" hat und mitgesendet wird - die anderen Buttons werden nicht gesendet.
- Sven Rautenberg
- Wenn du auf einzelne Elemente eines Arrays zugreifen willst, welche über Textschlüssel ...
Danke für die Info, ich war mich bezüglich der Maskierung dieser Strings nicht sicher.
- Was steht in $_POST['submit'] drin? Im Formular ist dieser Wert jedenfalls nicht enthalten.
Das war eigentlich nur ein Test unter der Annahme das Drücken der Entertaste würde die Variable $_POST['submit'] :-) setzten.
Und nun der heiße Tipp zum selberdebuggen: Setze ganz zu Beginn deines Skripts mal folgenden Code rein:
echo "<pre>";
var_dump($_POST);
echo "</pre>";
Danke für die "Debugging-Hilfe" (mist, hätt ich auch längst drauf kommen müssen) ;-)). Wie's scheint setzt das blose Abschicken des Formulars per Entertaste kein "submit", daher handle ich das jetzt direkt mit der Adresse (im Zweifelsfall halt immer eintragen *g*).
Endlich gelöst, danke!
Mit Besten Grüßen
Anthony Giordano