Input kwijt na return to page...

Status
Niet open voor verdere reacties.

Gregg

Gebruiker
Lid geworden
8 okt 2008
Berichten
68
Hallo iedereen,

ik heb een probleempje.
De gebruiker moet 2 velden invoeren alvorens het formulier verzonden wordt..
indien 1 van de 2 ( of alle 2) velden niet ingevuld wordt.. krijgt hij een php melding dat niet alles ingevuld is en dat hij moet teruggaan naar de pagina met het formulier...
(via javascript:history.go(-1) )

eens terug op deze pagina zijn alle velden terug leeg...
kan dit opgevangen worden zodat hetgeen wat ingevuld is er blijft staan?

of is dit onmogelijk?

alvast bedankt voor de reaktie
 
Als je javascript gebruikt is het vrij lastig denk ik; als je PHP gebruikt kun je de gebruiker verwijzen naar dezelfde pagina en als het fout is, de value velden van HTML setten met de ingevulde waarden.
 
Je leest die waarde uit via POST (of GET).
Wat je doet is eerst de velden uitlezen, dan de waardes opslaan in een sessievariabele en vervolgens controleren of er wat ingevuld is.
Is er niks ingevuld, dan stuur je de gebruiker dmv header("location: pagina.php") terug naar de pagina waar het invulveld staat.
Je invulvelden zijn doorgaans leeg. de input tag kun je echter ook een standaard waarde voor het veld meegeven. Die standaardwaarde wordt je sessievariabele waar je de inhoud in opslaat.
Bestaat die niet, dan blijft het veld leeg. Bestaat die wel, dan wordt het veld ingevuld.
Nadat je de variabele hebt gebruikt moet je ze wel weer verwijderen, anders heb je kans dat je er later last van krijgt.

velden in velden.php
PHP:
<?php session_start(): ?>
<form action="script.php" method="POST">
<input type="text" name="veld1" id="veld1" value="<?php $_SESSION['veld1'] ?>"/>
<input type="text" name="veld2" id="veld2" value="<?php $_SESSION['veld2'] ?>"/>
<input type="submit" value="Verzenden"/>
</form>
<?php
unset($_SESSION['veld1']);
unset($_SESSION['veld2']);
?>

en het script in script.php
PHP:
<?php
session_start();
$veld1 = $_POST['veld1'];
$veld2 = $_POST['veld2'];
$_SESSION['veld1'] = $veld1;
$_SESSION['veld2'] = $veld2;

if(veld1.length == 0 || veld2.length ==0) {
header("location: velden.php");
}
else (
//de php code als het wel goed is
}
 
Laatst bewerkt:
Dit:

PHP:
if(veld1.length == 0 || veld2.length ==0)

Is geen PHP, ik denk dat je met javascript in de war bent.

Doe het anders op de volgende manier:

PHP:
if(trim($veld1) == '' || trim($veld2) == '')
 
<?php $_SESSION['veld1'] ?>

Daar zou ik nog een 'echo' bij gooien.
 
<?php $_SESSION['veld1'] ?>

Daar zou ik nog een 'echo' bij gooien.

Dat hoeft niet, omdat je het binnen de 'value' parameter van de input tag gebruikt.

ErikBooy007 zei:
Dit:

PHP:
if(veld1.length == 0 || veld2.length ==0)
Is geen PHP, ik denk dat je met javascript in de war bent.

Oops...
Moet natuurlijk zijn:

PHP:
if(strlen(veld1) == 0 || strlen(veld2) ==0)
 
Laatst bewerkt:
het lijkt nog niet te werken..

Hier krijg ik "undefined .... onderwerp

PHP:
<form action="nieuwsbrief_zenden.php" method="post">
<table width="75%" border="0" align="center">
  <tr> 
    <td><div align="center"><font face="haettenschweiler">onderwerp</font><br>
        <input type="text" name="onderwerp" id='onderwerp' size="40" value="<?php echo $_SESSION['onderwerp']?>">
      </div></td>
  </tr>
  <tr> 
    <td><div align="center"><font face="haettenschweiler">bericht</font><br>
            <textarea name="content" id="content" cols="90" rows="20" value="<?php $_SESSION['content']?>"></textarea>
			<script language="JavaScript">
  			generate_wysiwyg('content');
			</script> 
			<br>
            <font size="2" face="Comic Sans MS">Volledig path ingeven voor afbeelingen!!!<br>Vergeet het onderwerp niet!!!</font>
          <p>
            <input type="submit" name="Submit" value="Verzend Nieuwsbrief">
             <input type="submit" name="Submit" value="Preview">
          </p>
        </div></td>
  </tr>
</table>
</form>
  <?php
 unset($_SESSION['onderwerp']);
 unset($_SESSION['content']);
?>


En als ik hier op "preview" klik ga ik automatisch naar terug naar mijn "formulier-pagina" zonder dat het verzonden wordt.. en zonder dat de waarden er nog staan...
maw... het probleem is nog groter geworden... :confused:


(deel van de code)

PHP:
}elseif($submit == 'Preview'){  // sturen van een preview
							$bericht = stripslashes($_POST['content']);
							$onderwerp = stripslashes($_POST['onderwerp']);
							$_SESSION['content'] = $bericht;
							$_SESSION['onderwerp'] = $onderwerp;
							$tekst = 	"<html>
										<head>
										<font color='#ff0000' ><left>Indien deze mailing onleesbaar is, gelieve 
										<a href=blabla/promo_groot.php'>hier</a> te 
										klikken om de online versie te bekijken.</left></font><hr><br><br>
										</head>
										<body>
										$bericht
										</body>
										</html>";
							if(trim($onderwerp) != '' && trim($bericht) != '' && $bericht != '<br>'){ // aangezien er standaar vanuit de WYSIWIG Editor <br> meegestuurd wordt, wordt deze 
																				//<br> bij deze genegeerd en wordt her formulier niet verzonden als bericht leef is
							$query = "SELECT email FROM `nieuwsbrief` WHERE email= blabla@bla.bla";
							$result = mysql_query($query);
							while($row = mysql_fetch_array($result)){
							$headers = "From: Blabla \r\n;";
							$headers .= "MIME-Version: 1.0\r\n";
							$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
							mail($row['email'], $onderwerp, $tekst, $headers); 
							};
							echo '<br><br><br><br><br><br><br><div class="phpsuccess"><center>Uw nieuwsbrief is verzonden!</center></div><br />
									<center><p><a href="javascript:window.close()" class=tekstlink>Sluit dit venster</a></p></center>';
							}else{
										echo '<br><br><br><br><br><br><br><div class="phperror"><center>Gelieve alle gegevens correct in te vullen!</center></div>';
										header ("location: nieuwsbrief_opstellen_groot.php");
 
Even voor de duidelijkheid,

Die 'echo' moet er zeker wel staan. Als je die value niet echoot (??) dan komt die ook nooit bij de browser aan. Dus die moet er gewoon in.

Daarnaast gaf ik je een verbetering voor je fout en besluit je dan toch een inferieure oplossing te gebruiken. Niet slim.

Als je jouw manier gebruikt:

PHP:
if(strlen(veld1) == 0 || strlen(veld2) ==0)

Resulteert dat ook in true als ik een spatie ingeef of welk ander 'non-printing' character dan ook.

Mijn manier vangt dat echter wel af door alle whitespace aan het begin en eind weg te halen en dan te kijken of de string leeg is.

Dus je kunt beter gewoon:

PHP:
if(trim($veld1) == '' || trim($veld2) == '')

gebruiken. Daarnaast wil het in PHP nog wel eens handig zijn om dollartekens ($) voor je variabelenamen te zetten (zelfde regel).
 
Waarom unset je trouwens meteen de sessie? Als de gebruiker de pagina nog eens wil verversen dan? Goh, dan is je sessie weg.

Dat zou ik dus ook weghalen.
 
Even voor de duidelijkheid,

Die 'echo' moet er zeker wel staan. Als je die value niet echoot (??) dan komt die ook nooit bij de browser aan. Dus die moet er gewoon in.

Probeer het eens uit, want ik gebruik daar NOOIT een echo en het werkt altijd prima.
Ga je daar een echo gebruiken, dan wordt de inhoud van de sessievariabele direct in de browser geprint. Dat wil je niet, je wil dat je tekstveld die waarde krijgt.
Ga je hem binnen een echo zetten en laad je de pagina voor het eerst (dus zonder dat de sessievariabelen bestaan), dan krijg je foutmeldingen terug ($_SESSION['onderwerp'] is not defined).

Wat betreft je opmerking mbt strlen(): daar heb je gelijk in.

Waarom unset je trouwens meteen de sessie? Als de gebruiker de pagina nog eens wil verversen dan? Goh, dan is je sessie weg.
.

Is een ontwerpkeuze en afhankelijk van je voorkeuren en de rest van de applicatie wel of niet toe te passen.
refreshen van een pagina is sowieso niet handig, dat weten de meeste gebruikers wel (uit ervaring... :P), maar er is wat voor te zeggen.

@TS: je vergeet session_start() in beide pagina's.
 
Laatst bewerkt:
Als je daar geen echo zet, komt de inhoud niet in de output terecht en bereikt dus NIET de browser. De reden waarom die er bij jou nog staat komt misschien doordat de hele pagina (inclusief ingevoerde info) nog in je cache zit en eigenlijk helemaal niet herladen wordt. Maar kijk gerust je HTML bron er eens op na.

Voor wat betreft het feit dat de sessie niet altijd bestaat, heb je gelijk, daar is dit dan een oplossing voor.

PHP:
<input type="text" name="veld1" id="veld1" value="<?php echo (isset($_SESSION['veld1'])) ? $_SESSION['veld1'] : ''; ?>"/>
 
Als je daar geen echo zet, komt de inhoud niet in de output terecht en bereikt dus NIET de browser. De reden waarom die er bij jou nog staat komt misschien doordat de hele pagina (inclusief ingevoerde info) nog in je cache zit en eigenlijk helemaal niet herladen wordt. Maar kijk gerust je HTML bron er eens op na.

Gedaan, en de value is gelijk.
Tevens even een pagina bekeken waar informatie uit een database gehaald wordt, in de sessie gezet en vervolgens op deze manier getoond wordt (ingevulde tekstvelden dmv value="<?php $_SESSION['varnaam'] ?>", en ook daar is de value gewoon ingevuld in de html broncode.

{EDIT}
Bij nader inzien... daar staat dus wel een echo.
Nu moet ik mezelf toch eens laten nakijken, als ik zelfs niet meer weet welke code ik zelf zit te schrijven... :shocked:
{/EDIT}
 
Laatst bewerkt:
ok... de boodschap.. undefined index : onderwerp is inderdaad weg..

ook de content van onderwerp blijft staan als ik terug ga.
maar de content van "content" niet
 
Dan heb je waarschijnlijk met je server instellingen zitten knoeien, want standaard hoort dat niet te gebeuren en je kunt dan ook beter mijn manier gebruiken (hoewel ik me afvraag of het nog zin heeft om jou dat te proberen uit te leggen).
 
ik volg toch de raad op?

ben nog vrij recent bezig met PHP dus.. heb wat geduld ;)
 
@Gregg,

Die reactie was NIET voor jou bedoeld! Die was voor Rene.

Excuses als je dit niet zo opgevat hebt.
 
maar daarmee is mijn probleem nog niet opgelost natuurlijk :confused:

dus onderwerp blijft staan... maar de inhoud van het textarea niet..
 
Dat komt omdat de textarea tag geen value parameter heeft.
Je moet de echo van de sessievariabele tussen de textarea en /textarea tag zetten.
 
Dat komt omdat de textarea tag geen value parameter heeft.
Je moet de echo van de sessievariabele tussen de textarea en /textarea tag zetten.

staat er tussen hoor

PHP:
<textarea name="content" id="content" cols="90" rows="20" value="<?php echo (isset($_SESSION['content'])) ? $_SESSION['content'] : '';?>"></textarea>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan