Avatar billede DamerG Nybegynder
27. januar 2013 - 02:57 Der er 31 kommentarer og
1 løsning

php validere telefon nummer

php validere telefon nummer
hej alle jeg forsøger at validere telefonnummer ved hjælp af msg error så når bruger ikke instater telefon nummer får han en fejl
jeg står nu med det problem at alle mine andre msg error virker fint undtaget den msg error der skal validere telefon nummer hvilket giver mig en blank side håber nogen kan hjælpe

if($check_invite < 1)
        $message = '<div class="msg error"><b>FEJL:</b> Denne invitation eksisterer\'ikke i vores database!</div>';
    elseif($db->GetNumRows($sql) > 0)
        $message = '<div class="msg error"><b>FEJL:</b> Brugernavn eller e-mail er allerede registreret i vores database</div>';
    elseif(!isUserID($user))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt brugernavn!</div>';
    elseif(!isEmail($mail))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv en gyldig e-mail-adresse!</div>';
    elseif(!isValid($number))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt mobil nummer!</div>';
    elseif(!checkPwd($_POST['password'],$_POST['password2'])){
        $message = '<div class="msg error"><b>FEJL:</b> Passwords  er\'ikke ens!</div>';
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 10:24 #1
Hvor kommer $number fra, og hvad står der i isValid-funktionen?
Avatar billede DamerG Nybegynder
27. januar 2013 - 14:41 #2
number var bare noget jeg skiv fordi jeg ikke ved hvad der skal stå der er ikke nogen  isValid-funktion prøver at få den til at se ud som de andre msg error
Avatar billede DamerG Nybegynder
27. januar 2013 - 15:00 #3
her er noget mere kode


if(isset($_POST['register'])){
    $form = 2;
    $user = $db->EscapeString($_POST['user']);
    $mail = $db->EscapeString($_POST['email']);
    $invite = $db->EscapeString($_POST['invite']);
   
    $sql = $db->Query("SELECT * FROM `invites` WHERE `code`='".$invite."'");
    $check_invite = $db->GetNumRows($sql);
    $sql = $db->Query("SELECT id FROM `users` WHERE `username`='".$user."' OR `email`='".$mail."'");

    if($check_invite < 1)
        $message = '<div class="msg error"><b>FEJL:</b> Denne invitation eksisterer\'ikke i vores database!</div>';
    elseif($db->GetNumRows($sql) > 0)
        $message = '<div class="msg error"><b>FEJL:</b> Brugernavn eller e-mail er allerede registreret i vores database</div>';
    elseif(!isUserID($user))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt brugernavn!</div>';
    elseif(!isEmail($mail))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv en gyldig e-mail-adresse!</div>';
    elseif(!isValid($number))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt mobil nummer!</div>';
    elseif(!checkPwd($_POST['password'],$_POST['password2'])){
        $message = '<div class="msg error"><b>FEJL:</b> Passwords  er\'ikke ens!</div>';
  }else{
        $ip = VisitorIP();
        $pass = base64_encode($_POST['password']);
        $db->Query("INSERT INTO `users`(username,email,password,number,ip,signup) values('".$user."','".$mail."','".$pass."','".$number."','".$ip."',NOW())");
        $db->Query("DELETE FROM `invites` WHERE `code`='".$invite."'");
        $message = '<div class="msg fuldført du er nu registreret</div>';



<form class="register<?=($form == 2 ? ' active' : '')?>" method="post" action="">
                    <h3>Tilmeld</h3>
                        <div class="column">
                            <div>
                                <label>Brugernavn:</label>
                                <input type="text" name="user" required="required" />
                            </div>
                            <div>
                                <label>Email:</label>
                                <input type="text" name="email" required="required" />
                            </div>
                            <div>&nbsp;</div>
                        </div>
                        <div class="column">
                            <div>
                                <label>Password:</label>
                                <input type="password" name="password" required="required" />
                            </div>
                            <div>
                                <label>Bekræft Password:</label>
                                <input type="password" name="password2" required="required" />
                            </div>
                            <div>&nbsp;</div>
                        </div>
                        <div>
                            <label>Bemærk husk landkoden +45</label>
                            <label>Mobil nummer:</label>
                        <input type="text" name="number" style="width:454px" required="required" />
                        </div>
                        <div>
                            <label>Inviter kode:</label>
                            <input type="text" name="invite" style="width:454px" required="required" />
                        </div>
                        <div class="bottom">
                            <input type="submit" name="register" value="Register" />
                        <a href="#" rel="login" class="linkform">Login here</a>
                            <div class="clear"></div>
                        </div>
                    </form>
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 15:05 #4
Når du ikke har en isValid-funktion vil du naturligvis få en fejl. At du i stedet for ser en blank side skyldes nok en indstilling, som du bør ændre, så du kan se de relevante fejl.

Hvad er det du vi validere telefonnummeret som? Hvad er, og hvad er ikke et telefonnummer?
Avatar billede DamerG Nybegynder
27. januar 2013 - 16:00 #5
jeg vil bare lave så vis bruger ikke indtaster et telefon nummer og lader feltet stå tomt får han en fejl


lige som den her

elseif(!isEmail($mail))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv en gyldig e-mail-adresse!</div>';
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 16:48 #6
Jo, men hvad er et telefonnummer? Eller er det bare nok han skriver et eller andet, fx: 911 
Eller?
Avatar billede DamerG Nybegynder
27. januar 2013 - 17:02 #7
bruger skal taste en nummer som fix +45xxxxxxxx systemet må bare ikke godkende bruger uden et telefon nummer
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 17:08 #8
Oki - men for at være sikker på hvad du mener med "et telefonnummer", så vil jeg lige spørge hvad for nogle af disse, du mener skal godkendes, og ikke godkendes

+4599999999
+45 99 99 99 99
+45 999 999 99
+45999999999
+46999999999
004599999999
99 99 99 99
999 999 99
99999999
9999999
999999999
911
+78912345
99999999 efter kl. 18
Avatar billede DamerG Nybegynder
27. januar 2013 - 17:16 #9
godkendes
+4599999999

ikke godkendes

+45 99 99 99 99
+45 999 999 99
+45999999999
+46999999999
004599999999
99 99 99 99
999 999 99
99999999
9999999
999999999
911
+78912345
99999999 efter kl. 18
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 18:19 #10
det nemmeste måde at validere er nok et regulært udtryk
her var det oppe bare i js http://www.eksperten.dk/spm/961320
et bud kunne være
<?php
    // tester om et nummer er validt, jf reglen +4599999999
    // der retuneres 1, hvis det er validt, og ellers 0
    function isValid($number){
        $pattern = "/^\+45\d{8}$/";
        return preg_match($pattern, $number) ? 1 : 0;
    }
    echo isValid("+4512345678");
?>


hvad skal de stakkels brugere gøre der bor i sverige og arbejder i danmark,
der er også en del der ikke tager lande coden med i deres telefon nummer !!
nogle bruger mellemrum i deres nummer, det er nemmere at læse
tænk over din validerings regl.
Avatar billede DamerG Nybegynder
27. januar 2013 - 18:35 #11
#10 jeg kan godt se hvad du mener med min validerings regl. men det nød til at være sådan det skyles jeg har en sms gateway der steller de krav  jeg kan også forstå hvad du mener med dem der bor i sverige men da det er en klub for danske medlemmer er det ikke mulig for andre lande


den kode du ga her kan godt se er en anden kode en den jeg har i mit script 

elseif(!isValid($number))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt mobil nummer!</div>';
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 18:46 #12
Om din SMS gateway stiller krav til formatet er vel ligegyldigt overfor dine brugere. Hvorfor skal de ikke kunne skrive 99 99 99 99, hvis det er naturligt for dem? Så fjerner du mellemrum og sætter +45 foran, før du bruger det til SMS. Det er det man har komputere til ;)
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 18:49 #13
>den kode du ga her kan godt se er en anden kode en den jeg har i mit script 
ja.

alle tal undtagen 0 er = true
og 0 = false

og du tester på om der retuneres true / false;

functionen kan skrives så kort, hvis du syntes det er nemmere at læse/vedligeholde
function isValid($number){
    return preg_match("/^\+45\d{8}$/", $number);
}


læs http://php.net/preg_match


denne linje skal du ikke bruge
echo isValid("+4512345678");
det var bare en test
Avatar billede olebole Juniormester
27. januar 2013 - 18:51 #14
<ole>

Hvad er et dansk medlem? Er man ikke dansker, hvis man er født, opvokset og altid har boet i Danmark - men nu bor i Malmø, mens man arbejder og tilbringer det meste af tiden i København?

For at undgå at irritere dine brugere, bør du nok hjælpe dem ved at fjerne evt. mellemrum i nummeret, før du validerer  =)

/mvh
</bole>
Avatar billede DamerG Nybegynder
27. januar 2013 - 19:00 #15
#13 må jeg spørge dig om noget kan min kode så godt se sådan ud


function isValid($number){
    return preg_match("/^\+45\d{8}$/", $number);
elseif(!isValid($number))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt mobil nummer!</div>';


vil det virke i mit script
Avatar billede DamerG Nybegynder
27. januar 2013 - 19:37 #16
så virker det sku poster ikke lige et svar så jeg kan give jer point
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 19:39 #17
man ser hurtigt fejl hvis der er mellemrum. feks 34 34 34 34 istedet for 34343434

du vil kunne fjerne mellemrum med preg-replace
ref http://php.net/manual/en/function.preg-replace.php
<?php
$str = 'foo  o';
$str = preg_replace('/\s+/', '', $str);
// This will be 'fooo' now
echo $str;
?>


>kan min kode så godt se sådan ud
du mangler en tuborg slut.

at ligge functioner midt inde i koden er noget rod, og her vil du nok også får en fejl.
lig functionen det samman sted som du har dine andre functioner liggende ( isEmail(), isUserID(), osv ), normalt i toppen af filen eller i en/flere externe filer du includerer

alternativt kunne din
elseif(!isValid($number))
laves sådan
elseif(!preg_match("/^\+45\d{8}$/", $number ))
hvis du ikke vil bruge en function

mit råd vil være:
lig functionen isValid() sammen sted som dine andre functioner, uden at røre noget i din existerende code.
udvid evt functionen så den fjerne mellemrum fra number, og tænk over lande code problematikken
function isValid($number){
    // fjerner alle mellemrum
    $number = preg_replace('/\s+/', '', $number);
   
    // tester om formattet er korrekt
    return preg_match("/^\+45\d{8}$/", $number);
}
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 19:40 #18
du får lige et svar her
Avatar billede DamerG Nybegynder
27. januar 2013 - 19:52 #19
#17 lige inden jeg accepter dit svar vil jeg lige høre jeg brugte koden og satte den ind det virket fint og jeg får error msg FEJL: Angiv et gyldigt mobil nummer! som den skulle men der så det problem nu at selv om jeg taster nummer rigtig kommer den med error msg FEJL: Angiv et gyldigt mobil nummer! hvilket vil betyde at bruger ikke vil kunne oprette sig
Avatar billede olebole Juniormester
27. januar 2013 - 20:00 #20
function isValid($number){
    // fjerner alle mellemrum
    $number = preg_replace('/\s/g', '', $number);
   
    // tester om formattet er korrekt
    return preg_match("/^\+45\d{8}$/", $number);
}
Avatar billede olebole Juniormester
27. januar 2013 - 20:02 #21
- og hende med nummeret +4500000000 behøver ikke at fortvivle ... hun kan også være med  *o)
Avatar billede DamerG Nybegynder
27. januar 2013 - 20:27 #22
har prøvet alle koder de virker fint men der er det problem at lige meget hvor mange gange jeg indtaster nummer rigtig for jeg den error msg  FEJL: Angiv et gyldigt mobil nummer! den skal kun komme når man ikke indtaster nummer rigtig den skal ikke komme når man indtaster nummer rigtig hvilket den gør
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 20:39 #23
@olebole skal det også være global :), brugte den ikke da jeg tog fejl af preg_match hvor den ikke virker, og man skal bruge preg_match_all

er det bare mig eller er der en hvis lighed mellem spørgeren og http://www.eksperten.dk/profil/iceicepepsi coden stammer da fra http://www.eksperten.dk/spm/974265 #0
googler man personen er link nr 2 http://www.slideshare.net/iceicepepsi så er vi ude i noget dobbelt oprettelse af bruger ??
Avatar billede olebole Juniormester
27. januar 2013 - 20:39 #24
Så skal du nok slå dine fejlmeddelelser til i PHP. Man kan ikke udvikle uden at se de fejl, man laver  =)

Jeg fik blandet en g-modifier ind, som ikke har noget at gøre i PHP. Den rigtige kode ser sådan ud:

function isValid($number){
    // fjerner alle mellemrum
    $number = preg_replace('/\s/', '', $number);
   
    // tester om formattet er korrekt
    return preg_match("/^\+45\d{8}$/", $number);
}
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 20:41 #25
Vis lige din kode - og check gerne først hvor $number får en værdi fra.
Avatar billede DamerG Nybegynder
27. januar 2013 - 20:52 #26
min code
if(isset($_POST['register'])){
    $form = 2;
    $user = $db->EscapeString($_POST['user']);
    $mail = $db->EscapeString($_POST['email']);
    $invite = $db->EscapeString($_POST['invite']);
   
    $sql = $db->Query("SELECT * FROM `invites` WHERE `code`='".$invite."'");
    $check_invite = $db->GetNumRows($sql);
    $sql = $db->Query("SELECT id FROM `users` WHERE `username`='".$user."' OR `email`='".$mail."'");
   
    function isValid($number){
    // fjerner alle mellemrum
    $number = preg_replace('/\s/', '', $number);
 
    // tester om formattet er korrekt
    return preg_match("/^\+45\d{8}$/", $number);
}
   
    if($check_invite < 1)
        $message = '<div class="msg error"><b>FEJL:</b> Denne invitation eksisterer\'ikke i vores database!</div>';
    elseif($db->GetNumRows($sql) > 0)
        $message = '<div class="msg error"><b>FEJL:</b> Brugernavn eller e-mail er allerede registreret i vores database</div>';
    elseif(!isUserID($user))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt brugernavn!</div>';
    elseif(!isEmail($mail))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv en gyldig e-mail-adresse!</div>';
    elseif(!isValid($number))
        $message = '<div class="msg error"><b>FEJL:</b> Angiv et gyldigt mobil nummer!</div>';
    elseif(!checkPwd($_POST['password'],$_POST['password2'])){
        $message = '<div class="msg error"><b>FEJL:</b> Passwords  er\'ikke ens!</div>';
  }else{
        $ip = VisitorIP();
        $pass = base64_encode($_POST['password']);
        $db->Query("INSERT INTO `users`(username,email,password,number,ip,signup) values('".$user."','".$mail."','".$pass."','".$number."','".$ip."',NOW())");
        $db->Query("DELETE FROM `invites` WHERE `code`='".$invite."'");
        $message = '<div class="msg fuldført du er nu registreret</div>';


og jeg tror number får sin værdi fra den her

<form class="register<?=($form == 2 ? ' active' : '')?>" method="post" action="">
                    <h3>Tilmeld</h3>
                        <div class="column">
                            <div>
                                <label>Brugernavn:</label>
                                <input type="text" name="user" required="required" />
                            </div>
                            <div>
                                <label>Email:</label>
                                <input type="text" name="email" required="required" />
                            </div>
                            <div>&nbsp;</div>
                        </div>
                        <div class="column">
                            <div>
                                <label>Password:</label>
                                <input type="password" name="password" required="required" />
                            </div>
                            <div>
                                <label>Bekræft Password:</label>
                                <input type="password" name="password2" required="required" />
                            </div>
                            <div>&nbsp;</div>
                        </div>
                        <div>
                            <label>Bemærk husk landkoden +45</label>
                            <label>Mobil nummer:</label>
                        <input type="text" name="number" style="width:454px" required="required" />
                        </div>
                        <div>
                            <label>Inviter kode:</label>
                            <input type="text" name="invite" style="width:454px" required="required" />
                        </div>
                        <div class="bottom">
                            <input type="submit" name="register" value="Register" />
                        <a href="#" rel="login" class="linkform">Login here</a>
                            <div class="clear"></div>
                        </div>
                    </form>
                    <form class="login<?=($form == 0 ? ' active' : '')?>" method="post" action="">
                        <h3>Login</h3>
                        <div>
                            <label>Brugernavn:</label>
                            <input type="text" name="username" required="required" />
                        </div>
                        <div>
                            <label>Password:</label>
                            <input type="password" name="password" required="required" />
                        </div>
                        <div class="bottom">
                            <input type="submit" name="login" value="Login" />
                            <a href="#" rel="register" class="linkform">Tilmeld dig her</a>
                            <a href="forgot_password.html" rel="forgot_password" class="linkform">Glemt dit password?</a>
                            <div class="clear"></div>
                        </div>
                    </form>
                    <form class="forgot_password<?=($form == 1 ? ' active' : '')?>" method="post">
                        <h3>Glemt Password</h3>
                        <div>
                            <label>Email:</label>
                            <input type="text" name="email" required="required" />
                            <label>Bemærk husk landkoden +45</label>
                            <label>Mobil nummer:</label>
                            <input type="text" name="number" required="required" />
                            <br>
                            &nbsp;&nbsp;Send nyt password på:
                            <input type="radio" name="radio" value="sms" required="radio" />&nbsp;SMS
                            <input type="radio" name="radio" value="email" />&nbsp;E-mail
                        </div>
                        <div class="bottom">
                            <input type="submit" name="recover" value="Send" />
                            <a href="#" rel="login" class="linkform">Log ind her</a>
                            <a href="#" rel="register" class="linkform">Tilmeld dig her</a>
                            <div class="clear"></div>
                        </div>
                    </form>
Avatar billede olsensweb.dk Ekspert
27. januar 2013 - 20:55 #27
>Så skal du nok slå dine fejlmeddelelser til i PHP. Man kan ikke udvikle uden at se de fejl, man laver  =)
skal man nu også teste sin code :)  preg_replace var ikke tested, tog bare coden fra php.net, og rettede lidt på den
har normalt altid fejl visning slået til serverside og FireBug aktiv clienside når jeg udvikler

>Jeg fik blandet en g-modifier ind, som ikke har noget at gøre i PHP
nej den hører til i JS.
Avatar billede olebole Juniormester
27. januar 2013 - 21:03 #28
@ronols: Sorry, den kommentar var til spørgers - lige før din. Havde spørger fejlmeddelelser slået til, ville min kode udløse en fejl, når han testede den. Dét var pointen  =)

- og jo, det ligner helt klart en dobbeltbruger.
Avatar billede DamerG Nybegynder
27. januar 2013 - 21:50 #29
fejl visning er slået til men der kommer ikke nogen fejl
det virker fint bortset fra den ikke registrer at jeg skiver nummer rigtig
Avatar billede erikjacobsen Ekspert
27. januar 2013 - 21:52 #30
Jeg har på fornemmelsen at du mangler en linie li'som den her:

      $invite = $db->EscapeString($_POST['invite']);

men hvor der står noget med "number"
Avatar billede DamerG Nybegynder
27. januar 2013 - 22:04 #31
tak det var det der manglet nu virker det
Avatar billede olebole Juniormester
28. januar 2013 - 00:07 #32
"fejl visning er slået til men der kommer ikke nogen fejl"

Funktionen i #20 skal smide en warning om en ukendt modifier 'g', så udvikleren ved, hvorfor scriptet ikke virker. Ellers udvikler han i blinde.

Hvis du ikke får sådan en warning, bør du rette din opsætning, så du også får vist warnings - og helst også notice's.

Se evt. på denne funktion, men husk at slå det fra igen, når du er færdig med at udvikle. I den forbindelse kan du prøve at kikke på denne guide
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester