Alleen nummers in invoerveld
Nu heb ik gekeken dat het alleen mogelijk in om cijfers in te voeren, maar ik krijg dit niet werkend in het script.
ps. de tabbellen(zie onderstaande script) worden uit een ander script gehaald d.m.v include("reg_form.php");
Het script staat wel geplaatst in een soort variable (dat verklaart ook de "\ "\ in de tabellen).
onderstaand het stukje code van de telefoon nummers
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (!isset($telefoon)) $telefoon = "";
if (!isset($mobiel)) $mobiel = "";
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Telefoon</td>
<td> <input name=\"telefoon\" type=\"text\" class=\"textfield\" value=\"$telefoon\" size=\"40\" /></td>
</tr>
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Mobiel</td>
<td> <input name=\"mobiel\" type=\"text\" class=\"textfield\" value=\"$mobiel\" size=\"40\" /></td>
</tr>
<tr>
if (!isset($mobiel)) $mobiel = "";
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Telefoon</td>
<td> <input name=\"telefoon\" type=\"text\" class=\"textfield\" value=\"$telefoon\" size=\"40\" /></td>
</tr>
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Mobiel</td>
<td> <input name=\"mobiel\" type=\"text\" class=\"textfield\" value=\"$mobiel\" size=\"40\" /></td>
</tr>
<tr>
http://nl3.php.net/is_numeric, verder kun je met http://nl3.php.net/strlen ook nog controleren of het telefoon nummer 10 tekens bevat.
Kijk hier maar eens naar: want moet daarna ook een foutmelding genereren.
ik had het onderstaande ook geprobeerd
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
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
// Eerst controleren of er uberhaupt iets gepost is naar de pagina
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
// $e is de variabele(array) waar we de errors in aangeven
$e = null;
// Velden controleren
if (empty($_POST['telefoon']))
{
// veld is leeg, doe iets
$e[] = 'Het telefoon nummer was niet ingevuld!';
}
if (is_numeric($_POST['telefoon']) && strlen($_POST['telefoon']) == 10)
{
// veld is invalid, doe iets
$e[] = 'Het telefoon nummer was niet juist ingevuld!';
}
// Alle velden zijn gecontroleerd, nu controleren of er fouten waren
if(is_null($e))
{
// Er zijn geen fouten gevonden!
}
else
{
// Er zijn wel fouten gevonden
}
}
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
// $e is de variabele(array) waar we de errors in aangeven
$e = null;
// Velden controleren
if (empty($_POST['telefoon']))
{
// veld is leeg, doe iets
$e[] = 'Het telefoon nummer was niet ingevuld!';
}
if (is_numeric($_POST['telefoon']) && strlen($_POST['telefoon']) == 10)
{
// veld is invalid, doe iets
$e[] = 'Het telefoon nummer was niet juist ingevuld!';
}
// Alle velden zijn gecontroleerd, nu controleren of er fouten waren
if(is_null($e))
{
// Er zijn geen fouten gevonden!
}
else
{
// Er zijn wel fouten gevonden
}
}
PS: Op lijn 3 ben je een double quote(") vergeten.
maar kan ik gewoon aanmelden.
Deze code doet nog niets met de error, maar deze doet ook niets met een valide post.
Maar niet elke browser ondersteunt (volledig) HTML 5, dus..
Quote:
Gewijzigd op 26/07/2013 14:25:22 door Stijn Langezaal
@stijn: Zelfs als elke browser HTML5 zou ondersteunen zou ik deze feature niet vertrouwen. Iedere (kwaadwillende) gebruiker zou dit aan kunnen passen. Daarbuiten is het wel een mooie feature om te zorgen dat de 'gewone' gebruiker alleen nummers in zal voeren.
Toevoeging op 26/07/2013 14:35:32:
Ook het onderstaande heeft geen effect op dat er alleen nummers ingevoerd kunnen worden? de maxlength van 10 werkt wel.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Telefoon</td>
<td> <input name=\"telefoon\" type=\"number\" class=\"textfield\" value=\"$telefoon\" size=\"40\" maxlength=\"10\" /></td>
</tr>
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Mobiell</td>
<td> <input name=\"mobiel\" type=\"number\" class=\"textfield\" value=\"$mobiel\" size=\"40\" maxlength=\"10\"/></td>
</tr>
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Telefoon</td>
<td> <input name=\"telefoon\" type=\"number\" class=\"textfield\" value=\"$telefoon\" size=\"40\" maxlength=\"10\" /></td>
</tr>
<tr>
<td width=\"23\"> </td>
<td width=\"150\">Mobiell</td>
<td> <input name=\"mobiel\" type=\"number\" class=\"textfield\" value=\"$mobiel\" size=\"40\" maxlength=\"10\"/></td>
</tr>
<tr>
Toevoeging op 26/07/2013 15:31:04:
enig idee nog?
Gewijzigd op 26/07/2013 14:39:50 door patrick cos
Code (php)
1
2
3
4
5
2
3
4
5
if (is_numeric($_POST['mobiel']) && strlen($_POST['mobiel']) == 10)
{
// veld is invalid, doe iets
$message[] = 'Het telefoon nummer was niet juist ingevuld!';
}
{
// veld is invalid, doe iets
$message[] = 'Het telefoon nummer was niet juist ingevuld!';
}
Gewijzigd op 30/07/2013 15:18:54 door patrick cos
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
<?php
if(isset($_POST['telefoontestje'])) {
if($_POST['mobiel'] == "") { $message = "Er is geen telefoon nummer ingevuld"; }
if(strlen($_POST['mobiel']) < 9) { $message = "Dit telefoon nummer is onjuist"; }
if(!is_numeric($_POST['mobiel'])) {
$message = "Het telefoon nummer was niet juist ingevuld!";
}
elseif(!strlen($_POST['mobiel'])) {
$message = "Het telefoon nummer was niet juist ingevuld!";
}
elseif(is_numeric($_POST['mobiel']) && strlen($_POST['mobiel']) == 10){
$message = "Hiep hiep hoera, het telefoon nummer was juist ingevuld";
}
}
if(isset($message)) {
echo $message;
}
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<form method="post" action="">
Telefoon Nummer: <input type="text" name="mobiel" maxlength="10" />
<input type="submit" name="telefoontestje" />
</form>
</body>
</html>
if(isset($_POST['telefoontestje'])) {
if($_POST['mobiel'] == "") { $message = "Er is geen telefoon nummer ingevuld"; }
if(strlen($_POST['mobiel']) < 9) { $message = "Dit telefoon nummer is onjuist"; }
if(!is_numeric($_POST['mobiel'])) {
$message = "Het telefoon nummer was niet juist ingevuld!";
}
elseif(!strlen($_POST['mobiel'])) {
$message = "Het telefoon nummer was niet juist ingevuld!";
}
elseif(is_numeric($_POST['mobiel']) && strlen($_POST['mobiel']) == 10){
$message = "Hiep hiep hoera, het telefoon nummer was juist ingevuld";
}
}
if(isset($message)) {
echo $message;
}
?>
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<form method="post" action="">
Telefoon Nummer: <input type="text" name="mobiel" maxlength="10" />
<input type="submit" name="telefoontestje" />
</form>
</body>
</html>
Even snel getest op mijn locale webserver, als het goed is moet het werken, zo niet laat het maar even weten ;)
Gewijzigd op 30/07/2013 19:28:23 door RobertJan Doeternietoe
Patrick cos op 30/07/2013 15:18:37:
Mogelijk dat ik de vraag niet begrijp, maar je wilt toch alleen cijfers/nummers? Dan moet er toch ook geen fout volgen als dat alleen wordt ingevoerd?
De code: als het numeriek is en 10 posities, dan is het veld 'invalid'? Juist niet toch?
een telefoonnummer moet bestaan uit 10 cijfers en alleen numerieke karakters.
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
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
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
<?
include("inc/start.php");
if ($username) {
//Doorsluisen naar pagina 'gegevens'
header("Location: /gegevens"); // Redirect browser
exit;
}
if (isset($_POST)) {
foreach($_POST as $key => $value) {
$$key = htmlspecialchars($value);
$$key = addslashes($$key);
}
if ($referer == "http://www.website.nl/account/" && $password == "") header("Location: /registreren");
$testquery = // Kijken of de usernaam al bestaat
"SELECT
username
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
$testresult = mysql_query($testquery)or die(mysql_error());
if (mysql_num_rows($testresult)==0) {
$unicode = substr(md5($email),5,8);
//Opslaan in de database
$query = "INSERT INTO `users` (`username` , `password` , `b_naam` , `cp_naam` , `email` , `telefoon` , `mobiel`, `fax` , `f_naam` , `f_adres` , `f_pcode` , `f_plaats` , `f_land` , `a_naam` , `a_adres` , `a_pcode` , `a_plaats` , `a_land` , `newsletter` , `htmlmail` , `inschrijfdatum`, `last_ip`, `referer`, `unicode`) "
. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');";
mysql_query($query)or die(mysql_error());
//Inloggen
$query =
"SELECT
userID
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
$result = mysql_query($query)or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$userID = $row["userID"];
$_SESSION ['session_username'] = $form_reg_username;
$_SESSION ['session_userID'] = $userID;
setcookie("koekkie_username", $form_reg_username, time()+ "10000000", "/", ".website.nl");
setcookie("koekkie_userID", $userID, time()+ "10000000", "/", ".website.nl");
}
//Doorsluisen naar pagina 'gegevens'
header("Location: /gegevens"); // Redirect browser
exit;
}
if (mysql_num_rows($testresult)==0) {
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
}
}
$target = "registreren";
$button = "<input name=\"Registreer\" type=\"Submit\" class=\"submit\" value=\"Registreer\">";
include("reg_form.php");
$content .= $message . $reg_form;
$paginaTitel = "Registreren | website.nl";
$description = "";
$keywords = "";
include("page.php");
?>
include("inc/start.php");
if ($username) {
//Doorsluisen naar pagina 'gegevens'
header("Location: /gegevens"); // Redirect browser
exit;
}
if (isset($_POST)) {
foreach($_POST as $key => $value) {
$$key = htmlspecialchars($value);
$$key = addslashes($$key);
}
if ($referer == "http://www.website.nl/account/" && $password == "") header("Location: /registreren");
$testquery = // Kijken of de usernaam al bestaat
"SELECT
username
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
$testresult = mysql_query($testquery)or die(mysql_error());
if (mysql_num_rows($testresult)==0) {
$unicode = substr(md5($email),5,8);
//Opslaan in de database
$query = "INSERT INTO `users` (`username` , `password` , `b_naam` , `cp_naam` , `email` , `telefoon` , `mobiel`, `fax` , `f_naam` , `f_adres` , `f_pcode` , `f_plaats` , `f_land` , `a_naam` , `a_adres` , `a_pcode` , `a_plaats` , `a_land` , `newsletter` , `htmlmail` , `inschrijfdatum`, `last_ip`, `referer`, `unicode`) "
. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');";
mysql_query($query)or die(mysql_error());
//Inloggen
$query =
"SELECT
userID
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
$result = mysql_query($query)or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$userID = $row["userID"];
$_SESSION ['session_username'] = $form_reg_username;
$_SESSION ['session_userID'] = $userID;
setcookie("koekkie_username", $form_reg_username, time()+ "10000000", "/", ".website.nl");
setcookie("koekkie_userID", $userID, time()+ "10000000", "/", ".website.nl");
}
//Doorsluisen naar pagina 'gegevens'
header("Location: /gegevens"); // Redirect browser
exit;
}
if (mysql_num_rows($testresult)==0) {
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
}
}
$target = "registreren";
$button = "<input name=\"Registreer\" type=\"Submit\" class=\"submit\" value=\"Registreer\">";
include("reg_form.php");
$content .= $message . $reg_form;
$paginaTitel = "Registreren | website.nl";
$description = "";
$keywords = "";
include("page.php");
?>
controleren of een formulier verzonden is:
Code (php)
1
2
3
4
2
3
4
foreach($_POST as $key => $value) {
$$key = htmlspecialchars($value);
$$key = addslashes($$key);
}
$$key = htmlspecialchars($value);
$$key = addslashes($$key);
}
Wat is hier je doel?
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$testquery = // Kijken of de usernaam al bestaat
"SELECT
username
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
"SELECT
username
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
Variabele buiten quotes. Gebruik in een query mysql(i)_real_escape_string.
Waarom limit 1?
Bouw nette foutafhandeling in ipv or die. Zeker in een live-site wil je niet dat bezoekers foutmeldingen te zien krijgen.
Code (php)
1
2
2
$query = "INSERT INTO `users` (`username` , `password` , `b_naam` , `cp_naam` , `email` , `telefoon` , `mobiel`, `fax` , `f_naam` , `f_adres` , `f_pcode` , `f_plaats` , `f_land` , `a_naam` , `a_adres` , `a_pcode` , `a_plaats` , `a_land` , `newsletter` , `htmlmail` , `inschrijfdatum`, `last_ip`, `referer`, `unicode`) "
. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');";
. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');";
Het gebruik van backticks (`) hoort eigenlijk niet in query's. Ook hier: gebruik mysql(i)_real_escape_string.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$query =
"SELECT
userID
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
"SELECT
userID
FROM
users
WHERE
username = '$form_reg_username'
LIMIT 1
";
Ook hier: waarom limit 1?
while-lus is niet nodig; er is immers maar 1 resultaat.
Code (php)
1
2
2
if (mysql_num_rows($testresult)==0) {
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
Denk dat het hier niet 0 maar 1 moet zijn.
Verder is inline css niet meer van deze tijd en zou ik geen " gebruiken in php. Voordeel: je hoeft niet meer te escapen.
Ik ben het huidige script wat aan het verbeteren.
Bedankt voor je tips.
Het rare is zodra ik de 0 naar een 1 verander of ELSE gebruik dan blijft de 'message' standaard bovenin het scherm staan.
Zodra ik mezelf nu aanmeld dan krijg ik geen melding, indien ik een bestaande account gebruikt dan krijg ik netjes de 'message'.
Code (php)
1
2
2
if (mysql_num_rows($testresult)==0) {
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
Gewijzigd op 31/07/2013 09:48:00 door patrick cos
+3161234567 is geldig
112 is geldig
0800-8090 is geldig
0184-123456 is ook geldig
1234.456.7890 is geldig
+20 100 123 2372 is geldig (Egypte)
(+31) 062344873 is geldig
Laat mensen gewoon alles intypen wat ze willen.
Strip er zelf de zooi uit met een EREG_REPLACE
En kijk daarna of het 10 cijfers zijn, als het Nederlands is.
Kortom: wat wil je precies? Een goed telefoonnummer?
Of een paar cijfers?
En wat ga je met het nummer doen? Als het geautomatiseerd moet gaan, dan moet je het wel goed formatten. Bij mensen voldoet alles.
Je kan zelf de spaties/punten/streepjes eruit vissen.
Toevoeging op 31/07/2013 13:13:32:
En op PHPhulp zelf: http://www.phphulp.nl/php/script/data-verwerking/valideer-telefoonnummer/708/
Eddy E op 31/07/2013 13:13:03:
Laat mensen gewoon alles intypen wat ze willen.
Strip er zelf de zooi uit met een EREG_REPLACE
En kijk daarna of het 10 cijfers zijn, als het Nederlands is.
Strip er zelf de zooi uit met een EREG_REPLACE
En kijk daarna of het 10 cijfers zijn, als het Nederlands is.
Helemaal mee eens, op ereg_replace na:
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. --> preg_replace()
de klanten vullen het in het algemeen wel gewoon goed in.
Of is er een eenvoudigere manier om dit te voorkomen?
http://www.stopforumspam.com/ heeft bijvoorbeeld 99% van de ip's van de spookklanten die bij ons komen.
Maar 5miljoen ip's in .htpaccess is ook geen optie.
Alleen wil ik nu nog tellen hoeveel spook klanten gestopt worden, dit doe ik met de onderstaande regel.
zodra een spook de pagina bezoekt dan komt er niet +1 in de database maar +4
ook als ik een mail funtie in het script zet dan wordt deze ook 4x verstuurd, enig idee waarom?
mijn script staat hierboven (30/07/2013 16:48:35)