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)

Realizarea unui sondaj simplu in PHP

22.04.2010
Realizarea unui sondaj simplu in PHP

In acest tutorial vei invata cum sa creezi un formular pentru sondaje in PHP si cum sa prelucrezi si sa afisezi rezultatele voturilor. Formularul pe care il vom defini este unul simplu ce contine o intrebare si doua variante de raspuns: DA/NU.

Total vizualizari: 8415 8415 afisari   |   Comentarii  3   |   Rating   |   (7 voturi)   |   Timp necesar: 20 min 20 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Autor: mozzartut Expert
Download
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
1
comenteaza printeaza

In acest tutorial vei invata cum sa creezi un formular pentru sondaje in PHP si cum sa prelucrezi si sa afisezi rezultatele voturilor.

Formularul pe care il vom defini este unul simplu ce contine o intrebare si doua variante de raspuns: DA/NU. Pentru inceput, vom crea doua fisiere : voteaza.php - ce va afisa sondajul cu variantele de raspuns si va prelucra voturile si rezultate.php - ce va calcula numarul de voturi obtinute de fiecare raspuns.

Aici poti vedea un demo al formularului pe care il vom realiza.

Fisierul voteaza.php

In acest fisier vom verifica mai intai daca avem sau nu date transmise prin apasarea butonului de submit din formular.

Formularul pe care il vom folosi are urmatoarea forma:

 
<form action="<?php echo $PHP_SELF; ?>" method="post">
    <div class="form">
        <?php echo "$intrebare"; ?>
    </div>
    <input type="radio" name="vote" value="da"/>Da<br/>
    <input type="radio" name="vote" value="nu"/>Nu<br/>
    <br/>
    <input type="submit" name="submit" value="voteaza" class="btn"/>
</form>

Dupa cum poti observa, atributul action al tag-ului form este initializat cu variabila $PHP_SELF, ceea ce semnifica fisierul .php curent (cel care este afisat in bara de navigare a browserului). In locul intrebarii am afisat variabila $intrebare, ce va trebui initializata inainte de afisarea formularului cu un text ce poate fi citit fie dintr-o baza de date, fie dintr-un fisier. Pentru acest exemplu, eu am initializat variabila astfel:

$intrebare = "E util acest tutorial?"

Ce mai poti observa este ca intrebarea este urmata de doua campuri input de tip radio-button, ce reprezinta cele doua variante de raspuns, si un buton de submit.

Pentru a verifica daca un utilizator de la o anumita adresa IP a votat deja, vom seta un cookie ce expira in 24 de ore. Cu alte cuvinte, un utilizator nu va putea vota decat o singura data pe zi.

 OBS.    Un cookie este un fisier text ce este salvat de catre browser pe calculatorul utilizatorului. Un cookie retine una sau mai multe perechi de tipul nume-valoare, ce pot fi encriptate pentru a securiza datele.


Cookie-ul va fi initializat utilizand functia predefinita setcookie() din php, ce are ca parametri numele cookie-ului, valoarea si ora cand expira. Timpul de expirare este calculat cu functia time() – ce returneaza data si ora curenta exprimate in secunde, la care adaugam o durata de 24 de ore, exprimata de asemenea in secunde.

<?php 
// memoram adresa ip a utilizatorului in variabila $ip
$ip = $_SERVER['REMOTE_ADDR'];
        
// calculam timpul de expirare al cookie-ului in secunde (timpul curent + 24 h)
$expira = time()+60*60*24;
        
// setam cookie-ul
setcookie("user", "$ip", $expira);
?>


 OBS.    In codul de mai sus poti observa ca adresa IP a utilizatorului poate fi preluata din variabila superglobala $_SERVER, mai precis ea este data de proprietatea $_SERVER['REMOTE_ADDR'].


Pentru a verifica daca de la o adresa s-a votat deja vom utiliza variabila $_COOKIE[’nume cookie’], in cazul nostru $_COOKIE['user'].

 OBS.   Cookie-urile nu reprezinta o metoda foarte sigura de a te asigura ca un utilizator voteaza o singura data in 24h. Ele pot fi sterse din browser, ceea ce inseamna ca utilizatorul va putea accesa din nou formularul. Daca vrei sa limitezi accesul la anumite zone importante dintr-un site, nu te baza pe cookie-uri, ci utilizeaza formulare de login si o baza de date MySQL.


Iata cum va arata codul final din fisierul voteaza.php:

 
<?php
 
// Verificam daca am primit date prin POST (daca butonul de submit este setat)
 
if(!isset($_POST['submit'])){
    
    // Daca nu avem date transmise
    
    // Verificam daca exista un cookie 'user' (daca s-a votat deja de la ip-ul respectiv)
    if(isset($_COOKIE['user'])){
        
        // Daca s-a votat deja, include fisierul ce calculeaza rezultatele
        include "rezultate.php";
    } else{
        
        // Seteaza textul intrebarii si afiseaza formularul
        $intrebare = "E util acest tutorial?";
    ?>
        <form action="<?php echo $PHP_SELF; ?>" method="post">
            <div class="form">
                <?php echo "$intrebare"; ?>
            </div>
            <input type="radio" name="vote" value="da"/>Da<br/>
            <input type="radio" name="vote" value="nu"/>Nu<br/>
            <br/>
            <input type="submit" name="submit" value="voteaza" class="btn"/>
        </form>
    <?
    }
    
    
} else {
    
    // Daca avem date transmise
 
    // Verificam daca exista vectorul de raspunsuri
    if($_POST['vote']){
        
        // memoram adresa ip a utilizatorului in variabila $ip
        $ip = $_SERVER['REMOTE_ADDR'];
        
        // calculam timpul de expirare al cookie-ului in secunde (timpul curent + 24 h)
        $expira = time()+60*60*24;
        
        // setam cookie-ul
        setcookie("user", "$ip", $expira);
        
        // deschide fisierul text pentru inregistrarea voturilor
        define(LOG_FILE, "voteaza.log");
        $f = @fopen(LOG_FILE, 'a+');
        if ($f) {
            // scriem in fisierul log ora, ip-ul utilizatorului si raspunsul selectat
            @fputs($f, date("m.d.Y g:ia").$_SERVER['REMOTE_ADDR']." ".$_POST['vote']."\n");
            @fclose($f);
        }
        
        // includem fisierul .php care afiseaza rezultatele
        include "rezultate.php";
    } else{
        
        // daca nu avem raspunsuri in POST, afisam un mesaj si reincarcam pagina
        echo "Nu ai ales nici o varianta.";
        echo "<meta http-equiv='refresh' content='1'>";
    }
}
 
?>

Dupa cum poti observa in codul de mai sus, pe langa lucrurile discutate deja am introdus si scrierea raspunsurilor utilizatorilor intr-un fisier text ("voteaza.log"), deoarece pentru a calcula numarul de raspunsuri DA sau NU, avem nevoie de un istoric al tuturor voturilor. Desigur, in locul fisierului text poti utiliza si o tabela MySQL.

In plus, pentru a afisa procentajul din fiecare raspuns, am creat un fisier rezultate.php ce este incarcat in voteaza.php cu instructiunea include:

include "rezultate.php"


Fisierul rezultate.php

Acest fisier va citi in primul rand toate inregistrarile din fisierul de log si le va retine in variabila $continut:

<?php 
$fisier = "voteaza.log";
$fh = fopen($fisier, 'r');
$continut = fread($fh, filesize($fisier));
fclose($fh);
?>

Pentru a calcula numarul de voturi Da si Nu, vom folosi functia predefinita str_replace(). Aceasta functie este utilizata in special pentru a inlocui o anumita secventa sau sablon dintr-un text cu o alta secventa de caractere, dar pentru acest exemplu am utilizat-o pentru a numara aparitiile textelor „da” si „nu”. Ea are ca parametri: sablonul sau sirul de caractere inlocuit (da/nu), sirul de caractere ce inlocuieste sablonul (pe care il lasam gol), sirul de caractere in care cautam (in acest caz continutul fisierului) si numarul de aparitii ale sablonului.

Iata codul ce va calcula numarul de raspunsuri:

<?php 
// Calculeaza numarul de voturi "Da"
$raspuns1 = "da";
$str = str_replace("$raspuns1", "", "$continut", $count1);
 
// Calculeaza numarul de voturi "Nu"
$raspuns2 = "nu";
$str = str_replace("$raspuns2", "", "$continut", $count2);

Intr-un final, fisierul nostru va arata astfel:

<?php 
 
// Deschide fisierul text si memoreaza continutul in variabila $continut
$intrebare = "E util acest tutorial?"; 
$fisier = "voteaza.log";
$fh = fopen($fisier, 'r');
$continut = fread($fh, filesize($fisier));
fclose($fh);
 
// Calculeaza numarul de voturi "Da"
$raspuns1 = "da";
$str = str_replace("$raspuns1", "", "$continut", $count1);
 
// Calculeaza numarul de voturi "Nu"
$raspuns2 = "nu";
$str = str_replace("$raspuns2", "", "$continut", $count2);
 
// Calculeaza numarul total de voturi
$total = $count1 + $count2;
 
// Afiseaza intrebarea
echo "<div class='intrebare'>";
echo "$intrebare";
echo "</div>";
 
// Rezultat imagine voturi "Da"
$raspuns1 = $count1/$total*140;
echo "Da ($count1 voturi)<br/>
    <div class='linie'>
        <div style='width:".$raspuns1."px; height:12px; background-color:#E20000;'></div>
    </div>";
 
// Rezultat imagine voturi "Nu"
$raspuns2 = $count2/$total*140;
echo "Nu ($count2 voturi)<br/>
    <div class='linie'>
        <div style='width:".$raspuns2."px; height:12px; background-color:#EB0000;'></div>
    </div>";
 
echo "<br/>Total: $total voturi<br/>";
?>

Dupa cum poti observa, dupa ce am calculat numarul de voturi, le-am afisat intr-o forma grafica utilizand div-uri si formatare css.

Obs. Pentru a descarca sursele, inclusiv fisierul css, acceseaza linkul de Download din partea de sus a paginii.

Sper ca acest tutorial sa-ti fie de folos. Nu uita, pentru a folosi acest cod in proiectele tale, trebuie sa incluzi fisierul style.css in tag-ul head al paginii html, si sa incarci fisierul voteaza.php acolo unde vrei sa apara formularul de vot astfel:

include  "voteaza.php"

Aici poti vedea tutorialul si pe blogul meu. Mult succes!

Pagina:
1
comenteaza printeaza

Cuvinte cheie:   php,   sondaj,   vot,   post,   formular,   submit,   str_replace,   cookie,   ip

Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(7 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (3) spune-ti parerea
14k , Duminica, 13 Iulie 2014, ora 12:47
#3

eu am o mica problema cu acest cod....imi tot da "Parse error: syntax error, unexpected end of file in D:zona de lucruwampwww estvoteaza.php on line 71"

desi nu vad nimic gresit.... are cineva vreo idee?

Raporteaza acest comentariu ca injurios!
mozzartut mozzartut , Miercuri, 05 Mai 2010, ora 16:12
#2

Cu placere :)

Raporteaza acest comentariu ca injurios!
alext_1020 alext_1020 , Joi, 29 Aprilie 2010, ora 10:33
#1

Foarte tare! Merci mult!

Raporteaza acest comentariu ca injurios!
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
4430
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
4330
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
4290
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4130
Tutoriale scrise de kheops
kheops Rang utilizator kheops - Mediu
4084
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
Dreamweaver Flash Ruby on Rails Java Action Script Python Illustrator Excel Fotografie StyleSheet PHP PSD Vista RoR XHTML Verilog Outlook Fireworks AJAX COREL DRAW Gimp SEO XML Javascript Swift 3D Bridge SWF CSS Photoshop MySQL HTML Sony Vegas Lightroom Word Powerpoint JSON
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