Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Cookie z wyborem w select i pobieranie danych z MYSQL
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam w bazie danych mysql mam dane o odpowiednich id.
Zanim je pobiorę chcę aby po wejściu na stronę w osobnym oknie pojawił się mały formularz z wyborem select. Wybór ten zapisuje się w ciasteczku i pamięta to przez np. rok. Wybór w formularzu powodował by pobieranie odpowiednich danych o jakimś id z bazy danych.
Mam nadzieję, że jakoś to wytłumaczyłem.
Jak narazie mam coś takiego
  1. <?
  2.  
  3. ?>
  4. <select id="ThemeSelect" onchange="saveTheme(this.value);">
  5. <option value="1">CHOSZCZNO</option>
  6. <option value="2">SZCZECIN</option>
  7. <option value="3">KOSZALIN</option>
  8. </select>
  9. <script>
  10. var saveclass = null;
  11.  
  12. function saveTheme(cookieValue)
  13. {
  14. var sel = document.getElementById('ThemeSelect');
  15.  
  16. saveclass = saveclass ? saveclass : document.body.className;
  17. document.body.className = saveclass + ' ' + sel.value;
  18.  
  19. setCookie('theme', cookieValue, 365);
  20. }
  21.  
  22. function setCookie(cookieName, cookieValue, nDays) {
  23. var today = new Date();
  24. var expire = new Date();
  25.  
  26. if (nDays==null || nDays==0)
  27. nDays=1;
  28.  
  29. expire.setTime(today.getTime() + 3600000*24*nDays);
  30. document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
  31. }
  32.  
  33. function readCookie(name) {
  34. var nameEQ = name + "=";
  35. var ca = document.cookie.split(';');
  36. for(var i = 0; i < ca.length; i++) {
  37. var c = ca[i];
  38. while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  39. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  40. }
  41. return null;
  42. }
  43.  
  44. document.addEventListener('DOMContentLoaded', function() {
  45. var themeSelect = document.getElementById('ThemeSelect');
  46. var selectedTheme = readCookie('theme');
  47.  
  48. if (selectedTheme) {
  49. themeSelect.value = selectedTheme;
  50. }
  51. });
  52. </script>
  53. <?
  54. ?>

Po wyborze ciasteczko zapisuje się ale jak to teraz połączyć z bazą danych.
markonix
https://www.google.com/search?client=firefo...+mysql+podstawy

Zacznij od kursu i wróć jak będziesz miał z czymś konkretnym problem.

Co do obecnego kodu jakiś taki przekombinowany. Jak już będziesz miał część PHP zaczętą to przepisz to na php czyli po wysłaniu formularza zapiszesz ciasteczko via php, a przy ładowaniu strony za pomocą php ustawisz domyślnie zaznaczone. Z 50 linijek zrobi Ci się 5 + będziesz miał niezależny od działania JS skrypt.
brzanek
No ok tamto było na szybkiego pisane
  1. <?
  2. echo '<select id="ThemeSelect" onchange="saveTheme(this.value);">';
  3. echo '<option value="1">CHOSZCZNO</option>';
  4. echo '<option value="2">SZCZECIN</option>';
  5. echo '<option value="3">KOSZALIN</option>';
  6. echo '</select>';
  7.  
  8. echo "<script type='text/javascript' src='kod.js'></script>\n";
  9. ?>


Kod pliku kod.js
  1. var saveclass = null;
  2.  
  3. function saveTheme(cookieValue)
  4. {
  5. var sel = document.getElementById('ThemeSelect');
  6.  
  7. saveclass = saveclass ? saveclass : document.body.className;
  8. document.body.className = saveclass + ' ' + sel.value;
  9.  
  10. setCookie('theme', cookieValue, 365);
  11. }
  12.  
  13. function setCookie(cookieName, cookieValue, nDays) {
  14. var today = new Date();
  15. var expire = new Date();
  16.  
  17. if (nDays==null || nDays==0)
  18. nDays=1;
  19.  
  20. expire.setTime(today.getTime() + 3600000*24*nDays);
  21. document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
  22. }
  23.  
  24. function readCookie(name) {
  25. var nameEQ = name + "=";
  26. var ca = document.cookie.split(';');
  27. for(var i = 0; i < ca.length; i++) {
  28. var c = ca[i];
  29. while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  30. if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  31. }
  32. return null;
  33. }
  34.  
  35. document.addEventListener('DOMContentLoaded', function() {
  36. var themeSelect = document.getElementById('ThemeSelect');
  37. var selectedTheme = readCookie('theme');
  38.  
  39. if (selectedTheme) {
  40. themeSelect.value = selectedTheme;
  41. }
  42. });


Co dalej jak wybrane dane w formularzu z select połączyć z danymi z bd mysql.
markonix
W żaden sposób się nie zastosowałeś do moich sugestii..
brzanek
Cytat(markonix @ 27.01.2019, 18:24:53 ) *
W żaden sposób się nie zastosowałeś do moich sugestii..


W żaden sposób nie pomogłeś.
markonix
Żałosne..

Człowieku, jeżeli nie masz zamiaru w żaden sposób do czegoś dochodzić sam i się uczyć, to nie marnuj czasu ludzi na tym forum, i zleć to na oferii.
Masz 7 lat na forum php i jedyne co napisałeś to znacznik otwierający blok php (notabene niezalecany http://php.net/manual/en/language.basic-syntax.phptags.php ).
brzanek
Dalej z tym walczę.
Mam już coś takiego zrobione, że wybiera mi to co chcę ale jak zrobić aby wybór był dokonany bez ponownego przeładowania strony.
Mam taki kod
  1. <?
  2. include('db.php');
  3. ?>
  4. <style>
  5. .goraods {
  6. padding-top: 15px;
  7. }
  8. .goraodsm {
  9. padding-top: 3px;
  10. }
  11. .goraodsd {
  12. padding-top: 20px;
  13. }
  14. .goraodsd10 {
  15. padding-top: 10px;
  16. }
  17. .lewyods {
  18. padding-left: 15px;
  19. }
  20. .odstgora {
  21. font-size: 22px;
  22. }
  23. .opady {
  24. color: #1d4974;
  25. }
  26. .odsteplewy {
  27. padding-left: 15px;
  28. }
  29. </style>
  30.  
  31. <?
  32. // czy formularz został przesłany i czy wybrana została nazwa_miasta
  33. if(isset($_POST['formularz']) && isset($_POST['nazwa_miasta']))
  34. {
  35. $nazwa_miasta = $_POST['nazwa_miasta'];
  36. // ustawiamy ciastko o nazwie 'miasto' z wartością $nazwa_miasta, ważne przez 60 sekund
  37. setcookie('miasto', $nazwa_miasta, time()+60);
  38. }
  39. // jeśli ciastko 'miasto' istnieje
  40. if(isset($_COOKIE['miasto']))
  41. {
  42. $miastoArray2=array(
  43. '1' => 'CHOSZCZNO',
  44. '2' => 'SZCZECIN',
  45. '3' => 'KOSZALIN',
  46. '4' => 'ŚWINOUJŚCIE',
  47. );
  48.  
  49. // wyświetl miasto z ciastka
  50. $result = $mysqli->query("SELECT * FROM obecnie WHERE id_miasto =" . $_COOKIE['miasto'] . " ORDER BY id ASC LIMIT 1");
  51. while ( $row = mysqli_fetch_array($result) ) {
  52. echo '<div class="row text-center">';
  53. echo "<div class='col-md-12 odstgora'>".$miastoArray2[($row['id_miasto'])]."</div>";
  54. echo '</div>';
  55. echo '<div class="row goraodsd10">';
  56.  
  57. echo '</div>';
  58. echo '<h1 class="text-center">'.$row['temperature'].'&deg; <i class="wi wi-forecast-io-'.$row['icon'].'" data-toggle="tooltip" data-placement="top" title="'.$row['summary'].'"></i></h1>';
  59. echo '<div class="row goraods">';
  60. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4"><i class="wi wi-raindrops opady" title="Prawdopodobieństwo opadów"></i> '.$row['precipProbability'].'%</div>';
  61. echo '<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"><i class="wi wi-umbrella opady" title="Suma opadów"></i> '.$row['precipIntensity'].'mm</div>';
  62. echo '<div class="col-lg-2 col-md-2 col-sm-2 col-xs-2"></div>';
  63. echo '</div>';
  64. echo '<div class="row goraodsm">';
  65. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4"><i class="wi wi-humidity" title="Wilgotność"></i> '.$row['humidity'].'%</div>';
  66. echo '<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"><i class="wi wi-strong-wind" title="Porywy wiatru"></i> '.$row['windGust'].'km/h</div>';
  67. echo '<div class="col-lg-2 col-md-2 col-sm-2 col-xs-2"></div>';
  68. echo '</div>';
  69. echo '<div class="row goraodsm">';
  70. echo '<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"><i class="wi wi-barometer" title="Ciśnienie"></i> '.$row['pressure'].'hPa</div>';
  71. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4"></div>';
  72. echo '<div class="col-lg-2 col-md-2 col-sm-2 col-xs-2"></div>';
  73. echo '</div>';
  74. echo '<div class="row goraodsd">';
  75. echo '<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3" style="color:red;">Dzisiaj:</div>';
  76. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4"><i class="wi wi-sunrise" title="Wschód słońca"></i> '.date("H:i", $row['tSunRise']+3600).'</div>';
  77. echo '<div class="col-lg-5 col-md-5 col-sm-5 col-xs-5"><i class="wi wi-sunset" title="Zachód słońca"></i> '.date("H:i", $row['tSunSet']+3600).'</div>';
  78. echo '</div>';
  79. echo '<div class="row">';
  80. echo '<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">Temp: </div>';
  81. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">max: '.$row['tTempHigh'].'&deg;</div>';
  82. echo '<div class="col-lg-5 col-md-5 col-sm-5 col-xs-5">min: '.$row['tTempLow'].'&deg;</div>';
  83. echo '</div>';
  84. echo '<div class="row">';
  85. echo '<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">Wiatr: </div>';
  86. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">'.$row['tWindSpeed'].'km/h</div>';
  87. echo '<div class="col-lg-5 col-md-5 col-sm-5 col-xs-5">max: '.$row['tWindGust'].'km/h</div>';
  88. echo '</div>';
  89. echo '<div class="row">';
  90. echo '<div class="col-lg-3 col-md-3 col-sm-3 col-xs-3">Opady: </div>';
  91. echo '<div class="col-lg-4 col-md-4 col-sm-4 col-xs-4">mm</div>';
  92. echo '<div class="col-lg-5 col-md-5 col-sm-5 col-xs-5">max: mm</div>';
  93. echo '</div>';
  94. }
  95.  
  96. }
  97. else
  98. {
  99.  
  100. ?>
  101. <form action="<?php $_SERVER['PHP_SELF'] ?>" method="post">
  102.  
  103. <div class="form-group">
  104. <label for="exampleFormControlSelect1">Wybierz miasto</label>
  105. <select class="form-control" id="exampleFormControlSelect1" name="nazwa_miasta">
  106. <option value="1">CHOSZCZNO</option>
  107. <option value="2">SZCZECIN</option>
  108. <option value="3">KOSZALIN</option>
  109. <option value="4">ŚWINOUJŚCIE</option>
  110. </select>
  111. </div>
  112. <input type="hidden" name="formularz" value="1" />
  113. <div class="form-group row">
  114. <div class="col-sm-10">
  115. <button type="submit" class="btn btn-primary">Zapisz</button>
  116. </div>
  117. </div>
  118. </form>
  119. <?
  120. echo '
  121. </form>';
  122. }
  123. ?>

Adres strony http://www.pogoda-zachodniopomorskie.pl/in...asto_cookie.php
Ciasteczko zapamiętane jest przez 60 sek. Aby po wyborze była widoczna zmiana strony trzeba ponownie ją odświeżyć. Jak to zmienić?
markonix
A czemu nie może odświeżać, to dość logiczne, że i tak musisz przeładować stronę.

Twoje miasto to [ Nazwa miasta z selecta ] - [ Zmień -> submit ].
Jeżeli brakuje ciasteczka to wyświetlasz domyślne miasto, albo żadnego.
brzanek
Przeładować trzeba klikając w przycisk Zapisz
Ale aby zmiany były widoczne trzeba jeszcze raz stronę odświeżyć.
Zobacz na podany link wybierz miasto i kliknij zapisz. Nie zobaczysz zmian ale jak dasz F5 i ponownie stronę odświeżysz to już zmiany będą widoczne.
Jak zrobić aby po wciśnięciu Zapisz przeładowała się strona ale już ze zmianami.
markonix
To normalne zachowanie ciasteczka, bo te jest dodawane do nagłówka, a nie odświeżasz strony po jego dodaniu.

https://stackoverflow.com/questions/3230133...after-setcookie
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.