ik heb een form geschreven en een pagina die deze verstuurd waarop een foutmelding komt als iets niet is ingevuld maar hoe geef ik nu de foutmelding op de zelfde pagina weer zodat de persoon de gegevens niet opnieuw hoeft in te voeren als hij wat vergeten is het script is.


[code]
<?php
error_reporting(-1);
ini_set('display_errors', 1);

include '/verbinding.php';
include '/logincheck.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>


<html>

<form method="post" action="adresversturen.php">
<TABLE CELLSPACING="2" CELLPADDING="2" BORDER="0">
<tr>
<td>straatnaam:</td>
<td><input type="text" name="straat" /></td>
</tr>
<tr>
<td>huisnummer:</td>
<td><input type="text" name="huisnummer" /></td>
</tr>
<tr>
<td>postcode:</td>
<td><input type="text" name="postcode" /></td>
</tr>
<tr>
<td>plaats:</td>
<td><input type="text" name="plaats" /></td>
</tr>


<tr>
<td>land:</td>
<td><select name="landid" STYLE="width: 145px">
<?php


$sql = "execute spLandBox";

foreach ($db->query($sql) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}
?>
</select></td>
</tr>
<tr>
<td>Contactpersoon adres:</td>
<td><select name="opdrachtid" STYLE="width: 145px">
<option value="-1">Kies contactpersoon</option>
<?php
$sql = "{CALL spOpdrachtgeverBox (@Opdrachtgeverid=:opdrachtgever)}";
$stmt = $db->prepare($sql);

$opdrachtgeverid = $_SESSION['relatie'];

$stmt->bindParam(':opdrachtgever',$opdrachtgeverid, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt->fetchall(PDO::FETCH_ASSOC) as $row) {
echo printf('<option value="%d">%s</option>', $row['id'], $row['naam']);
}


?>

</select></td>
</tr>


<tr>
<td>opmerkingen:</td>
<td><TEXTAREA Name="opmerking" rows="6" cols="50"></TEXTAREA></td>
</tr>
<?php


<tr>
<td><input type="submit" value="Verzenden">


<INPUT TYPE="button" VALUE="Terug" onClick="history.go(-1);return true;"></td>
</tr>

</form>

</html>




Laat je action in je form leeg zo blijft de form op dezelfde pagina, doe hier bovenaan de controle van het formulier.
Bij de input velden doe je dan bijv:

[code]
//hier de form validatie

<form action="" method="POST">
<input type="text" name="username" value="<? echo (isset($_POST['username']) ? $_POST['username'] : 'Username here');?>"/>
<input type="submit"/>
</form
[code]
maar dat houd dus in dat ik me tweede pagina van het script waar hij naartoe moet op de zelfde pagina moet doen. sorry dat het script er een beetje romelig hier boven uit ziet maar als ik ze op 1 of andere manier allebij plaats dan doet de pagina raar de andere pagina is


adresversturen.php

<?php
error_reporting(-1);
ini_set('display_errors', 1);
include '/logincheck.php';

include '/verbinding.php';
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "{call spAdresToevoegen (@Relatieid=:relatieid,@Plaats=:plaats,@Straat=:straat,@Huisnummer=:huisnummer,@Postcode=:postcode,@Landid=:landid,@opmerking=:opmerking,@Contactid=:opdrachtgever,@foutmelding=:fout)}";
$stmt = $db->prepare($sql);

$relatieid = $_SESSION['relatie'];
$straat = $_POST['straat'];
$huisnummer = $_POST['huisnummer'];
$postcode = $_POST['postcode'];
$plaats = $_POST['plaats'];
$landid = $_POST['landid'];
$opmerking = $_POST['opmerking'];
$opdrachtgever = $_POST['opdrachtid'];

$stmt->bindParam(':relatieid',$relatieid, PDO::PARAM_STR);
$stmt->bindParam(':plaats',$plaats, PDO::PARAM_STR);
$stmt->bindParam(':straat',$straat, PDO::PARAM_STR);
$stmt->bindParam(':huisnummer',$huisnummer, PDO::PARAM_STR);
$stmt->bindParam(':postcode',$postcode, PDO::PARAM_STR);
$stmt->bindParam(':landid',$landid, PDO::PARAM_STR);
$stmt->bindParam(':opmerking',$opmerking, PDO::PARAM_STR);
$stmt->bindParam(':opdrachtgever',$opdrachtgever, PDO::PARAM_STR);
$stmt->bindParam(':fout',$fout, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,100);
$stmt->execute();


if ( $fout == "" ) {
	echo "Adres is toegevoegt";
}

print $fout;





?>
Ja, in je tweede script controleer je waarschijnlijk de geposte gegevens dat zet je nu boven de form.
ja maar als ik action leeg laat hoe worden ze dan gepost op die pagina en zo als je ziet word door mijn database gecheckt of de gegevens kloppen
Je hebt in feite de volgende opties:
1) vanuit het form direct posten naar een andere pagina, waarbij je als er een fout is de user via een redirect terug stuurt.
2) vanuit het form posten naar dezelfde pagina en als alles goed is de user via een redirect doorsturen naar de volgende pagina.
3) een eerste check in javascript uitvoeren zodat je voor normale gebruikers (lees: geen hackers die moedwillig fouten invoeren) alles nog in de browser kan controleren en je dus zeker weet dat als je echt post alles ook voldoet aan je eisen.

3 is de mooiste manier voor de gebruiker, omdat de pagina niet hoeft te herladen. Het kost je alleen wel meer werk, omdat je nog steeds OOK de check op de server moet doen. Bij normale gebruiker zal de browser check wel goed gaan, maar bij iemand die moedwillig die check omzeilt krijg je alsnog corrupte data binnen.
ja 1 lijkt me de makelijkste optie maar daar staat wel in tegen dat de gegevens niet meer ingevuld zijn die ze eerder hadden ingevuld. of is hier een oplossing voor
Dat kan je weer terugsturen met de redirect:

<?php
header( "location: www.iets.nl/test.php?id=1"; );
?>

Dit kan je natuurlijk niet doen met heel veel data, or met gevoelige data. Dat soort data zou je normaal met een POST meegeven, dus enige voorzichtigheid is wel geboden.
maar hoe geef ik dat mee terug dat van header location dat zegt mij genoeg van terugsturen maar ik dacht als je iets in de link wil doen dat je dat met get de boel moet versturen maar kun je mij een wat groter voorbeeld geven. of optie 3 lijkt mij ook wel wat dan moet ik het maar aan de kant zetten van dat de database het checkt hoe doe ik deze
Of.... bedenk ik me nu, je kan het tijdelijk in een sessie stoppen. Dus als je de gebruiker terug moet sturen dat stop je alle info die in POST stond in een sessie, redirect de user terug en op de pagina waar je het form opbouwt check je voor de info in de POST array. Wel daarna direct alles daar weer uit halen, anders blijft de gebruiker hetb elke keer weer terug zien.
ja dat zou kunnen maar mijn inlog systeem werkt ook met sessies dus zodra ik die ga vernietigen is de gebruiker ook uitgelogd en dat is niet de bedoeling

Reageren