Skocz do zawartości
t9omek

Sonda php - nie działa poprawnie

Polecane posty

Witam, próbuje zrobić małą sondę na stronie, znalazłem "poradnik" w którym były umieszczone te kody:

SONDA.HTM

<html>
<head><title>Sonda</title></head>
<body>
<form method="post" action="dopisz.php">
Czy podoba ci sie nasz serwis?<br>
<input type="radio" name="odp" value="tak">Tak<br>
<input type="radio" name="odp" value="nie">Nie<br>
<input type="radio" name="odp" value="nw">Nie wiem<br>
<input type="submit" value="slij">
</form>
</body>
</html>

SONDA.PHP

<?PHP
$file=fopen("sonda.txt","r"); /*Otwieramy plik sonda.txt*/
$linia=fgets($file, 81); /*pobieramy linię*/
$tbl=explode("#", $linia); /*zamieniamy jš na tablicę*/

$tab["tak"]=$tbl[0]; /*którš zamieniamy na tablicę asocjacyjnš*/
$tab["nie"]=$tbl[1];
$tab["nw"]=$tbl[2];

$suma = $tab["tak"] + $tab["nie"] + $tab["nw"]; /*wykonujemy obliczenia na zmiennych (wyliczamy procenty)*/
$tak = floor(($tab["tak"] / $suma) * 100);
$nie = floor(($tab["nie"] / $suma) * 100);
$nw = floor(($tab["nw"] / $suma) * 100);
echo "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\">
<tr><td colspan=\"2\">Tak</td></tr>\n";

echo "<tr><td width=\"210\"><img src=\"linia.gif\" width=\"". 2*$tak ."\" height=\"10\"></td><td>". $tak ."% (<b>". $tab["tak"]. "</b>)</td></tr>
<tr><td colspan=\"2\">Nie</td></tr>\n";

echo "<tr><td width=\"210\"><img src=\"linia.gif\" width=\"". 2*$nie ."\" height=\"10\"></td><td>". $nie ."% (<b>". $tab["nie"]. "</b>)</td></tr>
<tr><td colspan=\"2\">Nie wiem</td></tr>\n";

echo "<tr><td width=\"210\"><img src=\"linia.gif\" width=\"". 2*$nw ."\" height=\"10\"></td><td>". $nw ."% (<b>". $tab["nw"]. "</b>)</td></tr>
<tr><td colspan=\"2\">Łšcznie głosów: <b>$suma</b>
</table>"; /*pokazujemy wyniki*/

?>

SONDA.TXT

0#0#0

DOPISZ.PHP

<?PHP

$file = fopen("sonda.txt","r+"); /*otwieramy plik sonda.txt*/
$linia = fgets($file, 80);
$tab = explode("#",$linia); /*zapisujemy linię do tablicy*/
$tbl["tak"] = $tab[0];/*którš zapisujemy do asocjacyjnej*/
$tbl["nie"] = $tab[1];
$tbl["nw"] = $tab[2];
++$tbl[$odp];/*zwiększamy o jeden iloć osób głosujšcych na danš odpowied*/
fseek($file, 0);/*przesuwamy strumień pliku do poczštku*/
fwrite($file, $tbl["tak"]."#".$tbl["nie"]."#".$tbl["nw"]); /*zapisujemy dane do pliku oddzielajšc je "#"*/

Header("Location: sonda.php");/*przeskakujemy do sonda.php*/
?>

wszystko działa poprawnie oprócz zapisywania:

wchodzę na stronę gdzie wyświetlają mi się pytania klikam "slij" i sonda php. nie pokazuje mi prawidłowych wyników (wcale nie liczy głosów).

 

Był bym wdzięczy gdyby ktoś pomógł by mi w rozwiązaniu problemu

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

faktycznie przeoczyłem, jednak nadanie praw nic nie dało efekt taki sam jak opisywałem. Kiedy nadałem wszystkim czterem plikom prawa (777) wyrzuca mi błąd

Internal Server Error

File "/home/tomekdam/domains/t9omek.da7.mintsowy.pl/public_html/dopisz.php" is writeable by group

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

gdyby ktoś potrzebował działający skrypt

index

<html>
<head><title>Sonda</title></head>
<body>
<form action="glosuj.php" method="post">
<p>Co sądzisz o gotowanej marchewce?<br />
<input type="radio" name="glos" value="1" />Uwielbiam<br />
<input type="radio" name="glos" value="2" />Nienawidzę<br />
<input type="submit" value="Zagłosuj" />
</p>
</form>
</body>
</html>

glosuj.php

<?php
/*Początek interpretowanego bloku */

$plik = fopen("wyniki.txt", "r");
/*otwarcie do odczytu pliku z wynikami*/

$dane = fread($plik, filesize("wyniki.txt"));
/*odczytanie z pliku z wynikami danych i zapisanie ich do
zmiennej $dane odczytanych zostanie tylko tyle znaków ile
istnieje w pliku, nie mniej, nie więcej*/

$wyniki = split(":", $dane);
/*wydzielenie dwóch wyników, rozdzielenie zawartości zmiennej
po znaku dwukropka*/

fclose($plik);
/*zamknięcie pliku*/

if($_POST['glos'] == 1)
    $wyniki[0] += 1;
/*jeśli użytkownik głosował "za" marchewką,
czyli zmienna "glos" ma wartość jeden to do
wyników za dopisywany jest jeden głos*/

else if ($_POST['glos'] == 2)
    $wyniki[1] += 1;
/*analogiczna operacja do poprzedniej, ale dodawany jest
głos "przeciw"*/

else
    ;
/*instrukcja dla reszty przypadków, które teoretycznie nie
powinny nastąpić*/

$plik = fopen("wyniki.txt", "w");
/*ponowne otwarcie pliku z wynikami, tym razem do zapisu, plik
jest wyzerowany*/

flock($plik, 2);
/*zablokowanie pliku przed innymi skryptami, które będą chciały
zapisywać*/

fwrite($plik, "$wyniki[0]:$wyniki[1]:", 200);
/*zapis wyników do pliku, 200 znaków z powodzeniem wystarczy*/

flock($plik, 3);
/*zdjęcie blokady z pliku*/

fclose($plik);
/*zamknięcie pliku*/

header("Location: pokaz.php");
/*przekierowanie przeglądarki do pliku pokaz.php*/

?>
/*koniec interpretowanego bloku*/

pokaz.php

<?php
$plik = fopen("wyniki.txt", "r");
/*otwarcie pliku z wynikami do odczytu*/

$dane = fread($plik, filesize("wyniki.txt"));
/*odczytanie wszystkich bajtów z pliku*/

fclose($plik);
/*zamknięcie pliku*/

$wyniki = split(":", $dane);
/*rozdzielenie wyników*/

$suma = $wyniki[0] + $wyniki[1];
/*zsumowanie wyników*/

?>

<table>
<tbody>

<tr><td>Lubiący gotowaną marchewkę:</td><td>
<?php
echo(round($wyniki[0]/$suma * 100));
/*wyświetlenie zaokrąglonej procentowej ilości głosów,
znak procenta jest w następnej linijce*/

?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Za marchewką!" height="10" width="
<?php
echo(round($wyniki[0]/$suma * 100));
/*podobnie jak wcześniej, tyle, że wyświetlona liczba będzie
szerokością graficznego paska, w tym wypadku liczba 100 jest
maksymalną szerokością paska */

?>
" /></td></tr>

<tr><td>Nienawidzący gotowanej marchewki:</td><td>
<?php
echo(round($wyniki[1]/$suma * 100));
?>
%</td><td>
<img src="pasek.gif" alt="pasek.gif"
title="Przeciw marchewce!" height="10" width="
<?php
echo(round($wyniki[1]/$suma * 100));
?>
" /></td></tr>

</tbody>
</table>
<p>Ogołem oddano głosów: <?php echo($suma); ?>.</p>

wyniki.txt

0:0:

link do strony ze skryptem

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

DOPISZ.PHP

<?PHP
++$tbl[$odp];/*zwiększamy o jeden iloć osób głosujšcych na danš odpowied*/
?>

 

register_globals...

 

++$tbl[$_POST['odp']];

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

a jak mogę zmienić typy radio na submit, kiedy to zrobiłem to nie zlicza mi głosów

 

Jaki konkretnie efekt chcesz uzyskać, bo twoje pytanie nie ma sensu...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×