Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sonda
Forum PHP.pl > Forum > Gotowe rozwiązania
DanielBB
Witam wszystkich. Chciałbym przeanalizować kod skryptu sondy znalezionego w sieci, jednak u mnie w wersji autora nie działa.
Czyżby sam autor opublikował skrypt z błędem? W każdym razie nie potrafię go znaleźć.
Objaw jest taki że skrypt nie wyświetla co prawda komunikatu o błędzie ale po naciśnieciu na TAK lub Nie sondy, w nagłówku przeglądarki widać jej reakcję(zmiana http://localhost/index.php na http://localhost/index.php?action=vote&ok=1#sonda). Natomiast obraz jest odświeżany ale nic się nie dzieje (oddane głosy: brak i TAk i NIE dalej na 50%)
Czy ktoś zna rozwiązanie? Z góry dziękuję.

[php:1:490d1a9613]
<?
if (!isset($action)) {
$action="display";
}
$base="sonda/data/poll.dat";
$data=file($base);
$splitted=explode("||", $data[0]);
$splitted[2]=trim($splitted[2]);
$all=$splitted[1] + $splitted[2];
if($all>=2) {
$result1=$all / $splitted[1];
$result1=100 / $result1;
$result1=round($result1,0);
$result2=100 - $result1;
$votes=$all;
}
elseif($all==1) {
if($splitted[1]==1) {
$result1=100;
$result2=0;
$votes=1;
}
if($splitted[2]==1) {
$result1=0;
$result2=100;
$votes=1;
}
}
else {
$result1=50;
$result2=50;
$votes="brak";
}

$show_poll="<a name="sonda"></a><br><center>$splitted[0]<br><br>
<table width=200 height=10 cellpadding=0 cellspacing=0><tr><td width=$result1*2 height=10 bgcolor=green background=sonda/img/poll_blue.gif></td>
<td width=$result2*2 height=10 bgcolor=red background=sonda/img/poll_red.gif>
</td></tr></table>
<table width=250><tr>
<td width=50%><p align=left><a href=sonda/vote.php?id=1>Tak</a> ($result1%)</p></td>
<td width=50%><p align=right>($result2%) <a href=sonda/vote.php?id=2>Nie</a></p></td></tr></table>
razem głosów: <b>$votes</b>";

switch ($action) {
case "display":

echo $show_poll;
echo "</center>";
break;

case "vote":

echo $show_poll;
if ($ok=="1") {
echo "<br><b>Dziękuję. Twój głos został dodany.</b></center>";
}
else {
echo "<br><b><font color=red>Nie można głosować dwa razy!</font></b></center>";
}
break;
}
?>
[/php:1:490d1a9613]

oraz plik vote:


[php:1:490d1a9613]
<?
//Nazwa strony (pliku), na której będzie umieszczona sonda, np. "index.php";
$site_name="index.php";

if ($voted=="1") {
header("Location: ../$site_name?action=vote#sonda");
die();
}
setcookie("voted", "1", time()+604800);
$base="data/poll.dat";
$data=file($base);
$splitted=explode("||", $data[0]);
$splitted[2]=trim($splitted[2]);
$splitted[$id]++;
$str="$splitted[0]||$splitted[1]||$splitted[2]n";
$f=fopen("data/poll.dat", "w");
flock($f, 2);
fputs($f, $str);
flock($f, 3);
fclose($f);
header("Location: ../$site_name?action=vote&ok=1#sonda");
?>
[/php:1:490d1a9613]
qbba
zamien $action na $_GET['action'],
to samo z $ok na $_GET['ok']
DanielBB
Nie zauważyłem tych zmiennych. Znów te register_globals=off. Wielkie dzięki! Teraz działa O.K.
DanielBB
Jeszcze jedno pytanie: Kawałek skryptu z przedstawionej wyżej całości:
[php:1:68bdb34d98]
$str="$splitted[0]||$splitted[1]||$splitted[2]n";
$f=fopen("data/poll.dat", "w");
flock($f, 2);
fputs($f, $str);
flock($f, 3);
fclose($f);
[/php:1:68bdb34d98]
zapisuje do pliku poll.dat taki ciąg:
||||
a $splitted[0] oraz $splitted ([1] i [2]) powinna coś przecież między te kreski wstawiać?
Innymi słowy nie zabardzo rozumię tą część skryptu:
[php:1:68bdb34d98]
$base="data/poll.dat";
$data=file($base);
$splitted=explode("||", $data[0]);
$splitted[2]=trim($splitted[2]);
$splitted[$id]++;
$str="$splitted[0]||$splitted[1]||$splitted[2]n";
$f=fopen("data/poll.dat", "w");
flock($f, 2);
fputs($f, $str);
flock($f, 3);
fclose($f);
[/php:1:68bdb34d98]
Pozdrawiam
spenalzo
[php:1:614baf7d8c]
(...)
$splitted[$id]++;
(...)
[/php:1:614baf7d8c]
Co to za zmienna $id?
DanielBB
To nie $Id była przyczyną nie działania skryptu tylko moja nieuwaga. Trzeba było zamienić zmienną używaną przez ciasteczko na $_COOKIE['voted'] i skrypt działa.
Pozdrawiam,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.