Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyszukiwanie poprzez formularz php i html z mysql
Forum PHP.pl > Forum > PHP
ptrebacz
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
Cienki1980
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.
ptrebacz
a jak zrobić to przez przeładowanie strony??
Cienki1980
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.
ptrebacz
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ć
Cienki1980
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.
ptrebacz
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. ?>
Cienki1980
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.
mokry
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...
ptrebacz
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>
Cienki1980
  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.
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.