Witam,
ostatnio przerabiam sobie książkę PHP 5 Ćwiczenia praktyczne wyd.III Kierzkowski. Trochę stara, ale konkretna.
No wiec tak, doszłam do ćwiczenia z ankietą no i próbuję zrozumieć ten kod, ale coś mi się tu nie zgadza. Kod działa i nie wyrzuca błędów, a według moich obliczeń powinien wyrzucić błąd o nieistniejącej zmiennej.
INDEX.PHP :
<?php
$glosowanie = array ('6' => 'rewelacyjna', '5' => 'bardzo dobra', '4' => 'dobra', '3' => 'przeciętna', '2' => 'zła', '1' => 'beznadziejna');
function wyswietlanie ($glosowanie, $glosowano) {
if ($glosowano){
if (file_exists('dane/glosowanie.txt')) {
$plik = fopen ('dane/glosowanie.txt', 'r');
$wiersz = fgets ($plik, 255);
fclose ($plik);
$wyniki = split ("\|", $wiersz);
$liczbaglosow = 0;
for ($i=0; $i<count($wyniki); $i++) {
$liczbaglosow += $wyniki [$i];
}
}
print "<p> <b> Ankieta </b> </p>\n";
print "<p> Oceń moją stronę</p> <table> \n";
for (reset($glosowanie); $klucz=key($glosowanie); next($glosowanie)) {
print "<tr> <td>".pos($glosowanie).": </td><td>";
if ($liczbaglosow == 0) {
$procent = 0;
}
else{
$procent = (int)(($wyniki[$klucz-1]/$liczbaglosow)*100);
}
print "<img src=\"img/1.gif\" width='$procent' alt='Wyniki ankiety' height=\"10\" >";
print "</td> <td align='right'> ";
printf ("%0.0f", $procent);
print "%</td> </tr>";
}
print "</table>";
} // koniec if (glosowano)
else{
print '<form action="cookie.php">';
print "<p> <b> Ankieta </b> </p> \n";
print "<p> Oceń moją stronę: </p> <table>";
for (reset($glosowanie); $klucz=key($glosowanie); next($glosowanie)){
print '<tr> <td> <input type = "radio" name = "quiz" value="'.$klucz.'"/>'.pos($glosowanie)."</td> </tr> \n";
}
print '</table> <input type="submit" value="Głosuj">';
print '</form>';
}
} // koniec funkcji wyswietlanie
if (isset($_COOKIE['glosowano'])) $glosowano = true;
else $glosowano = false;
if (!isset($_GET['quiz'])){
wyswietlanie ($glosowanie, $glosowano);
}
?>
COOKIE.PHP:
<?php
$glosowanie = array ('6' => 'rewelacyjna', '5' => 'bardzo dobra', '4' => 'dobra', '3' => 'przeciętna', '2' => 'zła', '1' => 'beznadziejna');
function glosowanie ($glosowanie, $quiz) {
setcookie ('glosowano', '1');
if (file_exists('dane/glosowanie.txt')){
$plik = fopen ('dane/glosowanie.txt', 'r+');
flock ($plik, 2);
$wiersz = fgets ($plik, 255);
$wyniki = split ("\|", $wiersz);
fseek ($plik, 0);
}
else{
$plik = fopen ('dane/glosowanie.txt', 'w+');
flock ($plik,2);
}
for ($i=0; $i<count($glosowanie); $i++){
if ($quiz == $i+1) $wyniki[$i]++;
fputs ($plik, $wyniki [$i]);
if ($i < count ($glosowanie)-1) fputs ($plik, '|');
}
flock ($plik, 3);
fclose ($plik);
} //koniec funkcji glosowanie.
if (isset($_GET['quiz'])){
glosowanie ($glosowanie, $_GET['quiz']);
}
header ("Location: index.php");
?>
To załóżmy taką serię zdarzeń: nikt jeszcze nie głosował i nie utworzyłam pliku glosowanie.txt w katalogu dane.
Według mnie w tej sytuacji kod powinien zadziałać tak:
(wchodzę na index.php) Uruchamia się funkcja wyswietlanie - pierwszy if (if($glosowano)) się nie sprawdza, toteż przechodzimy do elsa i zostaje wyświetlony formularz z ankietą, która po wysłaniu przekierowuje nas do cookie.php.
I tu właśnie leży pies pogrzebany :D uruchamia się funkcja glosowanie i przy założeniu, że nie mamy utworzone pliku glosowanie.txt spełnia się else, który takowy tworzy a potem następuje pętla for, w której jak byk wykorzystana jest zmienna $WYNIKI, która została utworzona w if, który się nie spełnił (więc nie została stworzona?)
Czemu ten kod nie wyrzuca błędu o nieistniejącej zmiennej?