Strict Standards: Non-static method Advanced_Permalinks::get() should not be called statically in /blog/wp-content/plugins/advanced-permalinks/advanced-permalinks.php on line 825

Strict Standards: call_user_func_array() expects parameter 1 to be a valid callback, non-static method GoogleSitemapGeneratorLoader::Enable() should not be called statically in /blog/wp-includes/plugin.php on line 123

Warning: call_user_func_array() expects parameter 2 to be array, null given in /blog/wp-includes/plugin.php on line 123
[PHP] Jak wykonać prosty system do głosowania? » Porady PHP » egrafik.pl
BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 16 | UU: 1126

Strict Standards: Resource ID#196 used as offset, casting to integer (196) in /forum2/db/mysql4.php on line 223

Strict Standards: Resource ID#196 used as offset, casting to integer (196) in /forum2/db/mysql4.php on line 224
[PHP] Jak wykonać prosty system do głosowania?
Porady PHP | 17 luty 2009 | Wizyt: 111807

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Strict Standards: Only variables should be assigned by reference in /blog/wp-includes/post.php on line 114

Deprecated: Function eregi() is deprecated in /blog/wp-content/plugins/tpbc.php on line 96

Ten artykuł przedstawi sposób na wykonanie prostego systemu do obsługi głosowania. Aby skrypt był jeszcze bardziej nieskomplikowany, informacje będą przechowywane w plikach tekstowych.

Uwagi:

  • Wszystkie części wyjaśnianego w poradzie kodu powinny znajdować się w jednym pliku z rozszerzeniem .php.
  • Prócz pliku .php należy stworzyć plik z rozszerzeniem .txt i nadać mu prawa dostępu 777, plik ten powinien znajdować się w tej samej lokalizacji co plik .php.
  • Kod z formularzem i skryptem można w całości skopiować na końcu tej porady.

Nasz program będzie się składał z kilku części:

  • Formularz HTML z możliwością głosowania.
  • Wyzerowanie i ustawienie zmiennych.
  • Sprawdzenie czy wcześniej głosowano z tego samego IP. 
  • Zapis danych z aktualnego głosowania 
  • Wyświetlenie średniej z głosowania i liczby głosowań. 

Formularz głosowania:
W tej części stworzymy prosty formularz HTML. Będzie zawierał listę z wariantami oceny od 1 do 5. Atrybut name w polu select zawiera nazwę "glosowanie", która podczas wysyłania formularza będzie przyjmować jedną z pięciu wartości z pól options (value=’tuaj ocena’).

Kod: php

<form method="post" action="<?php echo $_SERVER[’PHP_SELF’]; ?>">
<select name="glosowanie">
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
 <option value="4">4</option>
 <option value="5">5</option>
</select>
<input type="submit" value="glosuj" name="submit" />
</form>

Ustawienie, wyzerowanie zmiennych:
W tej części ustawone zostaną wartości początkowe naszych zmiennych. Zmienna $glosowanie otrzyma wartość równą wartości wybranej w formularzu oceny, ale tylko w przypadku, gdy taka wartość została wybrana - czyli został wysłany formularz. Jeżeli formularz nie zostanie wysłany (np. podczas odczytywania pliku .php w przeglądarce) zmienna $glosowanie będzie miała wartość 0. Dodatkowo zmienna $ip pobierze adres IP, z którego wywołany został formularz - czyli IP głosującego. Wartość ta będzie potrzebna aby uniknąć sytuacji wielokrotnego głosowania z tego samego komputera. To oczywiście dosyć proste zabezpieczenie, ale dla podstawowych zastosowań bardzo użyteczne.

Kod: php

<?php
$glosowanie = isset($_POST[‘glosowanie’]) ? $_POST[‘glosowanie’] : 0;
$nazwa_pliku = "plik_glosowanie";
$czy_glosowano = false;
$suma_punktow = 0;
$suma_glosowan = 0;

$ip = getenv(‘REMOTE_ADDR’);
?>

Sprawdzenie czy głosowano wcześniej z tego samego IP:
W tej części skrypt odczyta dotychczasowe dane z pliku tekstowego i sprawdzi czy nie istnieje czasem już IP, z którego dokonano wcześniej głosowania. Jeżeli tak się stanie zmienna $czy_glosowano otrzyma wartość true, przez co nie będzie możliwe zapisanie aktualnego głosowania.

Kod: php

<?php
// Odczyt pliku tekstowego
$stare_glosowania = file($nazwa_pliku.‘.txt’);

// Suma glosow i glosowan
foreach ($stare_glosowania as $value) {
$jedno_glosowanie = explode(‘:’,$value);
// Sprawdzenie czy numer IP jest taki sam jak IP aktualnego glosowania
if ($ip == $jedno_glosowanie[0]) $czy_glosowano = true;
$suma_glosowan++;
$suma_punktow += $jedno_glosowanie[1];
}
?>

W powyższym kodzie pętla foreach sprawdza plik tekstowy linia po linii. Do zmiennej $jedno_glosowanie przypisywana jest każdorazowo tablica z dwoma wartościami (ip:oceana) z kolejnych linii. Jeżeli skrypt sprawdzi, że zmienna $ip (ip aktualnie głosującego) jest taka sama jak któraś z wartości w pliku tekstowym, zmienna $czy_glosowano przyjmie wartość true, co uniemożliwi zapis aktualnych wyników głosowania do pliku. Innymi słowy głosowanie się nie uda.

Zapis danych z aktualnego głosowania:
Jeżeli w wyniku działania poprzedniej części kodu zmienna $czy_glosowano nie zmieni wartości na true, a zmienna $glosowanie będzie większa od 0 (co jest możliwe tylko w przypadku wysłania formularza), wartości z auktualnego głosowania zostaną zapisane do pliku tekstowego. Funkcja fopen() zajmie się otwarciem naszego pliku tekstowego i zapisze na jego końcu dodatkową linię (numer ip głosującego:ocena z aktualnego głosowania). O tym, że wartość będzie dopisywana do pliku na końcu decyduje atrybut a+. Następnie plik tekstowy zostanie zamknięty, zmienna $suma_glosowan zwiększy wartość o 1, a zmienna $suma_punktow zwiększy wartość o aktualnie wybraną ocenę.

Kod: php

<?php
// Jezeli glosowanie jest udane zapisz dane do pliku txt
if ((!$czy_glosowano) && ($glosowanie > 0)){
$f = fopen($nazwa_pliku.".txt","a+");
fwrite($f,$ip.‘:’.$glosowanie."\n");
fclose($f);
$suma_glosowan++;
$suma_punktow+=$glosowanie;
}
?>

Wyświetlenie średniej oceny i liczby głosowań:
W ostanim kroku wyświetlimy aktualne wyniki głosowań oraz średnią ocenę jaka się z tych głosowań wyłoni. Można to zrobić wyświetlając same wartości liczbowe lub za pomocą jakiejś grafiki np. gwiazdek. W poniższym przykładzie warto zwrócić uwagę na finkcję substr(), która spowoduje odczytanie trzech pierwszych znaków z ułamka dziesiętnego powstałego w wyniku dzielenia sumy punktów przez sumę głosowań.

Kod: php

<?php
echo "Aktualna srednia po $suma_glosowan glosowaniu to: "
.substr(($suma_punktow/$suma_glosowan),0,3)."
"
;
?>

A tutaj cały kod:

Kod: php

<form method="post" action="<?php echo $_SERVER[’PHP_SELF’]; ?>">
<select name="glosowanie">
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
 <option value="4">4</option>
 <option value="5">5</option>
</select>
<input type="submit" value="glosuj" name="submit" />
</form>

<?php
$glosowanie = isset($_POST[‘glosowanie’]) ? $_POST[‘glosowanie’] : 0;
$nazwa_pliku = "plik_glosowanie";
$czy_glosowano = false;
$suma_punktow = 0;
$suma_glosowan = 0;

$ip = getenv(‘REMOTE_ADDR’);

// Odczyt pliku tekstowego
$stare_glosowania = file($nazwa_pliku.‘.txt’);

// Suma glosow i glosowan
foreach ($stare_glosowania as $value) {
$jedno_glosowanie = explode(‘:’,$value);

// Sprawdzenie czy numer IP jest taki sam jak IP aktualnego glosowania
if ($ip == $jedno_glosowanie[0]) $czy_glosowano = true;
$suma_glosowan++;
$suma_punktow += $jedno_glosowanie[1];
}

// Jezeli glosowanie jest udane zapisz dane do pliku txt
if ((!$czy_glosowano) && ($glosowanie > 0)){
$f = fopen($nazwa_pliku.".txt","a+");
fwrite($f,$ip.‘:’.$glosowanie."\n");
fclose($f);
$suma_glosowan++;
$suma_punktow+=$glosowanie;
}

echo "Aktualna srednia po $suma_glosowan glosowaniu to: "
.substr(($suma_punktow/$suma_glosowan),0,3)."
"
;
?>

Autor: Adam Suchowski

nowe Porady PHP » zobacz wszystkie
Dodaj komentarz









Komentarze
Jeden komentarz
26 październik 2016, godz. 9:12

It’s very simple to find out any topic on net as compared to textbooks, as I found this post at this web page.

 
| | | |
Copyright © 2006-2013 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker