# Submit ohne Button in Formular



## webdesign (24. Oktober 2004)

In meinem PHP Script für mein Formular brauche ich den Befehl
if($submit)...
Ich finde jedoch den submitt button beim Formular sehr hässlich und würde den gerne durch text ersetzen. In JavaScript gibt es ja eine Methode, doch bei mir erkennt das PHP Script diesen JavaScript Befehl nicht als Submitt.
Gibt es da in PHP eine Lösung oder sonst irgend eine Art dieses Problem zu lösen?

Vielen Dank schon mal
Gruss Jonas


----------



## Operator_Jon (24. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Per Get villeicht...


```
<?
if ($_REQUEST['submit'] == 1) {
  //...
}
?>
<form name="form" action="<?=$_SERVER['PHP_SELF']?>?submit=1" method="POST">
  <a href="javascript:document.form.submit()">Text</a>
</form>
```


----------



## Sebastian Wramba (24. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Wie wär's denn mit einem Hidden-Field?


```
<input type="hidden" name="submit" value="foo">
```


Operator_Jon: Ein Formular per GET übermitteln ist in den seltensten Fällen sinnvoll, da eine URL auf eine bestimmte Zeichenlänge beschränkt ist.


----------



## ctp (24. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Oder vielleicht per CSS. Da kannst du ihn ja so aussehen lassen wie Text...


----------



## webdesign (24. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Vielen Dank für die schnellen Antworten.
Mit einem hidden button sollte es eigentlich gehen. Dumm dass ich nicht selber darauf gekommen bin, mal schaun.

Mit css hab ich's schon versucht. Geht aber leider nicht in jedem Browser und darum leider keine gute Lösung.
Danke

Gruss Jonas


----------



## webdesign (25. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Hallo zusammen
Ich habe schon alles ausprobiert, geht leider nichts, SCH*****!
Kann mir jemand weiter helfen? Gibt es vielleicht eine Möglichkeit anstatt ein submitt button eine Grafik zu laden?

Vielen Dank
Gruss Jonas


----------



## Operator_Jon (25. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Meine Methode funktioniert zu 100%...
Grafik musst du statt

```
<input type="submit"...>
```
einfach ein

```
<input type="image"...>
```
nehmen!

Also nochmal zum Mitschreiben:
Lösung mit einem Bild als Submit-Button

```
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <?
        if ($_REQUEST['submit']) {
            //Aktion...
        }
        ?>
        <form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
            <input type="image" name="submit" src="...">
        </form>
    </body>
</html>
```
Lösung mit einem Hiddenfeld:

```
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <?
        if ($_REQUEST['submit']) {
            //Aktion...
        }
        ?>
        <form name="form" action="<?=$_SERVER['PHP_SELF']?>" method="POST">
            <input type="hidden" name="submit" value="foo"><br>
            <a href="javascript:document.form.submit()">Text</a>
        </form>
    </body>
</html>
```
Lösung mit Get-Parameter

```
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <?
        if ($_REQUEST['submit']) {
            //Aktion...
        }
        ?>
        <form name="form" action="<?=$_SERVER['PHP_SELF']?>?submit=1" method="POST">
            <a href="javascript:document.form.submit()">Text</a>
        </form>
    </body>
</html>
```

Du siehst:
Ganz einfach das Ganze


----------



## webdesign (25. Oktober 2004)

*Re: Submitt ohne Button in Formular*

Dankeschön
Ich versuche es dann mal mit der Grafik Variante. Die GET Methode hatte nicht funktioniert, obwohl sie eigentlich logisch wäre. Tja.


----------



## Chino (26. Oktober 2004)

*Re: Submitt ohne Button in Formular*



			
				webdesign hat gesagt.:
			
		

> Hallo zusammen
> Ich habe schon alles ausprobiert, geht leider nichts, SCH*****!


Also mit dem Hidden-Field muss es funktionieren. Das Hidden-Field ist ja quasi nichts anderes als ein weiteres Formular-Element, was beim abschicken in das globale $_POST-Array geschrieben wird. Und genau das passiert ja mit einem Button auch so. 

Die Methode per GET würde ich auf keinen Fall wählen. Da der Parameter, der festlegt, ob das Formular abgesendet wurde oder nicht, in diesem Fall per URL übergeben wird. Das ganze lässt sich dann ganz einfach ungehen, in dem manuell in der URL den Parameter übergeben wird. Somit ist die Abfrage eigentlich sinnlos.

Außerdem: Warum muss eigentlich das Formular und die Formular-Logik (sprich: das Script auf welches das Formular postet) in ein und der selben Datei liegen? Mach doch einfach einmal ein normales HTML-Formular wo Du als Ziel-URL ein PHP-Script angibst, was die Daten aus dem Formular verarbeitet.

Nur mal so als Hinweis/Anregung ...


----------



## webdesign (26. Oktober 2004)

Hallo Chino

Danke für deine Antwort.
Ich weiss auch nicht, wieso das mit dem hidden feld nicht funktioniert, hatte einfach noch keine Zeit dies ausführlich zu testen. Es musste jetzt einfach sehr schnell dieses Formular aufs Netz, darum habe ich nun mal kurzfristig die einfachste Variante genommen. Ich habe bewusst alles in eine Datei gepackt und keine externe Datei zum ausführen des Formulars gewählt. Ich möchte die Fehlerausgabe direkt beim Formular haben und finde es einfach nicht schön bei der externen Datei als Fehlermeldung das ganze Formular per echo noch einmal auszugeben.

Trotzdem, vielen Dank für deine Antwort. Ich werde es später noch einmal mit dem Hidden Feld versuchen.

Gruss Jonas


----------



## Chino (27. Oktober 2004)

webdesign hat gesagt.:
			
		

> Ich habe bewusst alles in eine Datei gepackt und keine externe Datei zum ausführen des Formulars gewählt. Ich möchte die Fehlerausgabe direkt beim Formular haben und finde es einfach nicht schön bei der externen Datei als Fehlermeldung das ganze Formular per echo noch einmal auszugeben.


Das brauchst Du auch nicht. In der HTML-Datei, die das Formular enthält, prüfst Du ob (sofern vorhande) Pflichtfelder ausgefüllt sind. Willst Du die Daten noch genauer prüfen (z.b. E-Mail Adresse, PLZ oder andere Daten) prüfst Du diese natürlich auch auf Richtigkeit.

Hat der User alles richtig ausgefüllt, schickst Du das Formular (an eine externe Datei) ab. Und nicht vorher. Im PHP-Script, was den Datenbank-Eintrag o.ä. vornimmt, kannst Du aus Sicherheit nochmal die Daten prüfen, ob Sie generell ausgefüllt sind.

Warum zweimal prüfen? Ganz einfach: Der User sieht BEVOR  er das Formular abschicken will, ob er eventuell Eingaben vergessen hat oder eingaben falsch angegeben hat (zu kurze PLZ, E-Mail Adresse ist falsch usw) und nicht erst nachdem er das Formular bereits abgeschickt hat. Stichwort: Usability

Natürlich kannst Du die Prüfung im Script auch weglassen, aber sicher ist nunmal sicher. So vermeidest Du mögliche Leereinträge in der Datenbank oder andere dadurch resultierende Fehler. Für denn Fall, dass Du im Script prüfst und trotz der JavaScript-Prüfung einen Fehler feststellst, gibst Du einfach eine entsprechende Fehlermeldung aus, die zusätzlich noch einen "Zurück"-Link enthält. Leitest Du mittels JavaScript auf die vorige Formularseite, sind auch alle eingebenen Werte vom User noch im Formular enthalten (außer als Passwort deklarierte Felder).

Nur fürs nächste mal ;o)


----------



## webdesign (29. Oktober 2004)

Hallo Zusammen
Ich weiss auch nicht was ich falsch mache, aber bei mir funktioniert einfach nur die Methode mit dem normalen Button. Das mit dem Bild oder mit dem Hidden Feld geht leider auch nicht. Ich weiss nicht genau an was es liegt, aber ich denke, dass es daran liegen muss, dass beim Javascript Befehle:javascript:document.form.submit()
die Formulardaten nicht übergeben werden, denn wenn sie übergeben geworden wären, dann hätte auch meine Fehlerabfrage funktionieren müssen.

Ich versuche es mal, wenn ich das hidden Feld anders benenne, vielleicht geht es dann.

"Das Problem ist: Wenn ich die Fehlerabfrage im gleichen Script mache, muss ich ein 
if ($submit) benutzen. Wenn ich diese jedoch in einem externen Script mache, brauche ich das nicht. Da ich aber bei einer falschen Eingabe die Fehlerausgabe per Variable welche sich verändert beim Formular selbst anzeigen möchte, muss ich die Abfrage in der gleichen Datei machen, da ich nicht weiss wie man in einer externen PHP Datei eine Variable in einer anderen Datei ändern kann. Oder könnt ihr mir dabei helfen?

Konkret geht es darum:

Ich habe ein Formular, ganz einfach, wo man nur die E-Mail Adresse eingeben kann. Wenn die E-Mail Adresse falsch oder nicht eingegeben wurde und das Formular trotzdem abgeschickt wurde, möchte ich, dass sich ein Pop Up Fenster öffnet in welchem die Fehlerausgabe kommt. Ich habe das Problem so gelöst, dass ich im body-tag eine PHP- Variable eingesetzt habe: <? echo("$onload")?>, welche ich am Anfang auf null setze. Wenn jetzt beim Formular auf submit gedrückt wurde, prüfe ich ob die Daten richtig eingegeben wurden. Wenn die Daten falsch sind, dann gebe ich der Variable folgenden Wert: $onload='onload="error()"';
Wenn alle Daten richtig sind, sende ich die Daten per email an eine mailadresse und übergebe folgenden Wert der Variable: $onload='onload="danke()"';
Irgendwie funktioniert diese Art bei mir nur mit einem Submitt Button. Mit einem Hidden Feld geht es irgendwie auch nicht, obwohl es theoretisch gehen müsste. Ich frage mich langsam, ob es denn wirklich nur mit einem Button geht, oder ob mich mein Browser einfach verarscht ;-)

So, ich hoffe, dass ich mein Problem gut geschildert habe und hoffe, dass ihr mir helfen könnt.

Gruss Jonas


----------



## webdesign (29. Oktober 2004)

Judihuiiiiiiiiiiiiii
Es geht!
Es lag daran,dass ich das Hidden Feld unbennen musste. Irgendwie gab es Probleme damit, dass ich das hidden Feld submit nannte. Ich habe es jetzt absenden genannt und es funktioniert tadellos.
Tja, was so kleine Veränderungen bewirken können, einfach genial  :suspekt: 

Vielen Dank an alle, ihr habt mir sehr viel weitergeholfen.
;-)


----------

