Ik ben met wat AJAX bezig en wil het volgende doen:
Ik heb een form met daarin een veld waar je een code moet invoeren. Zodra je op submit klikt checkt een stukje code in de database OF de code bestaat en OF deze al eens is gebruikt.
Is de code nog niet gebruikt dan moet het form pas gesubmit worden.
Hieronder de code die ik gebruik:
het form + de javascript code
de php code (getStemCodeStatus) ziet er zo uit:
Wat er niet goed gaat is het volgende:
Je submit het form. Onsubmit wordt er wat javascript doorgelopen: check in de database of de code al gebruikt is. Het form moet pas submitten zodra de code nog niet gebruikt is, maar dat lukt niet helemaal. Ik dacht dat met het hier onderstaande te kunnen doen (een return false als codeStatus 0 is, anders gewoon return true. Maar helaas submit hij me form nu gewoon iedere keer...
Hoe doe ik dit wel goed?
Ik heb een form met daarin een veld waar je een code moet invoeren. Zodra je op submit klikt checkt een stukje code in de database OF de code bestaat en OF deze al eens is gebruikt.
Is de code nog niet gebruikt dan moet het form pas gesubmit worden.
Hieronder de code die ik gebruik:
het form + de javascript code
HTML:
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
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> <script language="javascript" type="text/javascript"> var request = null; try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = null; } } } if (request == null) alert("Error creating request object!"); function getStemCodeStatus() { var code = document.getElementById("code").value; var url = "checkStemCode.php?code=" + escape(code); request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null); } function updatePage() { if (request.readyState == 4) { if (request.status == 200) { /* Get the response from the server */ var codeStatus = request.responseText; if (codeStatus == 0) { document.getElementById("output").value = 'niet submitten'; return false;} else { document.getElementById("output").value = codeStatus; } } else alert("Error! Request status is " + request.status); } return true; } </script> </head> <body> <p>Voer uw persoonlijke stem code in</p> <form method="POST" action="stem.php" onsubmit="getStemCodeStatus();"> <p><input type="text" name="code" id="code" /></p> <p><input type="text" name="output" id="output" size="40" /></p> <p><input type="submit" value="Stemmen" /> </form> </body> </html> |
de php code (getStemCodeStatus) ziet er zo uit:
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
31
32
33
34
35
36
37
| // Connect to database $conn = @mysql_connect("localhost", "blaat", "blaat"); if (!$conn) die("Error connecting to MySQL: " . mysql_error()); if (!mysql_select_db("stemmen", $conn)) die("Error selecting database: " . mysql_error()); $code = preg_replace("/[\. \(\)\-]/", "", $_REQUEST['code']); $select = 'SELECT *'; $from = ' FROM code'; $where = ' WHERE code = \'' . $code . '\''; $queryResult = @mysql_query($select . $from . $where); if (!$queryResult) die('Error retrieving customer from the database.'); $queryResult = @mysql_query($select . $from. $where); $num = mysql_num_rows($queryResult); if ($num == 0) { echo "0"; } while ($row = mysql_fetch_array($queryResult)) { $status = $row['status']; if ($status == 0) { echo "0"; } else if ($status == 1) { echo "1"; } } mysql_close($conn); ?> |
Wat er niet goed gaat is het volgende:
Je submit het form. Onsubmit wordt er wat javascript doorgelopen: check in de database of de code al gebruikt is. Het form moet pas submitten zodra de code nog niet gebruikt is, maar dat lukt niet helemaal. Ik dacht dat met het hier onderstaande te kunnen doen (een return false als codeStatus 0 is, anders gewoon return true. Maar helaas submit hij me form nu gewoon iedere keer...
JavaScript:
1
2
3
4
5
| var codeStatus = request.responseText; // komt uit php als response if (codeStatus == 0) { document.getElementById("output").value = 'niet submitten'; return false;} else { document.getElementById("output").value = codeStatus; // is niet nodig maar je moet toch iets bij else neer zetten } |
Hoe doe ik dit wel goed?