Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] ankieta
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam forumowiczow. Zrobilem taka oto ankiete:
  1. <?php
  2.  
  3. //połączenie z baza danych
  4. $connect = mysql_connect("localhost", "root", "krasnal") or die ("Sprawdź połączenie z bazą danych.");
  5. mysql_select_db("sklep");
  6. if ($OCENA == '0') {
  7. $tak = "INSERT INTO ankieta (numer, glos) VALUES ('','tak')";
  8. $results1 = mysql_query($tak) or die(mysql_error());
  9. }
  10. elseif ($OCENA == '1') {
  11.  $nie = "INSERT INTO ankieta (numer, glos) VALUES ('','nie')";
  12.  $results2 = mysql_query($nie) or die(mysql_error());
  13. }
  14. $sumatak = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='tak' group by 1";
  15. $rezultattak = mysql_query($sumatak) or die(mysql_error());
  16. $sumanie = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='nie' group by 1";
  17. $rezultatnie = mysql_query($sumanie) or die(mysql_error());
  18. //obliczanie procentow
  19. $tak_p=round((100 * $rezultattak) / ($rezultattak + $rezultatnie));
  20. $nie_p=round((100 * $rezultatnie) / ($rezultattak + $rezultatnie));
  21. //deklarujemy dlugosc ekranu na 100 pikseli
  22. $ekran=100;
  23. //sprawdzanie ktorych glosow jest wiecej i przypisanie jej do zmiennej max
  24. if ($rezultattak>$rezultatnie) $max=$rezultattak;
  25. else $max=$rezultatnie;
  26. //wyznaczanie dlugosci wskaznikow z proporcji
  27. $tak_belka=round($ekran * $rezultattak / $max);
  28. $nie_belka=round($ekran * $rezultatnie / $max);
  29. //wyswietlanie paskow na ekranie
  30. echo "<table width='400' border='0' class=ct>";
  31. echo "<tr><td width=30%>Tak</td><td width=70%><img src='../grafika/ankieta.gif' width='$tak_belka' height='10'> $tak_p % </td></tr>";
  32. echo "<tr><td width=30%>Nie</td><td width=70%><img src='../grafika/ankieta.gif' width='$nie_belka' height='10'> $nie_p % </td></tr>";
  33. echo "</table>";
  34. //wyswietlenie ilosci oddanych glosow
  35. $ilosc_glosow=$rezultattak + $rezultatnie;
  36. echo '<br>'.'Łącznie oddano ' ,$ilosc_glosow,' głosów';
  37.  
  38. ?>

No i nie chce mi to dzialac. Jak na moje oko (chociaz dopiero zaczynam uczyc sie php) to jest wszystko oki. Zapytania sa dobre bo je sprawdzalem w phpMyAdminie. Glosy sa tez dobrze dodawane do bazy. A jednak zamiast wyswietlac dobre wyniki wywala mi caly czas ze oddano 7 glosow i proporcje w glosch 43% do 57%. Probuje to juz rozgryzc dluzszy czas ale jakos nic mi z teg nie wychodzi. W przegladarce czyscilem pamiec podreczna i takie tam ale to nic nie dalo. Jesli ktos widzi tu jakis blad to prosze o info. Pozdrawiam.
nospor
  1. <?php
  2. $rezultattak = mysql_query($sumatak);
  3. ?>

jesli myslisz, ze to ci zwroci liczbę, to jestes w grubym bledzie smile.gif
polecam lekture:
http://pl.php.net/manual/pl/function.mysql-query.php
http://pl.php.net/manual/pl/function.mysql-fetch-array.php

czemu w zapytaniu robisz "group by 1"? Co chciales osiągnąć?

ps: prosze poprawic tytul o znacznik zgodnie z zasadami forum przedszkole
lukash82
No ok. Przeczytalem tego manuala o ktorym pisales ale jakos srednio to zrozumialem. Tzn zrobilem teraz cos takiego:
  1. <?php
  2.  
  3. $sumatak = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='tak'";
  4. $rezultat001 = mysql_query($sumatak) or die(mysql_error());
  5. $rezultattak = mysql_num_rows($rezultat001) or die(mysql_error());
  6.  
  7. $sumanie = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='nie'";
  8. $rezultat002 = mysql_query($sumanie) or die(mysql_error());
  9. $rezultatnie = mysql_num_rows($rezultat002) or die(mysql_error());
  10.  
  11. ?>

Czyli w wyniku $rezultattak powinno mi zwrocic liczbe wierszy jaka zwrocilo zapytanie jesli dobrze to zrozumialem. I niby jest dobrze bo teraz w wyniku ankiety wywala mi rowno 50% na 50% i 2 oddane glosy wiec ilosc wierszy jest 2 a wiec oki. Teraz kombinowalem jak tu wyciagnac jaka jest liczba w danym wierszu za pomoca mysql_fetch_array ale jakos nie chce mi to dzialac. Zrobilem cos takiego:
  1. <?php
  2. ,$sumatak = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='tak'";
  3. $rezultat001a = mysql_query($sumatak) or die(mysql_error());
  4. $rezultat001b = mysql_num_rows($rezultat001a) or die(mysql_error());
  5. $rezultattak = mysql_fetch_array($rezultat001b) or die(mysql_error());
  6. $sumanie = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='nie'";
  7. $rezultat002a = mysql_query($sumanie) or die(mysql_error());
  8. $rezultat002b = mysql_num_rows($rezultat002a) or die(mysql_error());
  9. $rezultatnie = mysql_fetch_array($rezultat002b) or die(mysql_error());
  10.  
  11. ?>

Troche mi sie tych zmiennych namnozylo i nie wiem jak to ruszyc dalej. Moze ktos moze mi podpowiedziec bo cos sie w tym chyba zamotalem:(
krzyszbi
a ża tak sie zapytam po co ci liczba w danym wierszu
jak mniemam ma to być ankieta z odpowiedziami na TAK lub NIE czyli moim zdanie wystarcy coś takiego
  1. <?php
  2.  
  3. $sumatak = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='tak'";
  4. $rezultat001 = mysql_query($sumatak) or die(mysql_error());
  5. $rezultattak = mysql_num_rows($rezultat001) or die(mysql_error());
  6.  
  7. $sumanie = "SELECT distinct glos, count(*) as liczba FROM `ankieta` where glos='nie'";
  8. $rezultat002 = mysql_query($sumanie) or die(mysql_error());
  9. $rezultatnie = mysql_num_rows($rezultat002) or die(mysql_error());
  10.  
  11. $total = $rezultattak + $rezultattnie;
  12.  echo'Glosów na TAK oddano '.(($rezultattak/$total)*100).'<br />';
  13.  echo'Glosów na NIE oddano '.(($rezultatnie/$total)*100).'<br />';
  14.  echo'Łączna ilość głosów '.$total;
  15.  
  16. ?>

nie wiem czy o coś takiego ci chodzi i jak chcesz to zaprezentować (aż się coś takiego prosi o wykres tongue.gif )
lukash82
Jesli chodzi o prezentacje tych wynikow to jest to w dalszej czesci tego skryptu (w pierwszym temacie jest caly ten skrypt). Graficznie wyswietla sie calkiem ladnie tylko zeby jeszcze wyswietlal to co ma. Teraz jak zrobilem tak jak napisales krzyszbi i niezaleznie ile razy bede glosowal to wywala ze "Glosow na tak oddano 100 i na nie tez 100 a suma glosow jest rowna 1" wiec chyba dalej tkwie w dolku. Tak mysle, ze problem tkwi w tym poleceniu mysql_fetch_array ale nie wiem nadal jak to rozgryzc:(
matrach
Masz tu powinno działać na 100%, u mnie działa idealnie.
  1. <?php
  2.  
  3. //zapytanie zwaraca wszystkie ilość powtarzających sie wartośći głos oraz te warto
    ści
  4. $q = "SELECT glos, count(*) as ile FROM `ankieta` GROUP BY glos";
  5. $query = mysql_query($q);
  6. while($row = mysql_fetch_array($query))
  7. {
  8. $odp[$row['glos']] = $row['ile'];
  9. }
  10. //odpowiedzi tak i nie
  11. $tak = $odp['tak'];
  12. $nie = $odp['nie'];
  13. //wszystkie głosy
  14. $total = $tak + $nie;
  15. //procenty
  16. $perctak = round($tak / $total * 100, 2);
  17. $percnie = round($nie / $total * 100, 2);
  18. //wypisywanie
  19. echo "Oddano razem: " . $total . " głosów\n<br />";
  20. echo "Na tak oddano: " . $tak . " głosów, czyli " . $perctak . "%\n<br />"; 
  21. echo "Na nie oddano: " . $nie . " głosów, czyli " . $percnie . "%\n<br />"; 
  22.  
  23. ?>


Można by to było zrobić krócej, ale pisałem to o 00:30 w nocy. sleepysmiley03.gif

Jeśli chcesz zrobić więcej ankiet to poprostu zrób sobie kolumny
|id|tak|iletak|nie|ilenie|
i updatuj sobie tabele wykorzystując inkrementacja
-----EDIT-----
Możliwe są inne teraz odpowiedzi
wystarczy je uwzględenić dalej
lukash82
OK. Teraz juz dziala:) Wielkie dzieki za pomoc!
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.