Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyszukiwanie poprzez formularz php i html z mysql
ptrebacz
post 12.01.2007, 17:59:06
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.01.2007

Ostrzeżenie: (0%)
-----


Mam przykładową baze danych:

rok | miesiac | dzien|
2005 | 01 | 01 |
2005 | 02 | 21 |
2005 | 02 | 28 |
2006 | 03 | 16 |
2006 | 05 | 10 |
2007 | 05 | 11 |

no i teraz chce aby w formularzu były 3 pola wyboru typu select i wypełniały się one automatycznie pobierając dane z mysql z tym że nie wiem jak zrobić 1) aby w select pokazywał tylko po jednym unikalnym ciągu czyli ma wyświetlić 2005 2006 i 2007
po drugie aby jak wybiorę rok 2005 to w kolejnym select odpowiedzialnym za miesiąc wyświetlił tylko te miesiące związane z rokiem np. 2005 czyli 01 i 01 i tak samo z trzecim select odpowiedzialnym za dzień ma on wyświetlić dla wybranego miesiąca 02 dni 21 i 28

Jeżeli ktoś robił już podobny skrypt formularza lub jest wstanie taki skrypt wykonać prosiłbym o odpowiedź na tym poście.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Cienki1980
post 12.01.2007, 19:50:20
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Efekt, aby po wybraniu wartości z pierwszego selecta zmieniła się zawartość drugiego osiągniesz albo przez przeladowanie strony po zmianie w pierwszym selecie,
albo po stworzeniu odpowiedniego kodu JavyScript.

Jeżeli danych będzie nie dużo można się pobawić w JS. Jeżeli będzie tego dużo to ja bym robił poprzez przeładowanie strony.


--------------------
404
Go to the top of the page
+Quote Post
ptrebacz
post 12.01.2007, 23:56:33
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.01.2007

Ostrzeżenie: (0%)
-----


a jak zrobić to przez przeładowanie strony??
Go to the top of the page
+Quote Post
Cienki1980
post 13.01.2007, 09:32:23
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


W php wyciągasz najpierw dane dotyczące roku:
  1. SELECT DISTINCT rok FROM table_name


Tworzysz w html'u jeden select gdzie wyswietlasz wyniki tego zapytania. W html piszesz kod JavyScript'a;
  1. <script language="javascript">
  2. function zatwierdz()
  3. {
  4. document.form_name.submit();
  5. }
  6. .
  7. .
  8. .
  9. <form name="form_name" method="post">
  10. <select name="rok" onChange="zatwierdz();">
  11. <option value="">
  12. <option value="2005">
  13. <option value="2006">
  14. </form>

Po zmianie wartości w selecie forma automatycznie się zatwierdzi a w php odczytasz sobie wartość z POST'a wartość 'rok'.
Tworzysz nowe zapytanie z tym że dodajesz do zapytania:
  1. SELECT * FROM table_name WHERE rok=wartosc_zmiennej

Tak samo robisz przy selecie z miesiącem aby stworzyc select z dniami.


--------------------
404
Go to the top of the page
+Quote Post
ptrebacz
post 14.01.2007, 20:00:37
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.01.2007

Ostrzeżenie: (0%)
-----


ok ale po wybraniu w pierwszym seectcie jakiejś wartości on ją zatwierdza a co za tym idzie znika jej aktualna pozycja i nie ładnie to wygląda gdy nie wiedzi się wyboru w poszczegółnych okienkach
Jak to zrobić
Go to the top of the page
+Quote Post
Cienki1980
post 14.01.2007, 20:28:47
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Wystarczy wykorzystać opcje selected podczas tworzenia select'a

Coś na zasadzie:
  1. <select name="rok">
  2. <option value="2005" <?php if($rok=="2005"){?>selected<?php } ?>>2005
  3. <option value="2006" <?php if($rok=="2006"){?>selected<?php } ?>>2006


Nie wiem czy to zadziała bo od ładnych kilku lat nie łącze php z html'em.


--------------------
404
Go to the top of the page
+Quote Post
ptrebacz
post 15.01.2007, 23:39:50
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.01.2007

Ostrzeżenie: (0%)
-----


Czy jest ktoś w stanie połączyć zebrane tu pomysły w jedną całość, gdyż każdy działa z osobno ale nie razem.
Gdy to wszytko połączyłem okazało sie że jak wybiorę w pierwszym to pojawia sie w drugim ale jak wybiorę w drugim to sie wszystko resetuje i nie wiem jak zrobić aby jeszcze w trzecim sie wyświetlało to ca ma sie wyświetlać. Oto co mi sie udało zrobić:
  1. <?php
  2. mysql_connect (localhost, root, haslo);
  3. mysql_select_db("archiwum");
  4.  
  5.  
  6. $queryr = 'select distinct rok from at';
  7. $rok = mysql_query($queryr);
  8.  
  9. $querym = 'select distinct miesiac from at where rok='.$_POST['rok'].'';
  10. $miesiac = mysql_query($querym);
  11.  
  12. $queryd = 'select distinct dzien from at where rok='.$_POST['rok'].' AND miesiac='.$_POST['miesiac'].'';
  13. $dzien = mysql_query($queryd);
  14.  
  15.  
  16. echo '
  17.  
  18.  
  19. <script language="javascript">
  20. function zatwierdzr()
  21. {
  22. document.rok.submit();
  23. }
  24. </script>
  25.  
  26. <script language="javascript">
  27. function zatwierdzm()
  28. {
  29. document.miesiac.submit();
  30. }
  31. </script>
  32.  
  33. <script language="javascript">
  34. function zatwierdzd()
  35. {
  36. document.dzien.submit();
  37. }
  38. </script>';
  39.  
  40. echo '
  41. <form action="" name="rok" method="post">
  42. <select name="rok" onchange=zatwierdzr();>';
  43.  
  44. for($i = 0;$i < mysql_num_rows($rok);$i++)
  45. { 
  46.  
  47. echo '<option value="'.mysql_result($rok, $i, 0).'"';
  48. if($_POST['rok'] == mysql_result($rok, $i, 0))
  49. {
  50. echo 'selected>';
  51. }
  52. else
  53. {echo '>';}
  54. echo mysql_result($rok, $i, 0);
  55. echo '</option>';
  56. }
  57. echo '</select></form>';
  58.  
  59. echo '
  60. <form action="" name="miesiac" method="post">
  61. <select name="miesiac" onchange="zatwierdzm();">';
  62.  
  63. for($i = 0;$i < mysql_num_rows($miesiac);$i++)
  64. { 
  65. echo '<option value="'.mysql_result($miesiac, $i, 0).'"';
  66. if($_POST['miesiac'] == mysql_result($miesiac, $i, 0))
  67. {
  68. echo 'selected>';
  69. }
  70. else
  71. {echo '>';}
  72. echo mysql_result($miesiac, $i, 0);
  73. echo '</option>';
  74. }
  75. echo '</form>';
  76.  
  77. echo '
  78. <form action="" name="dzien" method="post">
  79. <select name="dzien" onchange="zatwierdzd();">';
  80.  
  81. for($i = 0;$i < mysql_num_rows($dzien);$i++)
  82. { 
  83. echo '<option value="'.mysql_result($dzien, $i, 0).'"';
  84. if($_POST['dzien'] == mysql_result($dzien, $i, 0))
  85. {
  86. echo 'selected>';
  87. }
  88. else
  89. {echo '>';}
  90. echo mysql_result($dzien, $i, 0);
  91. echo '</option>';
  92. }
  93. echo '</select></form>';
  94.  
  95.  
  96. ?>
Go to the top of the page
+Quote Post
Cienki1980
post 16.01.2007, 00:04:23
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


Niepotrzbnie zamieszałeś w kodzie i stworzyłeś 3 form'y.

Lepiejby było stworzyć jedną formę i zmiana na jakimkolwiek z selectów zatwierdzałaby tę formę.

Aby nie stracić poprzednio wybranej wartości stwórz pola typu 'hidden' czyli :
  1. <input type="hidden" name="rok" value="<?php echo $rok; ?>">
  2. <input type="hidden" name="miesiac" value="<?php echo $miesiac; ?>">


To zapobiegnie "gubieniu" wybranych opcji.


--------------------
404
Go to the top of the page
+Quote Post
mokry
post 16.01.2007, 02:39:02
Post #9





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Nie lepiej wrzucić trzy DIV'y? Ładowanie do DIV'ów za pomocą AJAX'a?
Przy wybraniu każdego pola select jest uaktualniany tylko wybrany DIV, przez co nie ma nawet opcji na zgubienie wartości pola select...


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
ptrebacz
post 22.01.2007, 15:24:29
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 9.01.2007

Ostrzeżenie: (0%)
-----


Divy?? powiedz jak to zrobić a póki co to znalazłem to co potrzebuje ale na 2 selekty a nie na 3 kto wie jak to przerobić

źródło:

  1. <FORM NAME="person_select" ACTION="whatever.php" METHOD="GET">
  2. <?php
  3.  
  4.  $alphabet = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  5.  $mysql_username = "****";
  6.  $mysql_password = "****";
  7.  $db_name = "****";
  8.  
  9. ?>
  10. <P><B>Author:</B><BR>
  11. <SELECT NAME="firstletter" SIZE="1" ONCHANGE="redirect(this.options.selectedIndex)" CLASS="input" ONFOCUS="this.className='inputOn'" ONBLUR="this.className='inputOff'">
  12. <OPTION SELECTED="SELECTED">Select letter:</OPTION>
  13. <?php
  14.  
  15.  
  16.  while (list ($key, $value) = each ($alphabet))
  17.  {
  18.  
  19.  $value = trim ($value);
  20.  
  21.  echo " <OPTION VALUE="">$value</OPTION>n";
  22.  
  23.  }
  24.  
  25. ?>
  26. </SELECT>
  27. <SELECT NAME="person" SIZE="1">
  28. <OPTION SELECTED="SELECTED" VALUE=""><--Select first letter of surname</OPTION>
  29. </SELECT>
  30.  
  31. <script>
  32. <!--
  33.  
  34. /*
  35. Double Combo Script Credit
  36. By Website Abstraction (www.wsabstract.com)
  37. Over 200+ free JavaScripts here!
  38. */
  39.  
  40. var groups=document.person_select.firstletter.options.length
  41. var group=new Array(groups)
  42. for (i=0; i<groups; i++)
  43. group[i]=new Array()
  44.  
  45. group[0][0]=new Option("<--Select first letter of surname","")
  46.  
  47. <?php
  48.  
  49.  reset ($alphabet);
  50.  
  51.  $db = mysql_connect("localhost", "$mysql_username", "$mysql_password") or die ("Couldn't connect to server");
  52.  mysql_select_db ("$db_name",$db) or die ("Couldn't select database");
  53.  
  54.  while (list ($key, $value) = each ($alphabet)) {
  55.  
  56.  $value = trim ($value);
  57.  $ar1 = $key + "1";
  58.  $lc_value = strtolower($value);
  59.  
  60.  $sql = "SELECT person_id, surname, initials FROM person WHERE surname LIKE '$value%' OR surname LIKE '$lc_value%' ORDER BY surname, initials, main_name";
  61.  $result = mysql_query ($sql) or die ("Couldn't execute query");
  62.  
  63.  if (mysql_num_rows ($result) <= 0) {
  64.  echo "group[$ar1][0]=new Option("No entries for this letter","")n";
  65.  }
  66.  else {
  67.  
  68.  echo "group[$ar1][0]=new Option("Now select author:","")n";
  69.  
  70.  $ar2 = 1;
  71.  
  72.  while ($row = mysql_fetch_array ($result)) {
  73.  
  74. echo "group[$ar1][$ar2]=new Option("$row[surname], $row[initials]","$row[person_id]")n";
  75.  
  76.  $ar2++;
  77.  
  78.  }
  79.  }
  80.  echo "n";
  81.  }
  82.  
  83. ?>
  84. var temp=document.person_select.person
  85.  
  86. function redirect(x){
  87. for (m=temp.options.length-1;m>0;m--)
  88. temp.options[m]=null
  89. for (i=0;i<group[x].length;i++){
  90. temp.options[i]=new Option(group[x][i].text,group[x][i].value)
  91. }
  92. temp.options[0].selected=true
  93. }
  94.  
  95. //-->
  96. </SCRIPT>
  97. <INPUT TYPE="SUBMIT" NAME="submit_person" VALUE="Submit" 
  98. </FORM>
Go to the top of the page
+Quote Post
Cienki1980
post 22.01.2007, 16:59:20
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 590
Pomógł: 40
Dołączył: 11.01.2007
Skąd: Centrum

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $rok=$_POST['rok'];
  3. $miesiac=$_POST['miesiac'];
  4. $dzien=$_POST['dzien'];
  5. $miesiace=array();
  6. $dni=array();
  7. switch($rok)
  8. {
  9.  case "2005" : $miesiace=array(1,3,5,7,9); break;
  10.  case "2006" : $miesiace=array(2,4,6,8,10); break;
  11.  case "2007" : $miesiace=array(1,2,3,4,5); break;
  12. }
  13.  
  14. switch($miesiac)
  15. {
  16.  case "1" : $dni=array(11,13,15,17,19); break;
  17.  case "2" : $dni=array(12,14,16,18,20); break;
  18.  case "3" : $dni=array(11,12,13,14,15); break;
  19. }
  20. ?>
  21.  
  22.  
  23. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  24.  
  25. <html>
  26.  
  27. <head>
  28. <title>Sans Titre</title>
  29. <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  30. <meta name="generator" content="HAPedit 3.1">
  31. </head>
  32. <body bgcolor="#FFFFFF">
  33. <script language="javascript">
  34. function zatwierdz()
  35. {
  36.  document.kal.submit();
  37. }
  38. </script>
  39. <form action="index.php" method="post" name="kal">
  40.  
  41. <select name="rok" onChange="zatwierdz()";>
  42.  <option value="">wybierz rok
  43.  <option value="2005" <?php if($rok=='2005'){?>selected<?php }?> >2005
  44.  <option value="2006" <?php if($rok=='2006'){?>selected<?php }?> >2006
  45.  <option value="2007" <?php if($rok=='2007'){?>selected<?php }?> >2007
  46. </select>
  47. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  48. <select name="miesiac" onChange="zatwierdz()";>
  49.  <option value="">wybierz miesiac
  50.  <?php
  51.  for($i=0;$i<count($miesiace);$i++)
  52.  {
  53. echo "<option value="".$miesiace[$i].""";
  54. if($miesiac==$miesiace[$i])
  55.  echo " selected";
  56. echo ">".$miesiace[$i];
  57.  }
  58.  ?>
  59. </select>
  60. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  61. <select name="dzien" onChange="zatwierdz()";>
  62.  <option value="">wybierz dzien
  63.  <?php
  64.  for($j=0;$j<count($dni);$j++)
  65.  {
  66. echo "<option value="".$dni[$j].""";
  67. if($dzien==$dni[$j])
  68.  echo " selected";
  69. echo ">".$dni[$j];
  70.  }
  71.  ?>
  72. </select>
  73. </form>
  74.  
  75. </body>
  76. </html>


Tu masz najprostszy działający skrypt z trzema selectami. Zobacz na jakiej zasadzie działa i przerób na swoje potrzeby.


--------------------
404
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:04