Hoi allemaal,

Ik heb 2 knoppen met allebei een ander functie. Daarom dacht ik dat het handig was om een hidden mee te geven aan de knoppen.

Nou is het probeel dat beide knoppen toch allebei de acties uitvoeren in plaats van 1.

Dit is niet het geval als ik </form> na knop 1 zet, maar dan werkt knop 2 niet meer.

Ik heb de code even flink wat ingekort om hem duidelijk te houden.

Kan iemand mij vertellen wat ik fout doe?


<?php
if (isset($_POST["cursusWijzig"])){
}
if (isset($_POST["cursusOpslaan"])){
}
?>
<html>
<head>
<title>Cursus toevoegen</title>
</head>
<body>
<form method="post" action="">
<table border="1">
<tr>
<td>Naam cursus</td>
<td colspan="2"><input type="text" name="naam" size="38" maxlength="200" value="<? if ($naam != ""){echo $naam;}?>"/></td>
</tr>
<tr>
<input type="hidden" name="workshopWijzig" value="1">
<th colspan="3"><input type="submit" class="submit" name="action" value="Workshop & Cursus toevoegen">
<form name ="input" action="../beheerder/index.php"></form>
</tr>
<tr>
<form method="post" action="">
<input type="hidden" name="workshopOpslaan" value="1">
<th colspan="3"><input type="submit" class="submit" name="action" value="Workshop & Cursus tijdelijk opslaan">
<form name ="input" action="../beheerder/index.php">
</tr>
</table>
</form>
</body>
</html>
Ik weet eigenlijk niet of het geldige HTML is, maar ken je niet 2 knoppen met zelfde naam maken, en op waarde controleren? Want wat je nu doet werkt idd niet, omdat alle knoppen sowieso geset zijn.

[code]
<form method="post" action="#">
<input type="submit" name="submit" value="Opslaan" />
<input type="submit" name="submit" value="Voorbeeld" />
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{

if($_POST['submit'] == "Opslaan")
{
// Actie opslaan
}
if($_POST['submit'] == "Voorbeeld")
{
// Actie Voorbeeld
}

}
?>

Edit
</form> toegevoegd
Beide knoppen hebben de name 'submit'. Maar omdat het geen array is, wordt slechts de 2e knop (als ik het goed heb) doorgegeven aan de server. Met
<?php
print_r($_POST);
?>
krijg je te zien welke gegevens er in de array $_POST zitten. Je zult zien dat $_POST['submit'] slechts 1 waarde heeft en niet nog een array bevat. Zet in je html eens het volgende:

name="submit[]"

en er wordt een array aangemaakt.

Uiteraard kun je beide knoppen ook een verschillende naam geven, de meest eenvoudige oplossing.
en waarom sluit je eerst het </form> en dan de </table>

Staat de tabel in het form?
Lijkt mij andersom
KlaasJan, ik moet er ook erg op letten, dat weet ik, maar probeer beetje op het probleem te blijven ipv over de rest van de HTML te beginnen.

Frank, je hebt uiteraard weer helemaal gelijk :) Had even niet aan array gedacht. Maar met verschillende namen heb je toch weer dat probleem? Dus lijkt mij de array oplossing de enige werkende. Of heb jij mooie oplossing ervoor?

Zit trouwens even te denken(ja gevaarlijk!), maar hoe werkt dat met die array dan? Want ze zijn allebei geset, dus allebei hebben ze een waarde. Hoe weet je dan welke gebruikt is?

Edit
Heb het even getest, en de waarde die je kiest wordt doorgegeven in $_POST['submit'][0], de andere wordt niet meegenomen.
En in geval van verschillende namen, wordt alleen degene geset die je aanklikt, had ik het even goed mis :)

Dus je kan het zo gebruiken:
<?php
if($_SERVER['REQUEST_METHOD'] == "POST")
{
	if(isset($_POST['opslaan']))
	{
		// Opslaan!
	}
	if(isset($_POST['voorbeeld']))
	{
		// Laat voorbeeld zien
	}
}
?>
<form method="post" action="submit.php">
<input type="submit" name="opslaan" value="Opslaan" /><br />
<input type="submit" name="voorbeeld" value="Voorbeeld" />
</form>
Bedankt voor jullie reacties. Ik heb geprobeerd wat Willem-Jan heeft gepost. Maar nog steeds helaas hetzelfde verhaal. Druk ik op 1 knop dan worde beide acties uitgevoerd (dit weet ik omdat er bij beide acties een message aan te pas komt en ik bij beide knoppen allebei te zien krijg.

Dit heb ik nu:

if($_SERVER['REQUEST_METHOD'] == "POST"){

if(isset($_POST['toevoegen'])){
$message .= "Workshop is toegevoegd.";
}

if(isset($_POST['opslaan'])){
$message .= "Workshop is tijdelijk opgeslagen.";
}
}
?>

<html>
<head>
<title>Workshops & Cursus toevoegen</title>
</head>
<body>

<form method="post" action="">
<table border="1">
<tr>
<td colspan="3" class="message">    
<?=$message;?>
</td>
</tr>
<tr>
<input type="hidden" name="cursusWijzig" value="1">
<th colspan="3"><input type="submit" class="submit" name="cursusWijzig" value="Cursus toevoegen"></th>
<form name ="input" action="../beheerder/index.php">
</tr>
<tr>
<input type="hidden" name="cursusOpslaan" value="1">
<th colspan="3"><input type="submit" class="submit" name="cursusOpslaan" value="Cursus tijdelijk opslaan">
<form name ="input" action="../beheerder/index.php">
</tr>
</form>
<table>
</body>
</html>
if(isset($_POST['toevoegen']) && $_POST['toevoegen'] != NULL){
$message .= "Workshop is toegevoegd.";
}

if(isset($_POST['opslaan']) && $_POST['opslaan'] != NULL){
$message .= "Workshop is tijdelijk opgeslagen.";
}



Nu zullen jullie wel denken, waarom??

Om het volgende: De buttons staan in HETZELFDE formulier, ze worden wel beiden geset, maar als het goed is wordt er maar bij 1 van beiden een value meegegeven.
Waarom heb je 3x <form> in je formulier staan? Zijn het verschillende formulieren? En waarom sluit je deze tags niet af?
Robert schreef op 09.06.2006 23:24
if(isset($_POST['toevoegen']) && $_POST['toevoegen'] != NULL){
$message .= "Workshop is toegevoegd.";
}

if(isset($_POST['opslaan']) && $_POST['opslaan'] != NULL){
$message .= "Workshop is tijdelijk opgeslagen.";
}



Nu zullen jullie wel denken, waarom??

Om het volgende: De buttons staan in HETZELFDE formulier, ze worden wel beiden geset, maar als het goed is wordt er maar bij 1 van beiden een value meegegeven.


Ik had hem getest (PHP5), met print_r, maar er kwam echt maar 1 van de 2 knoppen in de $_POST array.
Sorry Willem-Jan, Ik had een foutje gemaakt. Ik heb het foutje eruit gehaald en hij werkt goed! Bedankt allemaal! :)
@Willem-Jan

Met de print_r print hij de inhoud toch van de array, wanneer $_POST['array']['waarde'] dan NULL is, print die ook niets, dus je ziet hem niet, terwijl hij wel is geset.

Probeer nu ook eens het volgende in jou scriptje dan:

if(isset($_POST['array']['waarde'])){
$message .= "Waarde 1 is geset";
}

if(isset($_POST['array']['waarde'])){
$message .= "Waarde 2 is geset";
}

Reageren