Alleen nummers in invoerveld

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick cos

patrick cos

26/07/2013 11:47:30
Quote Anchor link
We hebben de laatste tijd last van spookklanten, maar de voeren in het telefoon nummer veld vaak letters in.
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).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$reg_form = "
/////code(tabel)/////
";


onderstaand het stukje code van de telefoon nummers
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
    if (!isset($telefoon)) $telefoon = "";
    if (!isset($mobiel)) $mobiel = "";


              <tr>
                <td width=\"23\">&nbsp;</td>
                <td width=\"150\">Telefoon</td>
                <td>      <input name=\"telefoon\" type=\"text\" class=\"textfield\" value=\"$telefoon\"  size=\"40\" /></td>
                </tr>
              <tr>
                <td width=\"23\">&nbsp;</td>
                <td width=\"150\">Mobiel</td>
                <td>      <input name=\"mobiel\" type=\"text\" class=\"textfield\" value=\"$mobiel\"  size=\"40\" /></td>
                </tr>
              <tr>
 
PHP hulp

PHP hulp

29/03/2024 08:51:45
 
Nick Smit

Nick Smit

26/07/2013 11:52:37
Quote Anchor link
Kijk hier maar eens naar: 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.
 
Patrick cos

patrick cos

26/07/2013 11:56:44
Quote Anchor link
Ja klopt, maar hoe kan ik die in mijn script implenteren, op een of andere manier kan ik geen if statement maken die werkt in mijn registratie script.
want moet daarna ook een foutmelding genereren.

ik had het onderstaande ook geprobeerd
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if ($mobiel && strlen($mobiel) < 10)
{
$error_mobiel = "error test;
}
 
Nick Smit

Nick Smit

26/07/2013 13:27:04
Quote Anchor link
Op de onderstaande manier zou je een formulier kunnen controleren. Dit is de basis, hiermee garandeer ik geen veiligheid(zeker niet als je gegevens opslaat in een database!)

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
// 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
    }

}


PS: Op lijn 3 ben je een double quote(") vergeten.
 
Patrick cos

patrick cos

26/07/2013 13:59:56
Quote Anchor link
ohja ik zie het, maar als ik mezelf aanmeld dan krijg ik geen error te zien...
maar kan ik gewoon aanmelden.
 
Nick Smit

Nick Smit

26/07/2013 14:03:29
Quote Anchor link
Deze code doet nog niets met de error, maar deze doet ook niets met een valide post.
 
Stijn Langezaal

Stijn Langezaal

26/07/2013 14:16:09
Quote Anchor link
Als je HTML 5 wilt gebruiken, kun je ook doen

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="number" maxlength="10">


Maar niet elke browser ondersteunt (volledig) HTML 5, dus..

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(isset($_POST['submit'])){
if(is_numeric($_POST['tel']) && strlen($_POST['tel']) == 10){
echo 'Telefoonnummer';
}
else{
echo 'Geen telefoonnummer :(';
}
}

?>
Gewijzigd op 26/07/2013 14:25:22 door Stijn Langezaal
 
Nick Smit

Nick Smit

26/07/2013 14:27:31
Quote Anchor link
@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.
 
Patrick cos

patrick cos

26/07/2013 14:31:21
Quote Anchor link
Hoe kan je er dan voor zorgen dat dit niet mogelijk is?


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
              <tr>
                <td width=\"23\">&nbsp;</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\">&nbsp;</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
 
Patrick cos

patrick cos

30/07/2013 15:18:37
Quote Anchor link
Mensen kunnen gewoon nog steeds cijfers gebruiken, zonder dat dit een fout geeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
    }
Gewijzigd op 30/07/2013 15:18:54 door patrick cos
 
RobertJan Doeternietoe

RobertJan Doeternietoe

30/07/2013 16:03:19
Quote Anchor link
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
<?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>

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
 
Obelix Idefix

Obelix Idefix

30/07/2013 16:35:53
Quote Anchor link
Patrick cos op 30/07/2013 15:18:37:
Mensen kunnen gewoon nog steeds cijfers gebruiken, zonder dat dit een fout geeft.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
    }


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?
 
Patrick cos

patrick cos

30/07/2013 16:48:35
Quote Anchor link
Bedankt, alleen krijg ik het niet werkend in mijn script.
een telefoonnummer moet bestaan uit 10 cijfers en alleen numerieke karakters.

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
<?

    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");
    
?>
 
Tobias Tobias

Tobias Tobias

30/07/2013 17:56:07
Quote Anchor link
Je kunt met javascript al voorkomen dat er wat anders dan een getal ingevoerd worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/,'')" />
 
Obelix Idefix

Obelix Idefix

30/07/2013 20:26:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (isset($_POST)) {

controleren of een formulier verzonden is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == "POST")


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    foreach($_POST as $key => $value) {
      $$key = htmlspecialchars($value);
      $$key = addslashes($$key);
    }

Wat is hier je doel?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
    ";

Variabele buiten quotes. Gebruik in een query mysql(i)_real_escape_string.
Waarom limit 1?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
    
    $testresult = mysql_query($testquery)or die(mysql_error());                            

Bouw nette foutafhandeling in ipv or die. Zeker in een live-site wil je niet dat bezoekers foutmeldingen te zien krijgen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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');";

Het gebruik van backticks (`) hoort eigenlijk niet in query's. Ook hier: gebruik mysql(i)_real_escape_string.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
$query =
    "SELECT  
    userID
    FROM  
    users
     WHERE
    username = '$form_reg_username'
     LIMIT 1
    ";

Ook hier: waarom limit 1?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
while ($row=mysql_fetch_array($result)) {

while-lus is niet nodig; er is immers maar 1 resultaat.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>";

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.
 
Patrick cos

patrick cos

30/07/2013 23:57:02
Quote Anchor link
Dit script is inderdaad niet van deze tijd, dit script komt nog ergens uit 2007.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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>";
Gewijzigd op 31/07/2013 09:48:00 door patrick cos
 
Eddy E

Eddy E

31/07/2013 13:13:03
Quote Anchor link
Telefoonnummers HOEVEN niet uit 10 nummers te bestaan.

+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/
 
Obelix Idefix

Obelix Idefix

31/07/2013 19:57:31
Quote Anchor link
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.

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()
 
Patrick cos

patrick cos

01/08/2013 07:53:06
Quote Anchor link
Wat gebeurd er in dit geval als spookklanten zich aanmelden met 'letters' ipv van een telefoonnummer?
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.
 
Patrick cos

patrick cos

07/08/2013 11:05:00
Quote Anchor link
Ik heb toch maar de module van stopforumspam toegevoegd.
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)



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
    mysql_query("UPDATE spook SET aantal = aantal + 1 LIMIT 1" );
 



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.