Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Formularz, ankieta
Forum PHP.pl > Forum > Przedszkole
Lisciu
Formularz(ankieta) wygląda następująco:


  1. <?php
  2. <form action="rejestracja.php" method="POST">
  3.    
  4.    <label for="name"
  5.        style="display: inline-block;
  6.        width: 150px;
  7.        height: 20px;
  8.        ">Imi&#281;</label>
  9.    <input
  10.        type="text"
  11.        id="name"
  12.        name="name"
  13.        size="20"
  14.        value="Jan"
  15.    /><br />
  16.    
  17.    <label for="surname"
  18.        style="display: inline-block;
  19.        width: 150px;
  20.        height: 20px;
  21.        ">Nazwisko</label>
  22.    <input
  23.        type="text"
  24.        id="surname"
  25.        name="surname"
  26.        size="20"
  27.        value="Kowalski"
  28.    /><br />
  29.    
  30.    <label for="phone"
  31.        style="display: inline-block;
  32.        width: 150px;
  33.        height: 20px;
  34.        ">Telefon</label>
  35.    <input
  36.        type="text"
  37.        id="phone"
  38.        name="phone"
  39.        size="20"
  40.        value="12345678"  
  41.    /><br />
  42.    
  43.    <label for="city"
  44.        style="display: inline-block;
  45.        width: 150px;
  46.        height: 20px;
  47.        ">Miejscowo&#347;ć</label>
  48.    <input
  49.        type="text"
  50.        id="city"
  51.        name="city"
  52.        size="20"
  53.        value="Warszawa"
  54.    /><br />
  55.    
  56.    <label for="owner"
  57.        style="display: inline-block;
  58.        width: 150px;
  59.        height: 20px;
  60.        ">Telefon mam od lat</label>
  61.    <input
  62.        type="text"
  63.        id="owner"
  64.        name="owner"
  65.        size="20"
  66.        value="20"
  67.        
  68.        /><br />
  69.    
  70.    <label for="gsm"
  71.    style="display: inline-block;
  72.        width: 150px;
  73.        height: 20px;
  74.    ">Sie&#263; GSM</label>
  75.    <input type="radio" name="gsm" value="Era" /> Era
  76.  <input type="radio" name="gsm" value="Orange" /> Orange
  77.  <input type="radio" name="gsm" value="Plus" /> Plus
  78.  <input type="radio" name="gsm" value="Play" /> Play
  79.  <input type="radio" name="gsm" value="inna" /> Inna
  80.    
  81.    <br />
  82.    
  83.    <label for="Abonament"
  84.    style="display: inline-block;
  85.        width: 150px;
  86.        height: 20px;
  87.    ">Telefon na</label>
  88.    <input type="radio" name="abo" value="Abonament" /> Abonament
  89.  <input type="radio" name="abo" value="Mix" /> Mix
  90.  <input type="radio" name="abo" value="Karte" /> Karte
  91.  
  92.  
  93.  <br />
  94.  <label for="Wysokosc oplat"
  95.    style="display: inline-block;
  96.        width: 150px;
  97.        height: 20px;
  98.    ">Koszt opla&#322;</label>
  99.    <input type="radio" name="op" value="nie wiecej niz 25" /> <25zl
  100.  <input type="radio" name="op" value="25-50" /> 25-50zl
  101.  <input type="radio" name="op" value="50-100" /> 50-100zl
  102.  <input type="radio" name="op" value="100-200" /> 100-200zl
  103.  <input type="radio" name="op" value="wiecej" /> Wiecej
  104.  <br />
  105.  
  106.  <label for="Uzywanie"
  107.    style="display: inline-block;
  108.        width: 150px;
  109.        height: 20px;
  110.    ">Korzystam z us&#322;ug </label>
  111.  <input type="checkbox" name="Gry" /> Gry
  112.  <input type="checkbox" name="www" /> WWW
  113.  <input type="checkbox" name="e-mail" /> E-mail
  114.    <input type="checkbox" name="mms" /> MMS
  115.    <input type="checkbox" name="gps" /> GPS
  116.    <input type="checkbox" name="rozmowy" /> Rozmowy
  117.    <input type="checkbox" name="sms" /> SMS
  118.    <input type="checkbox" name="inne" /> Inne
  119.    
  120.    <br />
  121.    
  122.    <div id="submit">
  123.    <input type="submit" value="Wyślij" />
  124.    </div>
  125.    
  126.    </form>
  127.  
  128. </fieldset>
  129. ?>


Rzeczy które mnie interesują to pole wyboru typu "radio" chciałbym dać możliwość wpisania komuś coś jak wybierze inne. Po prostu pojawiło by się okienko do wpisania zwykłego tekstu. Jak to rozwiązać?

I druga ważna rzecz jak zrobić zliczanie głosów? Czyli np. Ile procentowo jest użytkowników ERY itd. A najczęściej check była odpowiedź.

To są rzeczy z którymi nie wiem jak się uporać. I liczę na pomoc.
erix
Cytat
Po prostu pojawiło by się okienko do wpisania zwykłego tekstu. Jak to rozwiązać?
  • prompt()
  • jakiś thickbox

Cytat
Czyli np. Ile procentowo jest użytkowników ERY itd.

Na matematyce spałeś? tongue.gif
Lisciu
nie spałem na matematyce i nie widzę związku z twoją odpowiedź do mojego pytania. Ja chcę napisać kod który mi to załatwi a ja nie wiem jaki ten kod napisać.

Co do pierwszej odpowiedzi też nie wiele mi mówi.

pozdrawiam.
erix
Cytat
nie spałem na matematyce i nie widzę związku z twoją odpowiedź do mojego pytania.

Żeby wyliczyć procent trzeba policzyć wystąpienia z danej odpowiedzi, podzielić przez liczbę wszystkich i pomnożyć 100%. Dalej nie widzisz związku?

Cytat
Co do pierwszej odpowiedzi też nie wiele mi mówi.

Na tacy nie dostaniesz. Podałem słowa kluczowe, googlaj.
Lisciu
no to super pomagasz. Tyle co powiedziałeś to ja sam wiem sciana.gif Gdybym nie miał problemu to bym tu nie napisał proste prawda? Więc ja nie wiem gdzie te twoje 542 pomógł za nic? Umówmy się, że na siłę się wywyższasz zamiast pomóc. Jakbym miał problem z matematyką to bym nie pisał tu tak? Ja nie wiem jak użyć takiego toku w tej sondzie, jak mam podpiąć to co się liczy pod oddany głos, nie wiem jak to się robi, a ty nie potrafisz pomóc.
nieraczek
Nie piszesz konkretnie co chcesz zrobić. Jak ktoś wybierze "inne" to ma się dodać pole input typu 'text' czy wyskoczyć okno dialogowe z polem input typu 'text' - obie rzeczy robi się w javascript - ale o co konkretnie chodzi ?

Cytat: "Czyli np. Ile procentowo jest użytkowników ERY itd. A najczęściej check była odpowiedź. " - nie rozumiem drugiego zdania, nie widzę nigdzie w tym formularzu odpowiedzi 'check' tongue.gif
Nie zapisujesz wyników tego formularza do bazy danych, że masz problem ? smile.gif
mecenas
Koledze chyba chodziło o podanie techniki jak to zrobić winksmiley.jpg

Zatem po krótce:

- czystym htmlem tego oczywiście nie zrobisz, pokaż kod obsługujący formularz po submicie
- wyniki z wielkim prawdopodobieństwem najlepiej zbierać w bazie danych - da Ci ona sporą elastyczność jeśli chodzi o opracowanie wyników.

No i ten nieszczęsny input - z tego, co zrozumiałem nie potrzebujesz javascriptu do samego inputa - jeśli ma to być jedna z opcji checkboxa po prostu zostawiasz checkbox z odpowiednią, znaną Tobie wartością i przy zapisie danych sprawdzasz, czy został on zaznaczony i wówczas obrabiasz odpowiednio zawartość inputa smile.gif (nie zapominaj o oczywistościach takich jak sql injection).

Czyli: php + mysql/postgresql załatwia sprawę, javascipt do ewentualnej walidacji danych po stronie usera.
zegarek84
Cytat(mecenas @ 24.05.2009, 10:05:00 ) *
Czyli: php + mysql/postgresql załatwia sprawę, javascipt do ewentualnej walidacji danych po stronie usera.

lub do tak małej aplikacji tylko php i SqLite (ewentualnie sam plik tekstowy - jakaś potężna baza do tego nie jest potrzebana )
Lisciu
dobra sprawa obecnie wygląda tak:
SQL:
  1. --
  2. -- Struktura tabeli dla `moje`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `moje` (
  6. `Id` int(10) NOT NULL AUTO_INCREMENT,
  7. `imie` varchar(20) NOT NULL,
  8. `nazwisko` varchar(20) NOT NULL,
  9. `Telefon` int(9) NOT NULL,
  10. `Miejscowosc` varchar(30) NOT NULL,
  11. `Telefonmodl` int(2) NOT NULL,
  12. `siec` enum('Era','Orange','Plus','Play') NOT NULL,
  13. `telefonna` enum('Abonament','Mix','Karte') NOT NULL,
  14. `kosztop` enum('<25','25-50','50-100','100--200','wiecej') NOT NULL,
  15. `korzystam` enum('Gry','WWW','E-mail','MMS','GPS','Rozmowy','SMS','Inne') NOT NULL,
  16. PRIMARY KEY (`Id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;
  18.  
  19. --
  20. -- Zrzut danych tabeli `moje`
  21. --
  22.  
  23. INSERT INTO `moje` (`Id`, `imie`, `nazwisko`, `Telefon`, `Miejscowosc`, `Telefonmodl`, `siec`, `telefonna`, `kosztop`, `korzystam`) VALUES
  24. (40, 'Jan', 'Kowalski', 12345678, 'Warszawa', 2, 'Orange', 'Mix', '25-50', ''),
  25. (41, 'Jan', 'Kowalski', 12345678, 'Warszawa', 2, 'Plus', 'Mix', '50-100', ''),
  26. (42, 'Jan', 'Kowalski', 12345678, 'Warszawa', 2, 'Orange', 'Mix', '50-100', '');


Kod wyświetlający to co ktoś zaznacza:L
  1. <?php include('header.php'); ?>
  2.  
  3.    <div id="main_inner">
  4.    
  5.    <h3>Statystyki</h3>
  6. <?php
  7. echo "Dane do rejestracji ostatniego ankietera: <br />";
  8. echo "Ankieter: <b>".$_POST['ankieter']."</b><br />";
  9. echo "Imię: <b>".$_POST['name']."</b><br />";
  10. echo "Nazwisko: <b>".$_POST['surname']."</b><br />";
  11. echo "Telefon: <b>".$_POST['phone']."</b><br />";
  12. echo "Miejscowość: <b>".$_POST['city']."</b><br />";
  13. echo "Telefon mam od lat: <b>".$_POST['owner']."</b><br />";
  14. echo "Sieć GSM: <b>".$_POST['gsm']."</b><br />";
  15. echo "Telefon na: <b>".$_POST['abo']."</b><br />";
  16. echo "Koszt opłat: <b>".$_POST['op']."</b><br />";
  17. $tablica=$_POST['us'];
  18. $rozmiar=count($tablica);
  19. for($tab=0; $tab < $rozmiar;$tab++)
  20. {
  21. echo "Korzystam z usług: <b>".$tablica[$tab]."</b><br />";
  22. }
  23. echo "Dane przesłane do bazy danych...<br /><br />";
  24.  
  25. /* Łączenie i wybranie bazy */
  26. $db_lukas = @mysql_connect("localhost", "root", "") or die ("Nie można się połączyć z bazą danych <br />".mysql_error());
  27. echo "Połączenie nawiązane<br />";
  28. mysql_select_db ("informatyka") or die ("Nie mozna wybrać bazy danych <br />");
  29. echo "Baza danych wybrana<br />";
  30.  
  31. /* Dodanie studenta do bazy danych */
  32.  
  33.  
  34. $query = "INSERT INTO Moje (ID, Imie, Nazwisko, Telefon, Miejscowosc, Telefonmodl, siec, telefonna, kosztop, korzystam) VALUES (NULL, '".$_POST['name']."', '".$_POST['surname']."', '".$_POST['phone']."', '".$_POST['city']."', '".$_POST['owner']."', '".$_POST['gsm']."', '".$_POST['abo']."', '".$_POST['op']."', '".$_POST[$tablica[$tab]]."')";
  35. $result = mysql_query ($query) or die ("Zapytanie zakończone niepowodzeniem <br />");
  36.    
  37. /* Wysyłanie zapytania SQL */
  38.    
  39.  
  40. $test[] = $_POST['us'];
  41. echo($test[100]);//moze bu byc samo $test, $test[0] $test[999999] a i tak kupa
  42.  
  43. $query = "SELECT * FROM Moje";
  44. $result = mysql_query ($query) or die ("Zapytanie zakończone niepowodzeniem <br />");
  45. echo "Ile rekordów: ".mysql_num_rows($result);
  46. $charset = mysql_client_encoding($db_lukas);
  47.  
  48. echo "The current character set is: $charset\n";
  49.  
  50.  
  51. /* Wyświetlenie wyników*/
  52. print "<table>\n";
  53. while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
  54.   print "\t<tr>\n";
  55.   foreach ($line as $col_value) {
  56.       print "\t\t<td>$col_value</td>\n";
  57.   }
  58.   print "\t</tr>\n";
  59. }
  60. print "</table>\n";
  61.  
  62.  
  63.  
  64.  
  65.  
  66. /* Zwalnianie pamięci */
  67.  
  68. /* Rozłączanie */
  69. mysql_close($db_lukas);
  70.  
  71. ?>  
  72.  
  73.    </div>
  74.        
  75.            </div>
  76.    
  77.    
  78.  
  79.  
  80.  
  81. <?php include('footer.php'); ?>


1. Problem jest z tym co jest w bazie danych, dla pola checkbox (rekord: korzystam typ: ENUM) nie pokazuje mi w bazie danych opcji zaznaczonych, jeśli zaznaczę więcej niż 1 odpowiedź, w przypadku 1 pokaże mi ją w tabeli. Jak to rozwiązać?

2. Jak zrobić funkcję która mi pokaże rozkład procentowy wybieranych radio ? Poniekąd sobie radzę, ale dostaje to w php:

  1. <?php
  2. SELECT count(*) as ilosc FROM moje WHERE siec='play'
  3. ?>


zamiast liczby. A tak wyglada kod:

  1. <?php
  2. $play = " SELECT count(*) as ilosc FROM moje WHERE siec='play' ";
  3. echo $play;
  4. ?>


gdzie jest kłopot?
erix
Cytat
Więc ja nie wiem gdzie te twoje 542 pomógł za nic? Umówmy się, że na siłę się wywyższasz zamiast pomóc.

Nie przyznawałem sobie pomógłów, więc nie do mnie to pytanie. Nie mam zamiaru dyskutować na ten temat, myślenie nie boli.

Cytat
1. Problem jest z tym co jest w bazie danych, dla pola checkbox (rekord: korzystam typ: ENUM) nie pokazuje mi w bazie danych opcji zaznaczonych, jeśli zaznaczę więcej niż 1 odpowiedź, w przypadku 1 pokaże mi ją w tabeli. Jak to rozwiązać?

Jeśli dobrze zrozumiałem, to w Twoim przypadku konieczne są wielokrotne INSERT-y. Radziłbym Ci zrobić osobną tabelę na dane ankietowanego + tabela w relacji jeden-do-wielu z odpowiedziami.

Cytat
2. Jak zrobić funkcję która mi pokaże rozkład procentowy wybieranych radio ? Poniekąd sobie radzę, ale dostaje to w php:

Na cepa:
  1. SELECT siec, (count(*)/(SELECT count(*) FROM moje)) AS procent FROM moje GROUP BY siec

Optymalnie - dwa zapytania, z czego pierwsze zapisuje łączną ilość odpowiedzi w zmiennej.

Cytat
gdzie jest kłopot?

No w tym, że wypisujesz zapytanie, a go nie wykonujesz. tongue.gif
Lisciu
twoje zapytanie które wywołałem w SQL zwraca mi wynik, ale jak to wstawić w php?

robię znowu:
  1. <?php
  2. $razem = SELECT siec, (count(*)/(SELECT count(*) FROM moje)) as procent FROM moje GROUP BY siec;
  3. ?>


to dalej wyswietla mi moje zapytanie.

Więc jak mam zrobić by mi wyświetlił wynik, a nie zapytanie w php ?
kkuba
  1. <?php
  2. $razem = 'SELECT siec, (count(*)/(SELECT count(*) FROM moje)) as procent FROM moje GROUP BY siec';
  3.  
  4. $res = mysql_query($razem);
  5.  
  6. $res = mysql_fetch_assoc($res);
  7.  
  8. print_r($res);
  9. ?>

[/php]
Lisciu
dziękuje za pomoc ale to jeszcze nie to zyskuje coś takiego:

Array ( [siec] => [procent] => 0.2500 )

więc nie przypomina to procentów i wyników poszczególnych wyborów.

takich ja dostane gdy wrzucę to do SQL.
erix
No jak nie...? :X

Przecież to jest procent...
Kod
0.2500
Lisciu
no jest ale to nawet nie wygląda za ładnie to raz, a dwa że w SQL zwraca mi wynik dla 3 zmiennych, a tutaj tylko 1.
pgrzelka
Kod
<?php
$razem = 'SELECT siec, (count(*)/(SELECT count(*) FROM moje)) as procent FROM moje GROUP BY siec';
$res = mysql_query($razem);
while($row = mysql_fetch_assoc($res)) {
   echo $row['siec'];
   echo ' ';
   echo ($row['procent'] * 100);
   echo ' %';
}
?>

powinno działać smile.gif

// edit
delikatnie poprawiłem smile.gif
Lisciu
dziękuje działa bardzo dobrze. Teraz jeszcze muszę te inserty pobadać do checkboxów. Ale pożyczyłem książkę, więc może mi się uda jak coś będę próbował tutaj jeszcze was męczyć.
pozdrawiam wstydnis.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.