Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][MySQL][PHP]Cookie z wyborem w select i pobieranie danych z MYSQL
brzanek
post 27.01.2019, 14:41:13
Post #1





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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.
Go to the top of the page
+Quote Post
markonix
post 27.01.2019, 15:55:08
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 27.01.2019, 16:38:23
Post #3





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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.
Go to the top of the page
+Quote Post
markonix
post 27.01.2019, 18:24:53
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


W żaden sposób się nie zastosowałeś do moich sugestii..


--------------------
Go to the top of the page
+Quote Post
brzanek
post 28.01.2019, 09:36:35
Post #5





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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ś.
Go to the top of the page
+Quote Post
markonix
post 28.01.2019, 10:54:57
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Ż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 ).

Ten post edytował markonix 28.01.2019, 10:59:28


--------------------
Go to the top of the page
+Quote Post
brzanek
post 29.01.2019, 20:02:05
Post #7





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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ć?

Ten post edytował brzanek 29.01.2019, 20:03:37
Go to the top of the page
+Quote Post
markonix
post 29.01.2019, 23:17:37
Post #8





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.


--------------------
Go to the top of the page
+Quote Post
brzanek
post 30.01.2019, 09:36:38
Post #9





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


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.
Go to the top of the page
+Quote Post
markonix
post 30.01.2019, 10:48:16
Post #10





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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


--------------------
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: 20.04.2024 - 13:22