Submit knop naar vorige pagina

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin Zegikniet

Kevin Zegikniet

13/11/2012 21:27:48
Quote Anchor link
Hallo mensen,

Ik moet een datingsite maken voor school, bla bla bla (zie mijn andere post hiero).

Ik wil nu een knop maken/ontwerpen/hoe-dat-ook-maar-heet, waarmee je naar de vorige pagina gaat.
Achtergrondverhaal:
Kenmerken invullen
Voornaam, achternaam, geslacht, beroep, etc
Klik op versturen naar volgende script (die alle gegevens in de database zet).
Dit script controleert eerst of alles ingevuld is. Is niet zo.

Vraag is nu:
Hoe kan ik op die pagina een knop maken die naar de vorige pagina teruggaat?
(zoals de knop vorige, linksbovenin de browser)
Ik kan wel een knop maken die doorstuurt naar het vorige script, maar dan zijn de wel ingevulde velden leeg.
Of moet ik dan de ingevulde values doorsturen($_POST) en die weer valuen in de input value?

Of kan ik beter een automatisch doorsturen script schrijven? (zegmaar script ziet: veld is leeg; doorsturen naar volgende script (is dus de vorige maar velden zijn nu leeg) en stop de ingevulde dingen weer in het goede veld)

Wat kan ik beter doen: knop of automatisch?

ALvast bedankt!
 
PHP hulp

PHP hulp

21/11/2024 22:44:44
 
Reshad F

Reshad F

13/11/2012 21:32:43
Quote Anchor link
Je moet gaan werken met SESSIONS.
 
Kevin Zegikniet

Kevin Zegikniet

13/11/2012 21:49:45
Quote Anchor link
Dat snap ik. Welke is handiger in jullie opzicht?
 
Kris Peeters

Kris Peeters

13/11/2012 22:28:18
Quote Anchor link
Probeer dit eens

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
<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // deze post kopiëren naar een session variabele
    $_SESSION['login'] = $_POST;
    // doe verder wat je moet doen
    header('location: ?');
}

$formvalues = array(
    'username' => isset($_SESSION['login']['username']) ? $_SESSION['login']['username'] : '',
    'email' => isset($_SESSION['login']['email']) ? $_SESSION['login']['email'] : ''
);  // zie 'ternary operator': if ? then : else ;
// doctype ... html ...

echo '
<form method="post" action="">
    <input name="username" value="'
. htmlentities($formvalues['username']) . '"> Naam<br>
    <input name="email" type="email" value="'
. htmlentities($formvalues['email']) . '"> e-mail<br>
    <input value="GO!" type="submit">
    <input value="Toch maar niet" type="button" onclick="window.history.back();">
    
</form>'
;
?>


vrij simpel een post (dat is dus een array) kopiëren naar een session variabele.
 
Kevin Zegikniet

Kevin Zegikniet

13/11/2012 22:56:03
Quote Anchor link
@kris peeters
Hardstikke mooi script!
Paar vraagjes:

Wat is dit?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_SERVER["REQUEST_METHOD'] === 'POST'
Ik heb die laatste knop (windows history back ofzo) gepakt, maar als ik die dan invul (met of zonder form) in mijn phpscript, krijg ik beide keren "syntax error, unexpected '<' on line (waar of '<input' of '<form' begint"

Ik heb jouw scriptje gepakt, en die doet het wel gewoon.
Die knop GO! waar gaat die naartoe? hetzelfde script over and over again, till infinity and beyond?
of gaat die naar wat in de form action staat (maar daar staat nu niks, dus die blijft voor eeuwig dit script herladen?)
Ik heb trouwens wel door dat alles weer leeg is, als je de session destroyt (heb klein loguit scriptje gejat/gemaakt en gerund)

Enne weet jij ook of er meer van die opties bestaan al bij input type email?
Deze geeft namelijk aan als je een ongeldig email hebt ingevoerd op het moment dat je wilt verzenden, en blijft dan op dezelfde pagina met een mooi wolkje erbij.

Weet jij ook of dat bij andere functies (ik heb bijv. twee textvelden voor password (no 1 en no 2) die in het volgende script worden gecontroleerd) (of bijv. de geboortedatum: of die wel ingevuld is en dus niet 1-1-2012 waar die standaard op staat) mogelijk is?
Thnx!
Gewijzigd op 13/11/2012 23:15:20 door Kevin Zegikniet
 
Reshad F

Reshad F

14/11/2012 01:10:39
Quote Anchor link
antwoord op vraag 1 : hiermee controleer je of een gebruiker op een button heeft geklikt in normaal Nederlands even uitgelegd.

antwoord op vraag 2 : GO verwijst nu naar de pagina zelf omdat je in dit stukje <form method="post" action=""> in je action niets hebt ingevuld.

antwoord op vraag 3 : dit is geïntroduceerd in html5 en werkt nog niet crossbrowser zie hier welke types in jou browser werken en welke niet http://miketaylr.com/code/input-type-attr.html ( ik zou dit voor nu gewoon met JavaScript afhandelen met een PHP fallback )

antwoord op vraag 4 : hiervoor moet je weer php raadplegen. een aantal voorbeeldjes

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if($a == $b) {
 //gelijk
}
else {
 //ongelijk
}
?>


voor de geboortedatum kan je een regex ( regular expression ) gebruiken die het voor je controleert.
Gewijzigd op 14/11/2012 01:11:18 door Reshad F
 
Kris Peeters

Kris Peeters

14/11/2012 11:21:30
Quote Anchor link
Kevin Zegikniet op 13/11/2012 22:56:03:
... Die knop GO! waar gaat die naartoe? hetzelfde script over and over again, till infinity and beyond? ...


Het idee hier:
Ik vind het altijd handiger om het form te verwerken op het zelfde bestand waar het formulier gemaakt is.
Dus, een action=""

Eens het formulier verwerkt is, kan je de gebruiker nog steeds naar een volgende pagina sturen, met header().
Dus, je doet iets met de resultaten, je controleert of alles goed is ...
en dan iets als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// doe verder wat je moet doen
if ($all_okay) {  // wat die $all_okay ook is ...
  header('location: volgende_pagina.php');
  exit;
}

else {
  header('location: ?');  en dan blijft de gebruiker op de pagina
  exit;
}

?>
 
Kevin Zegikniet

Kevin Zegikniet

14/11/2012 15:16:50
Quote Anchor link
@Reshad F
Vraag 4: ik bedoelde eigenlijk wat anders.
Bij het email-type kijkt de "verzendknop" of er iets is ingevuld en of dat geldig is, en is dit niet zo,
dan blijft de pagina staan (gaat niet naar volgende script), en er komt een mooi wolkje bij.

Mijn vraag was eigenlijk, of dat wolkje alleen bij type="email" hoort, of dat dit bij meer hoort.
Bij type text kan ik me dit voorstellen dat het niet zo is, maar bijvoorbeeld bij type="password" lijkt het me wel handig (ook weer, kan me voorstellen dat het niet zo is, een leeg password wordt ook gewoon geaccepteerd).
De leeftijd kan ik ook al berekenen (als je jonger dan 18jaar bent, mag je niet registreren), maar ik wilde/wou eigenlijk dat je dan meteen overal een mooi wolkje ziet.

@Kris Peeters:
Als je bij action="" niets invult, laadt deze dan hetzelfde script opnieuw? Dan zou ik dus gewoon de helft van de velden kunnen invullen, en de controle ervan op dezelfde pagina kunnen zetten, in het idee van:
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
check if $controle==1 (eerste keer is dit 0)
{ check if empty(iets)
    { $error = 1;
       print error: $variabele is leeg! }
else {doorsturen
naar
database
}

IF (controle==1 AND error=1) OR (controle==0)
{FORM ACTION=""
ALLE INPUT
/FORM
controle=1}


Zoiets?

Toevoeging op 14/11/2012 15:26:13:

zegmaar dit:
- ben je hier al geweest?
JA
- controleer of er iets leeg is:
JA error printen, $error=1
NEE doorsturen naar database
(nee is er niet)

IS CONTROLE=0 or error=1 (dus als: eerste keer hier OF niet alles ingevuld)
JA inputten
NEE doorsturen naar profiel
--> je bent hier al geweest maar geen error dus alles is goed
--> error = 0 kan niet znoder dat controle=1, zie hierboven
end
Gewijzigd op 14/11/2012 15:22:49 door Kevin Zegikniet
 
Reshad F

Reshad F

14/11/2012 16:01:36
Quote Anchor link
Zelfs het erin gieten werkt niet volgens mij.. Lees mijn antwoord nou is goed door een paar keer en kijk wat ik precies zeg. de TYPE attribuut dus type='email' etc heeft voor meerdere dingen een type ( bijvoorbeeld voor integers enz ) of telefoonnummers etc etc.. maar dit werkt nog niet voor elk browser. dus je kan dit beter met Javascript oplossen ( leuk wolkje ) en met een php fallback script erachter voor als iemand JS uit heeft staan.

aantal dingen waar je op kan googlen: Javascript form validation, PHP form validation.
 
Kris Peeters

Kris Peeters

14/11/2012 16:09:53
Quote Anchor link
Het mag allemaal, hoor.
Ik zie gewoon meer mogelijkheden wanneer je de target leeg laat.

Aan het einde van een post-verzoek (verwerking van de gegevens) komt toch altijd header(...)
Je houdt dan het formulier en zijn verwerking samen. Aanpassingen gebeuren dan op 1 php-bestand.

Het is toch op basis van het verwerken van het formulier dat je beslist of de gebruiker door mag naar een volgende stap, ofwel dat het formulier opnieuw moet worden ingevuld.

Het is dan toch eenvoudiger als je pas redirect op het moment dat je ziet dat alles in orde is.
Dan moet je je niet meer bezig houden met stappen terug te zetten. Enkel vooruit.


PS.
Je kan aan je formulier een extra hidden veld meegeven
<input type="hidden" name="stap" value="1">
De tweede keer dat je het formulier toont kan je die value op twee zetten.
Dan heb je bij de tweede submit een waarde die jou duidelijk maakt of je verder moet of niet.
Gewijzigd op 14/11/2012 16:49:45 door Kris Peeters
 
Kevin Zegikniet

Kevin Zegikniet

14/11/2012 21:48:28
Quote Anchor link
@kris Peeters
Dat van die hidden value heb ik al gedaan. Ik heb nu het invulscript en het controleer/doorstuur script in een gedaan. Zie code hieronder.

Probleem is nu: (of eigenlijk 2)
Als ik een geboortedatum invul die niet de standaarddatum is (1-1-2012), krijg ik geen error, terwijl ik dat wel ingesteld heb. Laat ik de datum op de standaard staan (1-1-2012), krijg ik wel een error dat 'ie niet ingevuld is.

Daarna:
Als alles goed ingevuld is doet 'ie dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
De volgende gegevens zijn ingevoerd
Voornaam: ($voornaam)
etc

HIER KOMT DAN WEER HET INVULLEN TEVOORSCHIJN


Hoe kan ik dit veranderen? Let wel dat ik html en php door elkaar gebruik. Is misschien niet helemaal mooi, maar het werkt voor mij wel.
Code:
[spoiler]
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<html>
<head>
<title>Forever Alone Dating - Registratie</title>
</head>
<body>
<center><img border="0" src="/Dating/WIP/Forever_Alone_Dating.png" alt="Forever Alone Dating logo" width="256" height="183"></center> <br />

<?php
IF ($_POST[controle]=="TRUE") {
$con = mysql_connect("localhost","root","");
if (!$con)
    {
die('Could not connect: ' . mysql_error()); }

mysql_select_db("datingsite", $con);

$geboortedatum = mktime(0, 0, 0, $_POST[maand], $_POST[dag], $_POST[jaar]);
$t = time();
$leeftijdsec = ($geboortedatum < 0) ? ( $t + ($geboortedatum * -1) ) : $t - $geboortedatum;
$leeftijd = floor($leeftijdsec / "31536000");

if (
   (
empty($_POST[username]))
OR (empty($_POST[password1]))
OR (empty($_POST[password2]))
OR (($_POST[password1]) != ($_POST[password2]))
OR (empty($_POST[emailadres]))
OR (($_POST[dag] == "1") AND ($_POST[maand] == "1") AND ($_POST[jaar] == "2012"))
OR ($leeftijd < "18")
)
    {
$error_head=("<b>!!  ERROR  !!</b>");
    $error="1"; }

IF ($error==1)
    {

    IF (empty($_POST[username]))
        {
$error_user="Je hebt je <u>Gebruikersnaam</u> niet ingevuld!<br />"; }
    IF (($_POST[password1]) != ($_POST[password2]))
        {
$error_pass1="Je hebt niet twee keer <u>hetzelfde</u> Wachtwoord ingevuld!<br />"; }
    IF ((empty($_POST[password1])) OR (empty($_POST[password2])))
        {
$error_pass2="Je moet wel je Wachtwoord <u>twee keer</u> invullen!<br />"; }
    IF ((empty($_POST[password1])) AND (empty($_POST[password2])))
        {
$error_pass1 = $error_pass2 = "Je hebt <u>beide Wachtwoorden</u> niet ingevuld!<br />"; }
    IF (empty($_POST[emailadres]))
        {
$error_email="Je hebt je <u>E-mailadres</u> niet ingevuld!<br />"; }
    IF (($_POST[dag] == "1") AND ($_POST[maand] == "1") AND ($_POST[jaar] == "2012"))
        {
$error_leeftijd="Je hebt je <u>Geboortedatum</u> niet ingevuld!<br />"; }
    IF (($leeftijd < "18") AND ($leeftijd > "0") AND ($error_leeftijd!=""))
        {
$error_leeftijd="Je bent te <u>Jong</u> om je aan te mogen melden!<br />"; }
}


else {
$sql="INSERT INTO user (username, password, emailadres, dag, maand, jaar)
VALUES('$_POST[username]', '$_POST[password2]', '$_POST[emailadres]', '$_POST[dag]', '$_POST[maand]', '$_POST[jaar]')"
;

echo
"De volgende gegevens zijn toegevoegd: <br />
Gebruikersnaam: $_POST[username]<br />
Wachtwoord: $_POST[password2]<br />
E-mailadres: $_POST[emailadres]<br />
Geboortedatum: $_POST[dag] $_POST[maand] $_POST[jaar]<br />"
;

if (!mysql_query($sql,$con))
    {
die('Error: ' . mysql_error()); }

mysql_close($con); }
}

?>


<form action="" method="post">
<center> <big><b>REGISTREREN</b></big> </center><br />
<font color="#FF0000">
<?php echo $error_head; ?><br />
</font>
<table> <!-- Normale Gegevens -->
<tr><td width="200">Wat is uw Gebruikersnaam?</td><td width="100"><input type="text" name="username" size="50"> </td>
    <td width="10"></td> <td width="352"><font color="#FF0000"> <?php echo $error_user; ?> </font> </td> </tr>
<tr><td>Wat is uw Wachtwoord?</td><td><input type="text" name="password1" size="50" /> </td>
    <td></td> <td><font color="#FF0000"> <?php echo $error_pass1; ?> </font> </td> </tr>
<tr><td>Wachtwoord ter controle:</td><td><input type="text" name="password2" size="50" /> </td>
    <td></td> <td><font color="#FF0000"> <?php echo $error_pass2; ?> </font> </td></tr>
<tr><td>Wat is uw E-mailadres? </td><td> <input type="text" name="emailadres" size="50" / ><br /></td>
    <td></td> <td><font color="#FF0000"> <?php echo $error_email; ?> </font> </td></tr>
</table>

<table> <!-- Geboortedatum -->
    <tr><td width="200">Wanneer bent u geboren?</td><td width="77">
    <span style="margin-right:0px;">Dag:</span>
    <select name="dag">
    <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option>    
    <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option>
    <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option>
    <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option>
    <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option>
    <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option>
    <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option>
    <option value="29">29</option> <option value="30">30</option> <option value="31">31</option>
    </select> <br /></td>
    
    <td width="147"><span style="margin-right:0px;">Maand:</span>
    <select name="maand">
    <option value="1">Januari</option> <option value="2">Februari</option>
    <option value="3">Maart</option> <option value="4">April</option>
    <option value="5">Mei</option> <option value="6">Juni</option>
    <option value="7">Juli</option> <option value="8">Augustus</option>
    <option value="9">September</option> <option value="10">Oktober</option>
    <option value="11">November</option> <option value="12">December</option>
    </select> <br /></td>
    
    <td width="100"><span style="margin-right:0px;">Jaar:</span>
    <select name="jaar">
    <option value="2012">2012</option> <option value="2011">2011</option> <option value="2010">2010</option> <option value="2009">2009</option>
    <option value="2008">2008</option> <option value="2007">2007</option> <option value="2006">2006</option> <option value="2005">2005</option>
    <option value="2004">2004</option> <option value="2003">2003</option> <option value="2002">2002</option> <option value="2001">2001</option>
    <option value="2000">2000</option> <option value="1999">1999</option> <option value="1998">1998</option> <option value="1997">1997</option>
    <option value="1996">1996</option> <option value="1995">1995</option> <option value="1994">1994</option> <option value="1993">1993</option>
    <option value="1992">1992</option> <option value="1991">1991</option> <option value="1990">1990</option> <option value="1989">1989</option>
    <option value="1988">1988</option> <option value="1987">1987</option> <option value="1986">1986</option> <option value="1985">1985</option>
    <option value="1984">1984</option> <option value="1983">1983</option> <option value="1982">1982</option> <option value="1981">1981</option>
    <option value="1980">1980</option> <option value="1979">1979</option> <option value="1978">1978</option> <option value="1977">1977</option>
    <option value="1976">1976</option> <option value="1975">1975</option> <option value="1974">1974</option> <option value="1973">1973</option>
    <option value="1972">1972</option> <option value="1971">1971</option> <option value="1970">1970</option> <option value="1969">1969</option>
    <option value="1968">1968</option> <option value="1967">1967</option> <option value="1966">1966</option> <option value="1965">1965</option>
    <option value="1964">1964</option> <option value="1963">1963</option> <option value="1962">1962</option> <option value="1961">1961</option>
    <option value="1960">1960</option> <option value="1959">1959</option> <option value="1958">1958</option> <option value="1957">1957</option>
    <option value="1956">1956</option> <option value="1955">1955</option> <option value="1954">1954</option> <option value="1953">1953</option>
    <option value="1952">1952</option> <option value="1951">1951</option> <option value="1950">1950</option>
    </select><br /></td>
    <td width="0"></td> <td width="352"> <font color="#FF0000"> <?php echo $error_leeftijd; ?> </font> </td> </tr>
</table>

<input type="hidden" name="controle" value="TRUE">
<input type="submit" value="Verzenden">
</form>
<form name="reset" method="post" action="<?php echo ($_SERVER["PHP_SELF"]);?>">
<input type="submit" name="submit" value="Reset"><br />
</form>
<hr>
<form action="home.html" method="post">
<input type="submit" value="Hoofdpagina">
</form>

</body>
</html>
[/spoiler]
Gewijzigd op 15/11/2012 12:11:44 door Kevin Zegikniet
 
Bart van der Veen

Bart van der Veen

14/11/2012 22:01:41
Quote Anchor link
sorry wat?

Quote:
Als ik een geboortedatum invul die niet de standaarddatum is (1-1-2012), krijg ik geen error, terwijl ik dat wel ingesteld heb.


en waar probeer je dit.


ps, ik denk dat je een bonuspunt pakt als je zelf inziet dat je de "gebruiker" niet om zijn geboortedatum en leeftijd hoeft te vragen... ;-)
 
Kevin Zegikniet

Kevin Zegikniet

14/11/2012 22:12:33
Quote Anchor link
@Bart van der Veen
Dit script is een html en php ineen.
Als ik deze in de browser uitvoer krijg ik een aantal velden om in te vullen.

De geboortedatum is standaard ingesteld op Dag: 1, Maand: Januari (value=1), Jaar: 2012
Als ik dat laat staan, checkt het script na het versturen (action="" dus zelfde script nogmaals) wat er in de geboortedatum staat. Als deze overeen komt met 1 januari 2012 (dus wat er standaard staat), dan krijg ik de error: "Geboortedatum niet ingevuld etc".
Als ik een datum invul tussen 2 Januari dit jaar en 15 November 1994 (dus dan wordt je morgen 18), zou je leeftijd dus 17jaar zijn. Dit is kleiner dan 18, en dus zou je de error "je bent te jong" moeten krijgen. Ik krijg echter helemaal geen error.

Waarom zou ik daar niet om moeten vragen? Bedenk wel dat ik een van beide (de leeftijd) niet vraag, maar ongemerkt bereken.

Misschien moet ik het trouwens doen met tee verschillene variabelen, zoals je kunt zien gebruik ik dezelfde variabele.
Dan ga ik dus eerst controleren of er iets veranderd is, en daarna of de 18-jaar grens wel overschreden is ( de gebruiker dus ouder dan 18 heeft ingevuld).

Weten jullie nu een oplossing om de waardes van de eerste poging weer opnieuw in te vullen in de tweede poging?
Het enige wat 'ie nu doet, is een leeg veld maken en de errorcode erachter plaatsen.
Ik wil echter in dat lege veld de data plaatsen die de gebruiker erin had gezet voor het "verzenden".

Any ideas?

EDIT:
Ik heb bovenstaande error die niet kwam, nu klaar, dit doet nu wat ik wil.
Ik heb ook een manier gevonden om de geplaatste gegevens terug te zetten, die waren ingevoerd in een TEXT/PASSWORD input veld.
Helaas heb ik nog een invoertype, namelijk een lijst (heet geloofik <span>). Als ik hier de waarde terug wil zetten, doet ie dat niet via
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<checked="<?php echo "$POST[dag]";?>">

(heb drie lijsten: Dag, Maand en Jaar.
Weet iemand wat wel de juiste term is?
Gewijzigd op 15/11/2012 12:16:12 door Kevin Zegikniet
 
Kevin Zegikniet

Kevin Zegikniet

16/11/2012 11:12:10
Quote Anchor link
Mensen dit topic wordt, geloof ik, niet meer op gereageerd.
Dit vind ik ook wel een beetje terecht, de titel slaat allang niet meer op mijn vragen die ik nu heb.
Ik zal dus een nieuw topic openen.
 



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.