E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

XIII. Colectorul de reziduuri a venit

06.11.2008
XIII. Colectorul de reziduuri a venit

Poate ai auzit de termenul GIGO inainte. Daca nu, afla ca vine de la Garbage In, Garbage Out si reprezinta un fapt elementar ce tine de programare: daca iti „hranesti” programul cu ceva rau, mai mult ca sigur vei primi un rezultat la fel de rau.

Total vizualizari: 5353 5353 afisari   |   Comentarii  0   |   Rating   |   (3 voturi)   |   Timp necesar: 35 min 35 min   |   Nivel de cunostiinte necesar: Mediu  Mediu

Sursa:  Devzone.zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1 2
comenteaza printeaza

Daca tot suntem la acest subiect, trebuie sa mentionez si functia strlen() ce ia ca parametru un sir de caractere si  returneaza lungimea acestuia. Aceasta iti va fi de ajutor pentru a te asigura ca datele introduse in campul din formular nu depasesc o anumita lungime. Urmatorul exemplu iti arata cum:

<html>
<head></head>
<body>
<?php
if (!isset($_POST['submit'])) {
?>
    <form action = '<?php $_SERVER['PHP_SELF']?>' method = 'post'>
    Introdu o porecla intre 6 si 10 caractere:
    <br />
    <input type = 'text' name = 'nick'>
    <br />
    <input type = 'submit' name = 'submit' value = 'Salveaza'>
    </form>
<?php
}
else {
    // verifica datele cerute
    // die daca nu exista
    if (!isset($_POST['nick']) || trim($_POST['nick']) == '') { 
        die ('EROARE: Haide, sunt singur ca te poti gandi la o porecla! Ce zici de Pooky?');
    }
 
    // verifica daca input-ul are lungimea corecta
    if (!(strlen($_POST['nick']) >= 6 && strlen($_POST['nick']) <= 10)) {
        die ("'EROARE: Porecla este fie prea lunga, fie prea scurta!");
    }
 
    // proceseaza datele
    echo "Voi accepta porecla {$_POST['nick']} deoarece vad ca esti tu!";
}
?>
</body>
</html>

In acest caz, functia strlen() e folosita pentru a verifica daca sirul introdus nu e nici prea lung, nici prea scurt. Iti va fi de ajutor si pentru a te asigura ca datele corespund cu cerintele de lungime ale bazei de date. De exemplu, daca ai un camp MySQL VARCHAR(10), sirurile mai lungi de peste 10 caractere vor fi taiate. Functia strlen() poate juca rolul unui sistem de detectare timpurie in acest caz, notificand user-ul asupra neconcordantelor de lungime si evitand coruperea informatiilor.

Jocul de-a intalnirea

Verificarea datelor calendaristice reprezinta un alt aspect important al validarii input-ului. E mult prea usor pentru un user sa selecteze o data ca 29-Feb-2005 sau 31-Apr-2005, dintre care nici una nu e valida. Asadar, e important sa verifici daca valorile datelor oferite de user sunt valide inainte de a le folosi intr-un calcul.

In PHP acest lucru e mult mai simplu decat in alte limbaje datorita functiei checkdate(). Aceasta functie accepta 3 argumente: luna, zi si an si returneaza o valoare booleana care indica daca data e valida sau nu. Urmatorul exemplu demonstreaza acest lucru:

<html>
<head></head>
<body>
<?php
if (!isset($_POST['submit'])) {
?>
    <form action = '<?php $_SERVER['PHP_SELF']?>' method = 'post'>
    Scrie ziua ta de nastere:
    <br /><br />
    <select name = 'day'>
    <?php
    // genereaza numerele zilelor
    for ($x = 1; $x <= 31; $x++) {
        echo "<option value = $x>$x</option>";
    }
    ?>
    </select>
    <select name = 'month'>
    <?php
    // genereaza numele lunilor
    for ($x = 1; $x <= 12; $x++) {
        echo "<option value=$x>".date('F', mktime(0, 0, 0, $x, 1, 1)).'</option>';
    }
    ?>
    </select>
    <select name = 'year'>
    <?php
    // genereaza valorile anilor
    for ($x = 1950; $x <= 2005; $x++) {
        echo "<option value=$x>$x</option>";
    }
    ?>
    </select>
    <br /><br />
    <input type = 'submit' name = 'submit' value = 'Salveaza'>
    </form>
<?php
}
else {
    // verifica daca data e valida
    if (!checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {
        die("EROARE: Data {$_POST['day']}-{$_POST['month']}-{$_POST['year']} nu exista!");
    }
 
    // proceseaza data
    echo "Ai introdus {$_POST['day']}-{$_POST['month']}-{$_POST['year']} - ceea ce reprezinta o data valida.";
}
?>
</body>
</html>

Incearca sa tastezi o data invalida si vei vedea cum PHP te atentioneaza. Daca salvezi acest input intr-un tabel MySQL, e interesant de stiut ca MySQL nu realizeaza o verificare riguroasa a datei inainte de a accepta o valoare DATE, DATETIME sau TIMESTAMP. In schimb, se asteapta ca developer-ul sa construiasca o optiune de verificare a datei in cadrul aplicatiei propriu-zise. Ceea ce MySQL va face, daca gaseste o valoare evident ilegala, este sa transforme data intr-o valoare zero, ceea ce nu prea te ajuta. Citeste mai mult despre asta la http://dev.mysql.com/doc/mysql/en/datetime.html.

Daca tot dezbatem acest subiect, hai sa vorbim putin si despre elementele cu selectie multipla cum ar fi meniurile drop-down, listele checkbox si radio button. Pentru cazurile in care cel putin o valoare trebuie selectata, developer-ul trebuie sa verifice ca macar una din optiunile disponibile a fost aleasa de catre utilizator. Acest lucru implica, in mare, o folosire inteligenta a isset() si pentru meniurile multi-select - functiile is_array() si sizeof(). Urmatorul exemplu ilustreaza acest lucru:

<html>
<head></head>
<body>
<?php
if (!isset($_POST['submit'])) {
?>
    <form action = '<?php $_SERVER['PHP_SELF'] ?>' method = 'post'>
    Blat pizza:
    <br />
    <input type = 'radio' name = 'blat' value = 'subtire si crocant'>Subtire si crocant
    <input type = 'radio' name = 'blat' value = 'pufos'>Pufos
    <br />
Branza:
    <br />
    <select name = 'branza'>
        <option value = 'mozzarella'>Mozzarella</option>
        <option value = 'parmesan'>Parmesan</option>
        <option value = 'gruyere'>Gruyere</option>
    </select>
    <br />
    Topping-uri:
    <br />
    <select multiple name = 'toppings[]'>
        <option value = 'rosii'>Rosii</option>
        <option value = 'masline'>Masline</option>
        <option value = 'pepperoni'>Pepperoni</option>
        <option value = 'ceapa'>Ceapa</option>
        <option value = 'ardei iute'>Ardei iute</option>
        <option value = 'cabanos'>Cabanos</option>
    </select>
    <br />
    <input type = 'submit' name = 'submit' value = 'Salveaza'>
    </form>
<?php
}
else {
    // verifica radio button
    if (!isset($_POST['base'])) {
        die('Trebuie sa selectezi un tip de blat');
    }
 
    // verifica list box
    if (!isset($_POST['cheese'])) {
        die("Trebuie sa selectezi un tip de branza");
    }
 
    // verifica multi-select 
    if (!is_array($_POST['toppings']) || sizeof($_POST['toppings']) < 1) {
        die('Trebuie sa selectezi cel putin un topping');
    }
 
    // proceseaza datele
    echo "O pizza {$_POST['base']} {$_POST['cheese']} cu ";
    foreach ($_POST['toppings'] as $topping) echo $topping.", ";
    echo "e pregatita!";
 
}
?>
</body>
</html>

Fara a insista prea mult, functia isset() verifica doar faptul ca cel putin unul din seturile de optiuni a fost selectat si printeaza un mesaj eroare daca nu avem de a face cu acest lucru. Observa cum se valideaza meniurile dropdown cu selectie multipla: cand formularul este transmis, valorile alese sunt imbricate intr-un vector, iar functiile PHP is_array() si sizeof() sunt folosite pentru a testa acel vector si pentru a se asigura ca el contine macar un element.

Pagina:
« 1 2
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(3 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
4335
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4200
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4185
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4025
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Ruby on Rails PSD Java MySQL Python Gimp Action Script Outlook XML Sony Vegas Verilog Javascript Bridge Fireworks AJAX Lightroom Fotografie JSON Photoshop StyleSheet PHP Excel Dreamweaver COREL DRAW Vista HTML CSS Swift 3D RoR Flash Powerpoint XHTML SWF SEO Word Illustrator
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software