# wieder einmal - Formular mit zwei Buttons



## mad2092 (5. Oktober 2007)

Hallo zusammen,

die Frage wurde hier ja schon mehrfach behandelt, dennoch steige ich dabei noch nicht richtig durch.

Ich habe in meinem Gästebuch Formular zwei Buttons, einen zum Eintragen und einen für die Vorschau, die auf der gleichen Seite ausgegben werden soll.

Beim klicken des Vorschau Buttons soll aber nicht gleichzeitig in die Datenbank geschrieben werden.

Ich hab das jetzt auf diese Weise versucht umzusetzen:


```
<form action="<?php if ($_POST['eintragen'] == "eintragen")
{
header("location: seite_nach eintrag.php");
}
if ($_POST['vorschau'] == "vorschau") 
{
header("location: gleiche_seite.php"); } ?>" 
method="POST" enctype="multipart/form-data" name="mytext" target="_parent" id="mytext" onSubmit="....
```

Meine Buttons sehen so aus:

```
<input type="submit" name="eintragen" value="Eintragen" id="eintragen">
```


```
<input type="submit" name="vorschau" id="vorschau" onclick="gb_eintrag_neu.php" value="Vorschau" />
```

Wobei der onclick meiner Meinung nach - wenn das Script oben richtig arbeitet nicht erforderlich wäre?

Mein Problem ist nun, dass der Datensatz immer in die DB geschrieben wird, egal auf welchen Button ich klicke. Und auch die weiterleitung beim klick auf den Button Eintrag funktioniert leider nicht?

Vielen Dank im Voraus für eure Hilfe...


----------



## Kahmoon (5. Oktober 2007)

Dafür brauchst Du keine 2 Seiten und auch kein JS. Mach einfach 2 Submitbuttons mit unterschiedlichen Werten. Innerhalb eines Formulars mit Headern hantieren dürfte nicht gut gehen.


```
<input type="Submit" name="Eintragen" value="Eintragen" />  
<input type="Submit" name="Vorschau" value="Vorschau" />
```

Dann in PHP abfragen welchen Wert der gedrückte Submit hat.


```
if($_POST["Submit"] == "Eintragen")
{
     #Schreibe in DB
}else if($_POST["Submit"] == "Vorschau"){
     #gebe Vorschau aus
}
```


----------



## splasch (5. Oktober 2007)

Du brauchst dazu nur den subbmit button abfragen welches gesetzt wurde über $_POST

Je nach dem welcher einen wert von beiden besitzt kanst du über eine if abfrage angeben was gemacht werden soll. Den Header befehl kanste weg lassen den brauchst dafür nicht.

Mfg Splasch


----------



## pHyro (5. Oktober 2007)

Huhu, dein Fehler liegt hier:


```
if ($_POST['vorschau'] == "vorschau")
```

Vorschau muss ganz einfach 'Vorschau geschrieben werden, also so:


```
if ($_POST['vorschau'] == "Vorschau")
```

Da der Wert von deinem Vorschaubutton auch 'Vorschau' und nicht 'vorschau' ist 

Da wird auf Groß- und Kleinschreibung geachtet.

LG pHyro


----------



## splasch (5. Oktober 2007)

Ich habs dir mal zusammen gefasst


```
<?
if($_POST["Eintragen"] == "Eintragen")
{
     #Schreibe in DB
}else if($_POST["Vorschau"] == "Vorschau"){
     #gebe Vorschau aus
}  

?>
<form action="<?=$_SERVER['PHP_SELF'];?>" method="POST">
<input type="Submit" name="Eintragen" value="Eintragen" />  
<input type="Submit" name="Vorschau" value="Vorschau" />
</form>
```

Die Groß kleinschreibung ist ein hund *g

Mfg Splasch


----------



## mad2092 (5. Oktober 2007)

splasch hat gesagt.:


> Ich habs dir mal zusammen gefasst
> 
> 
> ```
> ...



Ganz lieben Dank für den Hinweis und natürlich auch für alle anderen. Ich hatte es so verstanden, dass der Name abgefragt wird und nicht der Value!?
Natürlich kann man den Fehler leicht vermeiden, indem man eine durchgehende Schreibweise anwendet.

Dank mangelder php Kenntnisse steige ich aber immer noch nicht ganz durch. Wie müsste den so ein Befehl für schreibe in die DB bzw. für das Neuladen der Seite aussehen? Ausser header("location: seite.php"); konne ich nichts aussagekräftiges finden?

Vielen Dank noch einmal,
Claus


----------



## Gumbo (5. Oktober 2007)

Besser ist es die Existenz der Variablen zu prüfen:
	
	
	



```
if( isset($_POST["Eintragen"]) ) {
	// Eintragen
} else if( isset($_POST["Vorschau"]) ) {
	// Vorschau anzeigen
}
```


----------



## splasch (5. Oktober 2007)

> Dank mangelder php Kenntnisse steige ich aber immer noch nicht ganz durch. Wie müsste den so ein Befehl für schreibe in die DB bzw. für das Neuladen der Seite aussehen? Ausser header("location: seite.php"); konne ich nichts aussagekräftiges finden?



Das neu Laden der Seite über nihmt der Html Form tag mit den atribut action was in "" zeichen dann steht wird geladen in obigen bsp <?=$_SERVER['PHP_SELF'];?> bedeutet lade die aktuelle datei.

und bei Input name ist der Variblenname der nacher abgefragt wird und value steht für den wert der Variable.

Mfg Splasch


----------



## mad2092 (5. Oktober 2007)

splasch hat gesagt.:


> Das neu Laden der Seite über nihmt der Html Form tag mit den atribut action was in "" zeichen dann steht wird geladen in obigen bsp <?=$_SERVER['PHP_SELF'];?> bedeutet lade die aktuelle datei.
> 
> und bei Input name ist der Variblenname der nacher abgefragt wird und value steht für den wert der Variable.
> 
> Mfg Splasch



hm, ich hab das jetzt so eingbaut, steige aber immer noch nicht durch. 


```
<?php if( isset($_POST["Eintragen"]) ) 
{
// Eintragen
} 
else if( isset($_POST["Vorschau"]) ) 
{
// Vorschau
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"
```

Mir fehlt da der Ansatz was ich bei //Eintragen bzw. // Vorschau definieren muss?


----------



## mad2092 (7. Oktober 2007)

Ich habe das Problem jetzt auf eine andere Art gelöst... dies ist zwar nicht so schön aber es funktioniert. Vielleicht hat ja noch jemand einen Verbesserungsvorschlag hierzu?

Auf meiner Formular (Gästebuch) Eintragsseite gibt es nun nur einen Vorschau Button, über diesen wird das Formular abgesendet (+ insert in die DB) und weitergeleitet an die vorschau.php.

Auf die Art und Weise verhindere ich, dass bei jedem Klick auf Vorschau jedesmal ein neuer Datensatz in die DB geschrieben wird - das ist bei meinem ersten Lösungsansatz passiert.

Auf der vorschau.php habe ich einen Update Recordset eingebaut, und über

```
if( isset($_POST["Eintragen"]) ) {
header("Location: gb_eintrag2.php");
}
```
ermittle ich ob der Button "Eintragen" das entsprechene Value übergibt, wenn ja wird die Seite gb_eintrag2.php aufgerufen.

Ist das Value nicht vorhanden (bei Klick auf den Button Vorschau), wird die vorschau.php neugeladen und der Datensatz aktualisiert.

Was bei mir nicht funktionierte war:

```
<form action="<?php echo $_SERVER['PHP_SELF']; ?>"
```
Wenn ich dies verwendet habe, wurde der Datensatz nicht in die DB DB geschrieben!? Mein Formular sieht aktuell so aus:

```
<form action="<?php echo $editFormAction; ?>" method="POST" enctype="multipart/form-data" name="mytext" target="_parent" id="mytext" onSubmit="YY_checkform('mytext','gbook_autor','#q','0','Bitte geben Sie einen Namen ein!','gbook_titel','#q','0','Bitte geben Sie einen Titel ein!','gbook_email','S','2','Bitte geben Sie eine g&uuml;ltige eMail Adresse ein!','text','1','1','Bitte geben Sie Ihren Text ein!');return document.MM_returnValue">
```
Das gleiche Problem hatte ich auch bei dem Versuch per onClick=".... die gewünschten Seiten aufzurufen, hierbei wurde zwar die Seite aufgerufen, aber das Abschicken des Formulars hatte nicht funktioniert.

Aktuell besteht noch ein Problem, da ich es nicht schaffe, bei der Weiterleitung an die vorschau.php eine ID mitzugeben, ermittle ich dort per SELECT den letzten Datensatz. Bei zwei gleichzeitigen Eintragungen könnte dies in die Hose gehen... 

Ich hoffe, das war einigermaßen verständlich erklärt. Über Anegungen oder Verbesserungsvorschläge würde ich mich freuen.
Vielen Dank schon einmal für Euer Feedback!


----------

