Avatar billede larsholm Nybegynder
02. juni 2008 - 12:45 Der er 6 kommentarer

Hjælp til php kode forståelse

Hej vi sidder og kigger på et login system for at lære hvordan man laver et og vi har lidt problemer med hvad denne kodeforneden gør?

Det er kun toppen af kode vi ahr smidt op da vi godt ved hvad den nederste del gør så det er derfor der bal ikke er ?> med. Dette er skrevet for i ikke skal blive forviret :D
-------------------------------------------------------------------

<?php

#### Validations funktioner ####

function valid_email($email)
{

    // Først tjekker vi om der er et @ derefter tjekker vi om det har den rigtige længde.
    if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))
    {
        // Email er invalid fordi der er det forkerte antal karakter i en session eller det forkerte antal numre af @ symboler.
        return false;
    }
    // Lavet til sektioner for at gøre livet lidt nemmere.
    $email_array = explode("@", $email);
    $local_array = explode(".", $email_array[0]);
    for ($i = 0; $i < sizeof($local_array); $i++)
    {
        if (!ereg("^(([A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~-][A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",
            $local_array[$i]))
        {
            return false;
        }
    }
    if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1]))
    { // Checker at domain er IP. Hvis ikke skulle det gerne være et valid domainnavn.
        $domain_array = explode(".", $email_array[1]);
        if (sizeof($domain_array) < 2)
        {
            return false; // Not enough parts to domain
        }
        for ($i = 0; $i < sizeof($domain_array); $i++)
        {
            if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i]))
            {
                return false;
            }
        }
    }
    return true;
}
Avatar billede w13 Novice
02. juni 2008 - 12:50 #1
Hele den kode er jo en funktion, der tjekker om en e-mail-adresse er gyldig.
Og der er jo også ret mange kommentarer i koden.. Hvad er I i tvivl om?
Avatar billede larsholm Nybegynder
02. juni 2008 - 12:57 #2
det er sådan set set linje for linje vi er i tvilv om. Der er som sagt kommentare men de beskriver ikke hver linje og det er det som giver os nogle problemer.
Avatar billede jakobdo Ekspert
02. juni 2008 - 13:12 #3
Hvad med at vende den rundt og du skriver de linjer du ikke forstår og gerne vil have forklaret ?
Avatar billede jakobdo Ekspert
02. juni 2008 - 14:05 #4
Og mange funktioner er ganske ok forklaret, hvis du besøger:

http://dk.php.net/FUNKTIONS_NAVN
f.eks.:
http://dk.php.net/explode
Avatar billede w13 Novice
02. juni 2008 - 14:08 #5
Der bruges meget reg.exp. i koden (Regular Expression), hvilket også er en god idé. F.eks. her:

if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))

I den linje er reg.exp.'en følgende: "^[^@]{1,64}@[^@]{1,255}$"
Og hvordan reg.exp. fungerer, kan jeg ikke lige forklare dig, da det er et forholdsvis kompliceret "værktøj".

Men det bruges kort sagt bare til at lave et mønster med, som man så kan sammenligne med sin tekststreng. F.eks. tester ovenstående mønster bl.a. om der er et @ i teksten, og om teksten er mellem 1 og 255 tegn (ligesom der står i kommentaren).
Avatar billede johny Nybegynder
03. juni 2008 - 11:58 #6
(Jeg vil lige starte med at sige, at jeg også er forholdsvis grøn på dette område, men jeg tror jeg har forstået det meste af det her.)

Som w13 pointerer, så er det brug af RegEx der her er tale om, og det er lidt af en omgang at forklare, men jeg kan lige her prøvet at forklare lidt af funktionaliteten:

if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email))

Ovenstående sætning består af flere dele. "ereg" er en metode der tager 2 input (og 2 valgfrie der ikke bliver brugt her), hvor det første parameter er et mønster, et såkaldt "Regular Expression", der beskriver et mønster i en streng. Det andet parameter er strengen mønsteret skal holdes op imod. Metodern returnerer så true/false, om hvorvidt mønsteret forekommer i strengen eller ej.

Det mønster som vi ser her, tester om der er ét og kun ét @ i emailadressen, og om det er omgivet af 1-64 tegn på venstre side, og 1-255 tegn på højre side.

Jeg ved ikke om I så er med på følgende:
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
Men det gør blot det, at den deler strengen op i bider, så email_array kommer til at indeholde 2 strenge. Index 0 indeholder venstre side, og index 1 indeholder højre side.
Venstre side bliver så opdelt yderligere i lige så mange strenge som der er punktummer, og gemt i local_array.

Dernæst løbes alle de strenge så igennem, og tjekkes op mode dette mønster:
"^(([A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~-][A-Za-z0-9!#$%&#038;'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"

Det er mildest talt lidt af en omgang, og ja, her er det nok bare bedst at sige, at den tester på alle tegn er gyldige, og om længden er korrekt (max 63 tegn).

Dernæst testes højre side, og her først om det er en ip-adresse:
"^\[?[0-9\.]+\]?$"

Derefter, hvis ikke det er en ip-adrese, deles den op i dele (præcis som venstre side blev det), og hver stump bliver testet på dette mønster:
"^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$"

Her bliver der kun testet efter gyldige tegn, som i dette tilfælde er store og små bogstaver i den engelske alfabet, og cifre. Derudover er det tilladt med '-', hvis den altså er omgivet af nogen af de andre gyldige tegn på begge sider. Derudover testes længden til at være maks 63 tegn.

(Så lige nogle opklarende spørgsmål til andre eksperter:
i mønster nummer 2 (det længste), er der på et tispunkt et test på punktum, og hvad nytter det, når der allerede er lavet explode på det?
og i 3. mønster om ip, den er da vel heller ikke særlig specifik? Burde den ikke, taget de høje krav på nogen af de andre expressions i betragtning, ikke udvides en del?
Og det sidste regex, er der et '|' tegn, som for mig at se ikke tilføjer andet end et hul, der tillader en længde på over 63 tegn? Burde det ikke bare fjernes?)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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