Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Formularz z wcześniejszym wyborem kategorii.
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam robię dodatek na swoją stronę a mianowicie możliwość dodawania ikonek na mapę google.
Przedstawię jak to wygląda.
Mam formularz zgłoszeniowy http://pogoda-zachodniopomorskie.pl/zjawiska/new.php
Tam dodaje się nowe zdarzenia. Wszystkie dane wędrują do bazy sql na moim serwerze a potem za pomocą skryptu zgodnie z podanymi współrzędnymi wyświetlają się na mapie w tym miejscu http://pogoda-zachodniopomorskie.pl/zjawiska/index.html
Problem w tym że chcę tam dodać kilka kategorii typu: grad, opady, wiatr, trąba itp każda z kategorii będzie musiała mieć inne pola w formularzu ale aby wędrowało wszystko do jednej bazy danych bo inaczej nie będzie można pobierać wszystkiego do mapy.
Wybór ikonki następuje w formularzu gdzie mogła by być kategorią.
Jak zrobić aby najpierw była możliwość wyboru kategorii (odrazu ikony) a potem aby na dole pojawił się formularz z odpowiednimi polami.
Mam nadzieję że wytłumaczyłem o co mi chodzi.
Przedstawiam kod formularza.
  1. <?php
  2. if(isset($_POST["submit"])) {
  3. include ("db.php");
  4.  
  5. $dzien = $_POST['dzien'];
  6. $godzina = $_POST['godzina'];
  7. $intensywnostmin = $_POST['intensywnostmin'];
  8. $lat = $_POST['lat'];
  9. $lng = $_POST['lng'];
  10. $flaga = $_POST['flaga'];
  11. $miejsce = $_POST['miejsce'];
  12. $add = mysql_query("INSERT INTO mroz(dzien, godzina, intensywnostmin, lat, lng, flaga, miejsce) VALUES('$dzien', '$godzina', '$intensywnostmin', '$lat','$lng','$flaga','$miejsce')");
  13.  
  14.  
  15. if ($add) {
  16. echo '<p>Dodano do bazy</p><br>';
  17. echo '<p><a href="http://pogoda-zachodniopomorskie.pl/zjawiska/index.html">Przejdz do mapy</a></p>';
  18. } else {
  19. echo mysql_error(); echo '<p>Błąd! Spróbuj ponownie</p>';
  20. }
  21. } else {
  22. ?>
  23.  
  24.  
  25. <!-- kod formularza-->
  26. <form action="new.php" method="post">
  27. <table>
  28. <tr>
  29. <td align="right">Data w formie (18.05.2014) </td>
  30. <td><input type="text" name="dzien" style="width: 200px"></td>
  31. </tr>
  32. <tr>
  33. <td align="right">Godzina w formie (18:12) </td>
  34. <td><input type="text" name="godzina" style="width: 200px"></td>
  35. </tr>
  36. <tr>
  37. <td align="right">Najniższa temperatura w formie (-22) </td>
  38. <td><input type="text" name="intensywnostmin" style="width: 50px"></td>
  39. </tr>
  40. <tr>
  41. <td align="right">Długość geograficzna w przedziale (52.581122 - 54.599999) </td>
  42. <td><input type="text" name="lat" style="width: 200px"></td>
  43. </tr>
  44. <tr>
  45. <td align="right">Szerokość geograficzna w przedziale (14.051234 - 17.023456) </td>
  46. <td><input type="text" name="lng" style="width: 200px"></td>
  47. </tr>
  48. <tr>
  49. <td align="right">ikona (www.pogoda-zachodniopomorskie.pl/images/opady.png</td>
  50. <td><select name="flaga" size="1">
  51. <option>opady</option>
  52. <option>grad</option>
  53. <option>traba</option>
  54. </select></td>
  55. </tr>
  56. <tr>
  57. <td align="right">miejsce </td>
  58. <td><input type="text" name="miejsce"></td>
  59. </tr>
  60.  
  61. <tr>
  62. <td colspan="2" align="right">
  63. <input type="submit" name="submit" value="Wyślij" /></td>
  64. </tr>
  65. </table>
  66. </form>
  67.  
  68. <?php
  69. }
  70. ?>
tzm
Podobny problem miałem kiedyś jak pisałem gierke ..
Najpierw musiałem wybrać klase postaci i potem dopiero ustalać jakieś inne parametry.
Ogólnie podzieliłem stronę na step1 i step2.
Na pierwszej wybierałem klasę i w tablicy sesji zapisywałem wynik który potem przenosiłem dalej, dalej wybierałem odpowiednie parametry i w step3 wszystko z tablicy sesji zapisywałem do bazy danych.
W sumie rozwiązanie dobre. Ewentualnie GET dałby radę no ale wiadomo że przy formularzach lepiej POST'a używać.

Edit: poza tym to sobie zabezpiecz bo cuda się dzieją wink.gif
brzanek
tzm możesz podać jakiś namiar na taki kod myślę że to by mi wystarczyło.
Chyba że jest jakiś inny na to sposób. Może cos z js?
tzm
niestety nie mam, to dawno bylo. czego nie rozumiesz to wyjasnie.
brzanek
Jak podzielić stronę na step1 i step2 i kolejne
Przypominam że wszystko musi odbyć się w jednym pliku
http://pogoda-zachodniopomorskie.pl/zjawiska/new.php
Bo wszystko zapisuje się do jednej bazy danych do jednej tabeli
W kolejnych step1 będą jakieś pola do wypełnienia a w kolejnym step2 jeszcze inne - rozumiesz?
tzm
switch($_GET['page'])

i robisz w linki ?page=step1/2/3

tylko nawet lepiej jak będziesz miał ?page=1/2/3 i potem sprawdzał czy $_GET['page'] to (int)
nospor
Cytat
Przypominam że wszystko musi odbyć się w jednym pliku
http://pogoda-zachodniopomorskie.pl/zjawiska/new.php
Bo wszystko zapisuje się do jednej bazy danych do jednej tabeli

To, że wszystkjo zapisywac ma sie w jednej tabeli w żaden sposób nie powoduje, że ma sie wykonywać w jednym pliku... Ot taka luźna dygresja
tzm
Cytat(nospor @ 27.08.2014, 10:45:45 ) *
To, że wszystkjo zapisywac ma sie w jednej tabeli w żaden sposób nie powoduje, że ma sie wykonywać w jednym pliku... Ot taka luźna dygresja


jasne że może być w wielu plikach i zapisywać do jednej tabeli, tylko po co w sumie? jak przemyśli kod to faktycznie można to upchać bez burdelu do jednego pliku. ot taka pojedyńcza klasa.
nospor
Chciałem jedynie poprawić jego błędny tok myślenia. Nie mowie że tak należy robić. Mowie jedynie, ze jego założenie jest błędne. Lepiej mu to powiedziec teraz niz przez kolejne 5 lat ma żyć w tym mylnym przeświadczeniu.
brzanek
Zrobiłem coś takiego.
  1. <?php
  2.  
  3. if(!isset($_GET['act']))
  4. {
  5. $_GET['act'] = 'index';
  6. }
  7. switch($_GET['act'])
  8. {
  9. case 'dod':
  10. echo 'Jak nie damy komendy "break", to pokaże nam się też...<br/>';
  11. case 'dodaj':
  12.  
  13.  
  14. if(isset($_POST["submit"])) {
  15. include ("db.php");
  16.  
  17. $dzien = $_POST['dzien'];
  18. $godzina = $_POST['godzina'];
  19. $intensywnostmin = $_POST['intensywnostmin'];
  20. $lat = $_POST['lat'];
  21. $lng = $_POST['lng'];
  22. $flaga = $_POST['flaga'];
  23. $miejsce = $_POST['miejsce'];
  24. $add = mysql_query("INSERT INTO mroz(dzien, godzina, intensywnostmin, lat, lng, flaga, miejsce) VALUES('$dzien', '$godzina', '$intensywnostmin', '$lat','$lng','$flaga','$miejsce')");
  25.  
  26.  
  27.  
  28. if ($add) {
  29. echo '<p>Dodano do bazy</p><br>';
  30. echo '<p><a href="http://pogoda-zachodniopomorskie.pl/zjawiska/index.html">Przejdz do mapy</a></p>';
  31. } else {
  32. echo mysql_error(); echo '<p>Błąd! Spróbuj ponownie</p>';
  33. }
  34. } else {
  35. echo '<form action="new.php" method="post">
  36. <table>
  37. <tr>
  38. <td align="right">Data w formie (18.05.2014) </td>
  39. <td><input type="text" name="dzien" style="width: 200px"></td>
  40. </tr>
  41. <tr>
  42. <td align="right">Godzina w formie (18:12) </td>
  43. <td><input type="text" name="godzina" style="width: 200px"></td>
  44. </tr>
  45. <tr>
  46. <td align="right">Najniższa temperatura w formie (-22) </td>
  47. <td><input type="text" name="intensywnostmin" style="width: 50px"></td>
  48. </tr>
  49. <tr>
  50. <td align="right">Długość geograficzna w przedziale (52.581122 - 54.599999) </td>
  51. <td><input type="text" name="lat" style="width: 200px"></td>
  52. </tr>
  53. <tr>
  54. <td align="right">Szerokość geograficzna w przedziale (14.051234 - 17.023456) </td>
  55. <td><input type="text" name="lng" style="width: 200px"></td>
  56. </tr>
  57. <tr>
  58. <td align="right">ikona (www.pogoda-zachodniopomorskie.pl/images/opady.png</td>
  59. <td><select name="flaga" size="1">
  60. <option>opady</option>
  61. <option>grad</option>
  62. <option>traba</option>
  63. </select></td>
  64. </tr>
  65. <tr>
  66. <td align="right">miejsce </td>
  67. <td><input type="text" name="miejsce"></td>
  68. </tr>
  69. <tr>
  70. <td colspan="2" align="right">
  71. <input type="submit" name="submit" value="Wyślij" /></td>
  72. </tr>
  73. </table>
  74. </form>';
  75. }
  76. case 'wiatr':
  77. echo 'Usuwanie danych';
  78. break;
  79. case 'edytuj':
  80. echo 'Edycja danych';
  81. break;
  82. case 'usun':
  83. echo 'Usuwanie danych';
  84. break;
  85. default:
  86.  
  87. echo '<p><a href="?act=dodaj">Dodaj grożne zjawisko - opady</a></p>';
  88. echo '<p><a href="?act=wiatr">Dodaj grożne zjawisko - wiatr</a></p>';
  89. }
  90. ?>

Czy coś takiego może być?

Dobra zrobiłem już podział i odpowiada mi to, ale napotkałem kolejny problem jak można pobrać współrzędne z mapy google i po kliknięciu w odpowiednie miejsce na mapie współrzędne dodawały się do odpowiedniego pola w formularzu?
Tu jest formularz http://pogoda-zachodniopomorskie.pl/zjawiska/grad.php w polach
Długość geograficzna w przedziale (52.581 - 54.599) *
Szerokość geograficzna w przedziale (14.051 - 17.023) *
Powinny pojawić się automatycznie współrzędne po kliknięciu na mapie. Mapa otwierała by się w nowym oknie.
Macie jakiś na to pomysł?
nospor
Google Maps ma swoje API oraz dokuementacje wraz z przykładami jak to się robi...
Zacznij wpierw od wstawienia google maps do tego forma.
brzanek
Ok dodałem linka do mapy. Mapa otwiera się w nowym oknie ale jak teraz zastosować te API aby wysiągnąć (po kliknięciu na mapie) współrzędne oraz aby dodały się w odpowiednich polach formularza?
Tak wygląda kod ze stronę mapa.html
  1. <head>
  2. <title>Asynchronous Loading</title>
  3. <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
  4. <meta charset="utf-8">
  5. html, body, #map-canvas {
  6. height: 100%;
  7. margin: 0px;
  8. padding: 0px
  9. }
  10. </style>
  11. function initialize() {
  12. var mapOptions = {
  13. zoom: 8,
  14. center: new google.maps.LatLng(53.5664142, 15.7379150)
  15. };
  16.  
  17. var map = new google.maps.Map(document.getElementById('map-canvas'),
  18. mapOptions);
  19. }
  20.  
  21. function loadScript() {
  22. var script = document.createElement('script');
  23. script.type = 'text/javascript';
  24. script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&' +
  25. 'callback=initialize';
  26. document.body.appendChild(script);
  27. }
  28.  
  29. window.onload = loadScript;
  30.  
  31. </script>
  32. </head>
  33. <body>
  34. <div id="map-canvas" style="width: 500px; height: 500px; border: 1px solid black; background: gray;"></div>
  35. </body>
  36. </html>
nospor
Mapa ma byc na tej samej stronie co formularz.
Od biedy mozesz zrobic popup (window.open) lub jakies okienko modalne.
W przeciwnym wypadku nie bedziesz mial jak odwolac sie do okna formularza
brzanek
Nie mogę sobie poradzić z tą opcją window.open coś mi nie wychodzi. Robiłem to przez generator http://www.kurshtml.edu.pl/skrypty/generator_okien,okno.html skopiowałem kod
  1. window.open('http://pogoda-zachodniopomorskie.pl/zjawiska/mapa.html', 'mapa', 'menubar=no,toolbar=no,location=no,directories=no,status=no,scrollbars=no,resizab
    le=no,fullscreen=no,channelmode=no,width=500,height=500,left=800,top=20')

Ale coś to nie działa.

Wracam do tego projektu dodałem już mapę na stronie w której chcęaby po kliknięciu na dany punkt na mapie google dodawało tego punktu współrzędne do formularza.
http://pogoda-zachodniopomorskie.pl/infusi..._panel/grad.php
Tak to wygląda
Nie wiem jak teraz zrobić aby pobierało te współrzędne. Może ktoś podpowiedzieć?

Udało mi się zrobić aby pobierało dane z mapy ale mam teraz problem bo nie chcą mi się zapisać te współrzędne do bazy sql.
O to fragment kodu gdzie generowane są współrzędne i powinny być zapisywane do bazy danych.
  1. <table border="0" cellpadding="0" cellspacing="0" width="750px" align="left">
  2. <tr>
  3. <td class="tbl" width="490px">Długość geograficzna w przedziale (52.581 - 54.599) <b>*</b></td>
  4. <td class="tbl" width="260px" id="LatLong" name="lat"></td>
  5. </tr>
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.