foutmelding op zelfde pagina als form

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerhard timmerman

gerhard timmerman

18/04/2012 10:39:50
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?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>
Gewijzigd op 18/04/2012 11:07:57 door Gerhard timmerman
 
PHP hulp

PHP hulp

25/04/2024 21:23:35
 
Gerhard l

gerhard l

18/04/2012 11:03:00
Quote Anchor link
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 (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
//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
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:05:17
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?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;





?>
Gewijzigd op 18/04/2012 11:08:35 door gerhard timmerman
 
Gerhard l

gerhard l

18/04/2012 11:08:16
Quote Anchor link
Ja, in je tweede script controleer je waarschijnlijk de geposte gegevens dat zet je nu boven de form.
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:09:41
Quote Anchor link
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
 
Erwin H

Erwin H

18/04/2012 11:10:59
Quote Anchor link
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.
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:21:37
Quote Anchor link
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
 
Erwin H

Erwin H

18/04/2012 11:28:42
Quote Anchor link
Dat kan je weer terugsturen met de redirect:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?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.
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:30:38
Quote Anchor link
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
Gewijzigd op 18/04/2012 11:31:21 door gerhard timmerman
 
Erwin H

Erwin H

18/04/2012 11:31:43
Quote Anchor link
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.
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:34:03
Quote Anchor link
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
 
Erwin H

Erwin H

18/04/2012 11:50:47
Quote Anchor link
Je hoeft de sessie niet te vernietigen, je hoeft alleen maar de data eruit te halen. Makkelijkst is om alles in een key te zetten, waardoor je alleen die key hoeft te unsetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
//in de pagina waarvandaan je redirect
$_SESSION['form_data'] = array();
foreach( $_POST as $key => $value ){
  $_SESSION['form_data'][$key] = $value
}

//in de pagina waar je het er weer uithaalt
//(nadat je het hebt verwerkt)

unset( $_SESSION['form_data'] );
?>
 
Gerhard timmerman

gerhard timmerman

18/04/2012 11:53:56
Quote Anchor link
ik ga het toch maar met javascript doen ik begin gewoon bij me simpelste formulier maar heb een voorbeeld

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
function validateForm()
 {
 var x=document.forms["myForm"]["fname"].value;
 if (x==null || x=="")
   {
   alert("First name must be filled out");
   return false;
   }
 }


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
function validateForm()
 {
 var x=document.forms["myForm"]["email"].value;
 var atpos=x.indexOf("@");
 var dotpos=x.lastIndexOf(".");
 if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
   {
   alert("Not a valid e-mail address");
   return false;
   }
 }


maar hoe maak ik hier dan 1 van dat als je naam en email adres niet klopt het in de zelfde alert komt. javascript lijkt me toch een stukje mooier
Gewijzigd op 18/04/2012 11:55:04 door gerhard timmerman
 
Gerhard l

gerhard l

18/04/2012 12:01:03
Quote Anchor link
En als er geen gebruik wordt gemaakt van javascript?
 
Gerhard timmerman

gerhard timmerman

18/04/2012 12:03:51
Quote Anchor link
ondervang ik hem daarna door een foutmelding terug te geven van dat het niet stored procedure neit gelukt is helaas zal deze persoon wel alles opneiuw moeten invullen maar dat is maar de meeste mensen gebruiken wel java alleen hoe krijg het nog niet voor elkaar die 2 java valdaties aan elkaar te koppelen zodat het in de zelfde alert komt en zo als wat herwin neer zette voor dat sessies dat is wel weer een werk om in de form terug te krijgen daarom lijkt me java het makelijkst
Gewijzigd op 18/04/2012 12:06:10 door gerhard timmerman
 
Teun Hesseling

Teun Hesseling

18/04/2012 12:12:32
Quote Anchor link
ik doe he meestal op de volgende manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
    if($_POST['bla'] = 'goed enzo'){
        echo 'jeej en redirect of include of iets dergelijks';
    }

    else{
        echo 'Foutje';
    }
}

echo '
    <form method="POST">
        <input type="text" name="bla" value="'
.(isset($_POST['bla']) ? $_POST['bla'] : "").'"
    </form>
'
;
?>


code kan beter, maar het was alleen als voorbeeldje. Hoop dat je het idee snapt
 
Obelix Idefix

Obelix Idefix

18/04/2012 12:58:38
Quote Anchor link
Gerhard timmerman op 18/04/2012 12:03:51:
de meeste mensen gebruiken wel java


java <> javascript!
 
Gerhard timmerman

gerhard timmerman

18/04/2012 13:00:26
Quote Anchor link
met een javascript functie lijkt me toch een betere oplossing dan dat maar dan blijft de vraag hoe maak ik van die 2 1 script met 1 alert en hoe zet ik er meer achter elkaar ik heb het nu zo maar nu negeert hij ze allebij wat gaat hier fout plus hoe doe ik dat met die alert ik zou dit ook maar in de categori html doen omdat niet zo zeer met php te maken heeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<script type="text/javascript">
function validateForm()
{
 var x=document.forms["contacttoevoegen"]["email"].value;
 var atpos=x.indexOf("@");
 var dotpos=x.lastIndexOf(".");
 if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
   {
   alert("Geen geldig email adres");
   return false;
   }
 }
{
 var x=document.forms["contacttoevoegen"]["naam"].value;
 if (x==null || x=="")
   {
   alert("First name must be filled out");
   return false;
   }
 }
 
 
 
 
 </script>
Gewijzigd op 18/04/2012 13:14:40 door gerhard timmerman
 
Obelix Idefix

Obelix Idefix

18/04/2012 17:56:51
 
Gerhard timmerman

gerhard timmerman

18/04/2012 18:05:59
Quote Anchor link
ik heb het al op een andere manier opgelost maar wel met javascript ik zit momenteel niet achter mijn project computer dus zal morgen het script hier posten zodat andere mensen er ook wat aan hebben.
 
Obelix Idefix

Obelix Idefix

18/04/2012 18:08:02
Quote Anchor link
Ga dan aub verder in 1 topic en verwijs naar het andere. Nu ben je in 2 topics bezig over hetzelfde onderwerp.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.