Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczny formularz
Forum PHP.pl > Forum > PHP
sbogdi
Mam pytanie czy da sie zrobić dynamiczny formularz rejestracji questionmark.gif
mianowicie uzytkownik podaje swoje dane i w zaleznosci od wybranego pola z listy option formularz sie poszeza o dodatkowe pola dla danego typu i tak samo dla innych typow

ALE WAZNIEJSZE JEST DRUGIE PYTANIE


w bazie danych mam tabele oceny w ktorej jes wartosc 'odczytana' (tak lub nie) kiedy nie odczytana uruchamiam switcha ktory rozroznia oceny i wykonuje odpowiednia akcje problem w tym ze kiedy jest wiecej niz jedna ocena switch sobie nie daje rady staralem sie to zrobic forem lub whilem ale jedyne co sie dzieje to chyba sie zapetla i nie wiem co mam zle

kod
  1. <?php
  2.  
  3. $ocena_w = mysql_query("select ..........where (login='$a') and (odczytana='nie')")or die(mysql_error());
  4.  
  5. $wynik_oceny= mysql_num_rows($ocena_w);
  6. $tabl=mysql_fetch_array($ocena_w, MYSQL_NUM );
  7. $i=0;
  8. for( 
  9. while($ocena_w)
  10. {
  11. switch($jakaw['ocena']) <-- tutaj switch sprawdza oceny ten kod wykonuje sie dobrze 
  12.  
  13. ?>


kod moze byc troche pomylony bo zmieniam go juz troszke i juz nie wiem co jest do czego
moze macie jakies rady??
My4tic
Cytat
Mam pytanie czy da sie zrobić dynamiczny formularz rejestracji questionmark.gif
mianowicie uzytkownik podaje swoje dane i w zaleznosci od wybranego pola z listy option formularz sie poszeza o dodatkowe pola dla danego typu i tak samo dla innych typow


Tak ale nie w php. Poszukaj rozwiązań w JavaScript.

Cytat
w bazie danych mam tabele oceny w ktorej jes wartosc 'odczytana' (tak lub nie)  kiedy nie odczytana uruchamiam switcha ktory rozroznia oceny i wykonuje odpowiednia akcje problem w tym ze kiedy jest wiecej niz jedna ocena switch sobie nie daje rady staralem sie to zrobic forem lub whilem ale jedyne co sie dzieje to chyba sie zapetla i nie wiem co mam zle

kod
  1. <?php
  2.  
  3. $ocena_w = mysql_query("select ..........where (login='$a') and (odczytana='nie')")or die(mysql_error());
  4.  
  5. $wynik_oceny= mysql_num_rows($ocena_w);
  6. $tabl=mysql_fetch_array($ocena_w, MYSQL_NUM );
  7. $i=0;
  8. for( 
  9. while($ocena_w)<-- to chyba jest problem :)
  10. {
  11. switch($jakaw['ocena']) <-- tutaj switch sprawdza oceny ten kod wykonuje sie dobrze 
  12.  
  13. ?>


kod moze byc troche pomylony bo zmieniam go juz troszke i juz nie wiem co jest do czego
moze macie jakies rady??


Nie wiem czy dobrze Cie zrozumiałem ale... wydaj mi się, że nie masz całej tablicy na oceny tylko oceny to jedno z pol tablicy wyglądające jakos tak [4,5,2,4,5] - więc powinieneś użyć

explode();

..i np sprawdzic rozmiar tablicy jaką otrzymasz i dopiero wrzucić to w pętle for.
andrzejb
Cytat(My4tic @ 2006-03-01 23:23:16)
Cytat
Mam pytanie czy da sie zrobić dynamiczny formularz rejestracji questionmark.gif
mianowicie uzytkownik podaje swoje dane i w zaleznosci od wybranego pola z listy option formularz sie poszeza o dodatkowe pola dla danego typu i tak samo dla innych typow


Tak ale nie w php. Poszukaj rozwiązań w JavaScript.


nie kazdy ma wlaczona jave

pozdrawiam
My4tic
Cytat
nie kazdy ma wlaczona jave


...no tak ... nie kazdy ma JS, nie kazdy ma włączoną obsługe cookies, flasha .... w ogole nie kazdy ma komputer ale co tego typu posty zmieniają?

W php nie zrobi sie dynamicznego formularza (takiego jak np pzy pomocy JS) bo jest to język serwerside i do przeglądarki wysyłana jest juz 'gotowa strona'. Móglbys to zrobić w php ale w ten sposób, że każda zmiana formularza wymagałaby klkania w "wyślij" i w kolejnym kroku formularz byłby zmieniany na podstawie przesłanych danych i ponownie wyswietlany.



@ sbogdi
Mógłbyś pokazać jak wygląda struktura tabeli SQL dla tych ocen?
jono
Polecam Ci AJAX - wtedy na bieżąco będziesz mógł wyświetlać kolejne pola... to też JS. Ale na prawdę można uogólnić. Co się przejmować mniejszością smile.gif
sbogdi
oto tabela ocenya
-ocena_id
-ocena
-student_id
-wykladowca_id
-odczytana
-przedmot

i chodzi o to ze ladnie tworzy tablice [ocena] tylko czyta z niej jedna ocene

pokaze jeszcze case ktorego uciolem w ramtym poscie

  1. switch($x['ocena'])
  2.     {
  3.     case '2.0' :
  4.     ?> 
  5.                    JS // tu odpalam sobie JS ktory wykonuje operacje
  6.     <?php 
  7.     echo '<p> odczytalem.</p>';
  8.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '2.0' LIMIT 1 ;");
  9.     continue;
  10.     case '2.5' :
  11.     ?> 
  12.     JS
  13.                 <?php 
  14.     echo '<p> odczytalem.</p>';
  15.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '2.5' LIMIT 1 ;");
  16.     continue; 
  17.     case '3.0' :
  18.     ?> 
  19.     JS
  20.     <?php 
  21.     echo '<p> odczytalem.</p>';
  22.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '3.0' LIMIT 1 ;");
  23.     continue;
  24.     case '3.5' :
  25.     ?> 
  26.     JS
  27.     <?php 
  28.     echo '<p> odczytalem.</p>';
  29.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '3.5' LIMIT 1 ;");
  30.     continue;
  31.     case '4.0' :
  32.     ?> 
  33.     JS
  34.     <?php 
  35.     echo '<p> odczytalem.</p>';
  36.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '4.0' LIMIT 1 ;");
  37.     continue;
  38.     case '4.5' :
  39.     ?> 
  40.     JS
  41.     <?php
  42.     echo '<p> odczytalem.</p>';
  43.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '4.5' LIMIT 1 ;");
  44.     continue;
  45.     case '5.0' :
  46.     ?> 
  47.     JS
  48.     <?php
  49.     mysql_query("UPDATE `ocena` SET `odczytana` = 'tak' WHERE `ocena` = '5.0' LIMIT 1 ;");
  50.     echo '<p> odczytalem.</p>';
  51.     continue;
  52.     }


moze teraz jakies propozycje
Turbeczek
Ja zaproponuję porównanie kodu z pierwszego postu tego tematu z TYM.

Robisz coś takiego:

  1. <?php
  2. $ocena_w = mysql_query("select ..........where (login='$a') and (odczytana='nie')")or die(mysql_error());
  3.  
  4. $wynik_oceny= mysql_num_rows($ocena_w);
  5. $tabl=mysql_fetch_array($ocena_w, MYSQL_NUM );
  6. $i=0;
  7. for( 
  8. while($ocena_w)<-- to chyba jest problem :)
  9. {
  10. ?>


w petli while masz $ocena_w zamiast "$tabl=mysql_fetch_array($ocena_w, MYSQL_NUM );"

Poza tym ten for też mi tam nie pasuje.
sbogdi
  1. <?php
  2. $ocena_w = mysql_query.....
  3.  
  4. $x=mysql_fetch_assoc($ocena_w);
  5.  
  6.  
  7. while($x['odczytana']='nie')
  8.  
  9. ?>


wynikiem zapytania jest
4.0 user1
5.0 user1

i chcialbym zeby zostala wykonana okreslona akcja tylko dla tych ocen dla ktorych zgadza sie to z casem (i case ladnie dziala ale czyta tylko ta jedna ocene)
nie wiem jaki dobry warunek postawic zeby polecialo po wszystkich ocenach danego usera ktore maja flage nie odczytana!! oczywiscie po odczytaniu oceny updateuje flage na TAK (nie powinno odczytac)takze nie powinno sie zapetlac a to robi chyba ze to jakis inny blad w kodzie
Turbeczek
Zauważ że nie robisz tak jak w linku który Ci dałem.

W while powinno znaleźć się mysql_fetch_array.
sbogdi
zrobilem to wg przykladu i nadal mam problem
bo po while'u mam switch tak jak w moim poscie powyzej case'y dzialaja tylko na pierwsza napotkana ocene wykonuja odpowiednia akcje (dokladnie jest to odtworzenie dzwieku jaka to ocena) a jak jest wiecej ocen z polem "nie odczytana" nic sie nie dzieje tylko piwerwsza (dopiero po odswierzeniu czyta 2) i tyle exclamation.gif
i w calym tym poscie chodzi i o skonstruowanie warunku na while'a aby uwzglednialo wszystkie oceny exclamation.gif1
jak napisalem wczesniej po napotkaniu "nie" (w bazie) wykonuje akcje po czym updatuje pole zeby nie bylo problemu zapetlenia.

nie wiem czy wytlumaczylem to dostatecznie dobrze

macie jakies propozycje??
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.