Problémy s anketou

12 příspěvků

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. Vždy po nějakém čase se mi smažou data o hlasování v anketě a taky vzkazy v návštěvní knize. Uložena jsou pomocí php v txt souboru. Problém má víc lidí. Prosím poraďte.
  2. možná tě to překvapí, ale máš chybu ve skriptu... tím jsem chtěl říct, že bez něj ti asi těžko poradíme
  3. Vy jste ale rychlíci.. <?php $souborip="anketa-ip.txt"; //soubor s ip adresami hlasujících $soubor="hlasuj.txt"; //soubor s hlasy $aktualni = $REMOTE_ADDR; //aktuální ip adresa $otazka = "Jak se vám líbí tyto stránky?"; //Otázka $odp = array("Výborný","Dobrý","Ujde","Hrůza"); //Odpovědi //Kontrola existence souborů if (!file_exists($souborip)) { err ($souborip); exit; } if (!file_exists($soubor)) { err ($soubor); exit; } //Konec kontroly //Otevření a načtení hlasů $data = fopen($soubor, "r"); $cti = fread($data, filesize($soubor)+10); fclose($data); list($a, $b, $c, $d) = explode( "Đ", $cti); //Hlasování if (isset($odpoved)) { if (zjistiip($souborip, $aktualni)) { if ($odpoved == "a") {$a++;} elseif ($odpoved == "b") {$b++;} elseif ($odpoved == "c") {$c++;} elseif ($odpoved == "d") {$d++;} $zapsat = "$a" . "Đ" . "$b" . "Đ" . "$c" . "Đ" . "$d" . "Đ"; $kam = fopen($soubor, "w"); fwrite($kam, $zapsat); //zapsání nového hlasu do souboru fclose($kam); $ipsoubor = fopen($souborip, "r"); //zapsání ip adresy odesílatele hlasu $data = fread($ipsoubor, filesize($souborip)+10); fclose($ipsoubor); $write = $data.$aktualni."Đ"; $kam = fopen($souborip, "r+"); fwrite($kam,$write); fclose($kam); } } //Zobrazení výsledků $celkem = $a+$b+$c+$d; $lidi = $celkem; if ($celkem == 0) { $celkem = "1"; $lidi="0"; } $pr = $celkem/100; $a = number_format($a/$pr,1); $b = number_format($b/$pr,1); $c = number_format($c/$pr,1); $d = number_format($d/$pr,1); $pismeno = array ("a","b","c","d"); $procenta = array ("$a","$b","$c","$d"); $kolik = "4"; echo "<table border='0' cellpadding='0' cellspacing='0' width='50px'>\n"; echo "<tr><td colspan='2' class='ank_to'><b>$otazka</b></td></tr>\n"; for ($i=0; $i<$kolik ;$i++ ) { if (zjistiip($souborip, $aktualni)) { echo "<tr><td colspan='2' class='ank_t'><a href=anketa.php?odpoved=$pismeno[$i]>$odp[$i]</a></td></tr>\n"; } else { echo "<tr><td colspan='2' class='ank_t' >$odp[$i]</td></tr>\n"; } echo "<tr><td bgcolor='#CCCCCC' width='85px'><img src='prouzek.bmp' height='8px' width='".(($procenta[$i])/1.2)."px'></td><td class='ank_t' width='10px'> $procenta[$i]%</td></tr>\n"; } echo "<tr><td colspan='2' class='ank_to'>Celkem hlasovalo:<br><b>$lidi</b> lidí</td></tr></table>\n"; //Funkce pro vypsání chyby function err ($soubor) { echo "<font color=red><b>Chyba!</b></font><br>Nelze nalézt soubor <b>$soubor</b>!\n"; } //funkce pro zjištění ip adresy function zjistiip($souborip, $ip) { $ipsoubor = fopen($souborip, "r"); $data = fread($ipsoubor, filesize($souborip)+10); fclose($ipsoubor); $ipadresy = explode("Đ",$data); if (in_array($ip, $ipadresy)) { return false; //Pokud již bylo z dané ip adresy hlasováno } else { return true; // pokud nebylo z dané ip hlasováno } } //konec funkce ?>
  4. resilo se zde. hledej "flock".
  5. nebo spis jenom pridej flock a bude to f pohode
  6. co je to flock?
  7. Jirka: funkce v php. vice viz manual php.
  8. mno ja bych to radsi resil databazi je to jednodusi a rychlejsi!
  9. tak jsem se díval a viděl. kám mám přidat flock()
  10. ať žijou lamy
  11. tak asi takhle? //Otevření a načtení hlasů $data = FOPEN($soubor, "r"); flock($soubor,LOCK_SH); $cti = fread($data, filesize($soubor)+10); FCLOSE($data); LIST($a, $b, $c, $d) = explode( "Đ", $cti); flock($soubor,LOCK_UN); //Hlasování IF (ISSET($odpoved)) { IF (zjistiip($souborip, $aktualni)) { IF ($odpoved == "a") {$a++;} ELSEIF ($odpoved == "b") {$b++;} ELSEIF ($odpoved == "c") {$c++;} ELSEIF ($odpoved == "d") {$d++;} $zapsat = "$a" . "Đ" . "$b" . "Đ" . "$c" . "Đ" . "$d" . "Đ"; $kam = FOPEN($soubor, "w"); flock($soubor,LOCK_EX); FWRITE($kam, $zapsat); //zapsání nového hlasu do souboru FCLOSE($kam); flock($soubor,LOCK_SH); $ipsoubor = FOPEN($souborip, "r"); //zapsání ip adresy odesílatele hlasu flock($souborip,LOCK_EX); $data = fread($ipsoubor, filesize($souborip)+10); FCLOSE($ipsoubor); flock($souborip,LOCK_SH); $write = $data.$aktualni."Đ"; flock($souborip,LOCK_EX); $kam = FOPEN($souborip, "r+"); flock($souborip,LOCK_SH); FWRITE($kam,$write); FCLOSE($kam); } }
  12. asi takto: if(!file_exists(soubor)) // soubor neexistuje { // otevreni pro cteni soubor pri jeho neexistenci nevytvori $fp = fopen(soubor, 'w'); fclose($fp); } $fp = fopen(soubor, 'r+'); for($pokus = 0; $pokus < 10; $pokus++) // 10 pokusů na zápis po 100us { if (flock($fp, LOCK_EX)) // nastaveni zamku { // tady mame zamceno // cteme soubor ftruncate($fp, 0); rewind($fp); // smazeme soubor // zapiseme data flock($fp, LOCK_UN); // uvolneni zamku break; // ukonceni cyklu pokusu o zapis } // konec if (flock($fp, LOCK_EX)) usleep(100); // cekani na dalsi pokus o zapis } // konec cyklu for pro pokusy o zapis fclose($fp); // zavreni souboru co to pouzivam, jeste se mi ten soubor nesmazal

← Zpět na všechna témata