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!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{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; }
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.
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).
(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!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{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?)
Synes godt om
Ny brugerNybegynder
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.