Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sonda
Forum PHP.pl > Forum > PHP
dexter_m
Witam! Chciałbym napisać sondę opartą na dwóch plikach:

Pierwszy HTML:

  1. <meta http-equiv="content-language" content="pl">
  2. <title>Sonda</title>
  3. </head>
  4. <!--SONDA-->
  5. <form action="sonda.php">
  6. Czy wierzysz w ufo??
  7. <br>
  8. <br>
  9. <input type="radio" name="ufo" value="TAK" /> TAK
  10. <br>
  11. <input type="radio" name="ufo" value="NIE" /> NIE
  12. <br>
  13. <br>
  14. <input type="submit" value="Zobacz wyniki!">
  15. </form>
  16. <!--KONIEC SONDA-->
  17. </body>
  18. </html>


i teraz potrzebuję drugiego pliku php.
I teraz mam problem. Czy wyniki mają być zapisywane do jakiegoś pliku txt i później załadować tablicę z pliku funkcją file(); . Taki obrałem schemat, ale gorzej z wykonaniem. Macie jakieś pomysły?

PS. Nie chcę gotowego skryptu tylko jakieś pomocne wskazówki, fragmenty kodu itp.

Pozdrawiam, dexter.
ikioloak
Sonde robilem na bazie i wygladalo to mniej wiecej tak:
- jedna tabela 'sondy' z id_sondy, pytanie i active (przyjmuje 1 lub 0)
- 2 tabela 'sondy_odp' gdzie bylo 'id' 'id_sondy' i 'odpowiedz'

Wtedy mozna miec na stronie kilka sond jednoczesnie i ustalac ktora ma byc w tym momencie dostepna dla uzytkownikow.
crash
W pliku z wynikami masz wartości odpowiedzi dla każdej opcji sondy. Pobierasz te dane i inkrementujesz odpowiednią wartość zgodnie z wykonanym głosowaniem...
dexter_m
Cytat
Sonde robilem na bazie i wygladalo to mniej wiecej tak:

Niestety, jeszcze nie potrafię operować na bazach. sad.gif
Jak zrobić coś takiego na zwykłych plikach tekstowych??
Jim
Trzeba najpierw znac podstawowe pojecia operacji na plikach.

Nie ma co zdzierac liter z klawiatury jak juz napisano 10 000 kursow tongue.gif Tutaj
http://php.webhelp.pl/kursy/php/pliki/php_4.php?roz=php jest jasno wszystko wyjasnione.

Jak juz masz podstawy opanowane to teraz bedziesz potrzebowal takiego kodu:

  1. <?
  2. while($line = fgets($fp, 1024)) {
  3. list($nrsondy, $opcja1, $opcja2, $opcja3, $opcja4) = explode('|', $line);
  4. $sondy[$nrsondy] = array (&#092;"opcja1\" => $opcja1, \"opcja2\"=>$opcja2, \"opcja3\"=>$opcja3, \"opcja4\"=>$opcja4);
  5. }
  6. ?>


w ten sposob odczytasz z pliku o takiej zawartosci:
Kod
2|11|13|214|31
1|14|95|12|12

informacje o sondach. Wyniki beda przechowywane w tablicy $sondy[nrsondy][nropcji]

Tak mozna przechowywac wyniki o wielu sondach.
strife
Witam,

Miałem chwilkę czasu, więc pozwoliłem sobie napisać prostą klasę do sond.

Przykładowa Baza
Kod
# Sonda :D
# W 4 linijce temat, w kolejnych odpowiedzi

Czy masz dziewczyne?
Tak|127.0.0.1
Nie|127.0.0.1


Klasa
  1. <?php
  2.  
  3. /*
  4. +---------------------------
  5. | Prosta sonda v.01b biggrin.gif
  6. +---------------------------
  7. | author: scarface...
  8. +---------------------------
  9. | Licencja: ROTFL
  10. +---------------------------
  11. */
  12.  
  13.  
  14. class Sonda
  15. {
  16.  
  17. var $BazaSonda;
  18. var $Pytanie;
  19. var $FileName;
  20.  
  21. function Czytaj($data)
  22. {
  23.  
  24.  $sArray = file($data);  // Wczytujemy plik bazy do tablicy
  25.  
  26.  $this -> BazaSonda = $sArray; // Dodajemy jego zawartosc do var w klasie.
  27.  $this -> FileName = $data; // Dodajemy do klasy nazwe bazy sondy.
  28.  
  29. }
  30. function Licz()
  31. {
  32.  
  33.  foreach( $this -> BazaSonda as $v => $k) // Dzieki petli czytamy zawartosc bazy
  34.  {
  35.  
  36. if ( $v > 2 ) // Dzieki temu przeczytamy aktualne pytanie w sondzie.
  37. {
  38. if ( $v == 3) // Jesli petla zatrzyma sie na elemencie zawierajacym pytanie, dodajemy do klasy.
  39. {
  40.  
  41. $this -> Pytanie = $k; // ...
  42.  
  43. }
  44. else{
  45.  
  46. $aTemp = explode('|', $k); // Rozbijamy elementy poprzez '|', dzieki temu latwo policzymy.
  47. $aData[] = array( ( count($aTemp) - 1 ), $k ); // ile razy glosowano
  48.  
  49. }
  50.  
  51.  
  52. }
  53.  
  54.  
  55.  }
  56.  
  57.  $this -> BazaSonda = $aData; // Tak przekonwertowana tablica jest zapisywana do klasy.
  58.  
  59.  
  60. }
  61. function Pokaz()
  62. {
  63.  
  64.  echo $this -> Pytanie; // Pokazanie aktualnego tematu
  65.  echo '<br />';  // Wartosc estetyczna tongue.gif
  66.  
  67.  foreach($this -> BazaSonda as $w) // Petla...
  68.  {
  69.  
  70.  $aTemp = explode('|', $w[1]); // Ponowne rozbicie w celu pokazania aktualnego
  71.  echo $aTemp[0]. ' => ' .$w[0]; // wyboru w sondzie.
  72.  echo '<br />'; // patrz wyzej biggrin.gif
  73.  
  74.  }
  75.  
  76. }
  77. function DodajGlos($int)
  78. {
  79.  
  80.  $file = file($this -> FileName); // Wczytanie pliku z wartosci klasy
  81.  
  82.  $int = 3 + $int;  // Aby nie odliczac kolejnych linijek.
  83.  
  84.  foreach( $file as $k => $v) // tongue.gif
  85.  {
  86.  
  87. if ( $k == $int ) // Dodanie w odp. linijke glosu.
  88. {
  89.  
  90. $rep  = substr($v, 0, strlen( $v ) - 2 ); // pozbycie sie n
  91. $sDane .= $rep . &#092;"|\" . $_SERVER['REMOTE_ADDR'] . \"n\"; // Dodanie.
  92.  
  93. }
  94. else{
  95.  
  96.  $sDane .= $v;
  97.  
  98. }
  99.  
  100.  }
  101.  
  102.  $zOpen = fopen( $this -> FileName, &#092;"w+\" ); // Wczytanie
  103.  $zWrite = fwrite( $zOpen, $sDane );  // Zapisanie
  104.  $zClose = fclose( $zOpen );  // Zamkniecie
  105.  
  106. }
  107.  
  108. }
  109.  
  110. $sonda = new Sonda;
  111. $sonda -> Czytaj('sonda.dat');
  112. $sonda -> Licz();
  113. // $sonda -> DodajGlos(2); 
  114. $sonda -> Pokaz();
  115.  
  116. ?>


Czytaj() - wybierasz plik z sondą.
Licz() - Ta funkcja liczy wszystkie głosy
DodajGlos - domyslnie wylaczona, gdy ją włączysz zostanie zostanaczona opcja Nie.
Pokaz() - Pokazuje wyniki.

Pozostaje Ci do tego dopisać jeszcze unimożliwienie ponownego głosowania...

Pozdrawiam!

BTW.

Mods_Team - Przepraszam, że tak dużo, ale narazie nie mam serwera i nie mógłbym podać *.phps sad.gif
dexter_m
Hmmm, wielkie dzięki za wasz wysiłek i wyrozumiałość. Mam nadzieję, że jakoś sobie pordzę. smile.gif
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-2025 Invision Power Services, Inc.