<form action> na controles
Nu wil ik dat als er op de submit button wordt gedrukt er eerst een paar controllers worden uitgevoerd en daarna naar een andere pagina wordt gelinkt.
Die controles werken goed, nu kan ik wel doorlinken via meta tags. Maar nu wil ik ook variabelen mee geven. Dit kan nu dan niet via $_POST['..'] variabelen, wel via $_GET['..'] variabelen.
Maar nu is dan het probleem dat je de inhoud van de variabelen kan veranderen door de url balk aan te passen.
Is het nu mogelijk om eerst controles uit te voeren en daarna via <form method="post" action="pagina.php?stap=2"> verder te gaan?
Of is een andere oplossing beter?
(Ik hoop dat ik het duidelijk heb uitgelegd)
Ja hoor dat kan. Je hebt dan wat javascript nodig.
Frank Nietbelangrijk op 21/10/2012 15:35:48:
Ja hoor dat kan. Je hebt dan wat javascript nodig.
Kan je me dan ook uitleggen hoe?
Code (php)
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
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
<?php
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>
?>
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>
?>
zie http://www.w3schools.com/js/js_form_validation.asp
Frank Nietbelangrijk op 21/10/2012 15:38:35:
zie http://www.w3schools.com/js/js_form_validation.asp
Code (php)
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
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
<?php
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>
?>
<!DOCTYPE html>
<html>
<head>
<script>
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("First name must be filled out");
return false;
}
}
</script>
</head>
<body>
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>
</body>
</html>
?>
zie http://www.w3schools.com/js/js_form_validation.asp
Bedankt voor je reatie, nu wordt er gecontroleerd of alles klopt via javasscript.
Maar is het nu ook nog mogelijk om het in php te laten controleren en alleen het doorlinken via javascript te doen?
Toevoeging:
Ik heb dit geprobeerd, maar dan wordt hij altijd doorgaschakeld, ook als het input field leeg is.
Code (php)
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
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
<!DOCTYPE html>
<html>
<head>
<?php
function validateForm()
{
if ($_POST['fname'] == ''){
echo 'ERROR';
return false;
}
}
?>
</head>
<body>
<?php
if($_GET['resultaat'] != '1'){
echo '<form name="myForm" action="?resultaat=1" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>';
}else{
echo $_POST['fname'];
}
?>
</body>
</html>
<html>
<head>
<?php
function validateForm()
{
if ($_POST['fname'] == ''){
echo 'ERROR';
return false;
}
}
?>
</head>
<body>
<?php
if($_GET['resultaat'] != '1'){
echo '<form name="myForm" action="?resultaat=1" onsubmit="return validateForm()" method="post">
First name: <input type="text" name="fname">
<input type="submit" value="Submit">
</form>';
}else{
echo $_POST['fname'];
}
?>
</body>
</html>
Gewijzigd op 21/10/2012 15:51:50 door Tom aan t Goor
Gewijzigd op 21/10/2012 15:58:50 door - SanThe -
Je kunt javascript gebruiken voor simpele controlles zoals de vraag of er wel een naam is ingevuld.
Echter dit is heeeeel makkelijk te omzeilen. Je MOET dus alles in PHP filteren.
Een bekende uitspraak is dat alle input van buiten je script als vervuild moet worden beschouwd.
Een hele goed controlle/validatie/filtering is dus onontbeerlijk
Frank
- SanThe - op 21/10/2012 15:58:08:
OnSubmit zoekt nu een Javascript function en die is er niet.
Kan ik dan ook iets ander gebruiken dan OnSubmit zodat hij wel naar een php functie zoekt?
Van JS merkt juist de server niks en weet alleen je browser wat hij er mee moet.
Je kan dus niet zomaar van JS naar PHP gaan. De enige mogelijkheid die er is is werken met AJAX in JS, maar dat is zonder een framework een bijna onmogelijke opgave.
Wouter J op 21/10/2012 16:05:45:
Tom, PHP en JavaScript zijn 2 verschillende dingen. PHP wordt op de server uitgevoerd. Een browser en zelfs je laptop merken 0 komma 0 van PHP. Alleen de server weet af van PHP.
Van JS merkt juist de server niks en weet alleen je browser wat hij er mee moet.
Je kan dus niet zomaar van JS naar PHP gaan. De enige mogelijkheid die er is is werken met AJAX in JS, maar dat is zonder een framework een bijna onmogelijke opgave.
Van JS merkt juist de server niks en weet alleen je browser wat hij er mee moet.
Je kan dus niet zomaar van JS naar PHP gaan. De enige mogelijkheid die er is is werken met AJAX in JS, maar dat is zonder een framework een bijna onmogelijke opgave.
Bedankt voor je reactie,
Dit gaat dus nooit lukken. Is er dan nog een andere manier om mijn probleem op te lossen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script>
function validateForm(f) {
for (var i in f.elements) {
el = f.elements[i];
if (el.rel == "required" && (el.value == null || el.value.trim() == '')) {
alert(el.title + ' moet zijn ingevuld');
return false;
}
}
return true;
}
</script>
<form name="aForm" action="procesform.php" onsubmit="return validateForm(this.form);" method="post">
<input type="text" title="Voornaam" name="firstname" rel="required">
<input type="submit" value="Verstuur">
</form>
function validateForm(f) {
for (var i in f.elements) {
el = f.elements[i];
if (el.rel == "required" && (el.value == null || el.value.trim() == '')) {
alert(el.title + ' moet zijn ingevuld');
return false;
}
}
return true;
}
</script>
<form name="aForm" action="procesform.php" onsubmit="return validateForm(this.form);" method="post">
<input type="text" title="Voornaam" name="firstname" rel="required">
<input type="submit" value="Verstuur">
</form>
javascript is inderdaad heel eenvoudig te omzeilen, je kan zelfs door je site te inspecteren zo iets al snel uitschakelen maar het is wel mooi dat het allemaal live gecontroleerd wordt maar dan kan je toch best altijd een extra controle met php doen voor de veiligheid want clientside == hackbaar, server side ook tenzij je voor een waterdichte beveiliging van je script zorgt.
Overigens kan je er ook één form maken, en met JS die stappen doorlopen
Maar het enige dat ik dan kan verzinnen is wel via een meta tag doorsturen met $_GET['..'] waardes?
Daarnasst hou je in een sessie var bij welke stap de goede is. Bv(in pagina.php):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isset($_SESSION['step'])) {
$_SESSION['step'] = 1;
}
else {
$_SESSION['step'] += 1;
}
if((int) $_POST['step'] != $_SESSION['step']) {
header("Location : http://www.hackersgetkilledhere.com");
exit;
}
// hier de rest van je dingen afhandelen
}
?>
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!isset($_SESSION['step'])) {
$_SESSION['step'] = 1;
}
else {
$_SESSION['step'] += 1;
}
if((int) $_POST['step'] != $_SESSION['step']) {
header("Location : http://www.hackersgetkilledhere.com");
exit;
}
// hier de rest van je dingen afhandelen
}
?>
Gewijzigd op 21/10/2012 16:52:23 door Ger van Steenderen
dus je post de data via ajax naar je server en als hij een goede result terug stuurd ga je veder?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$.post(`bestand.php`, {postdata}, function(back){
if(back = 1){
alert(`ok`);
}elseif(back = 2){
alert(`fout`);
}
});
if(back = 1){
alert(`ok`);
}elseif(back = 2){
alert(`fout`);
}
});
dus als hij 1 terug stuurd is alles goed gegaan en als je 2 terug krijg is er iets fout gegaan!
zo kan je natuurlijk ook bij 1 zeggen geen naam 2 geen email 3 alles ok
(zit op tablet het is dus niet getest en uitgebruid!)
Gewijzigd op 21/10/2012 17:51:15 door ScrapZz nl
Hoe dan ook, JQuery is ook JavaScript en dus te manupileren, dus moet je nog steeds die controles in PHP uitvoeren.
Zet na alle controles de gegevens die je op de volgende pagina wilt gebruiken in een sessie en met een header kun je dan doorsturen.
Gewijzigd op 21/10/2012 22:01:44 door Andy V