Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][AJAX] Wyświetlanie zależne od select
CiRiO
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 27.09.2012

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


Borykam się z pewnym problemem. Opiszę może to na przykładach.
  1. function showPrice(str)
  2. {
  3. var xmlhttp;
  4. if (str=="")
  5. {
  6. document.getElementById("txtHint").innerHTML="";
  7. return;
  8. }
  9. if (window.XMLHttpRequest)
  10. {// code for IE7+, Firefox, Chrome, Opera, Safari
  11. xmlhttp=new XMLHttpRequest();
  12. }
  13. else
  14. {// code for IE6, IE5
  15. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  16. }
  17. xmlhttp.onreadystatechange=function()
  18. {
  19. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  20. {
  21. document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
  22. }
  23. }
  24. xmlhttp.open("GET","includes/price.php?q="+str,true);
  25. xmlhttp.send();
  26. }


  1. $q=$_GET["q"];
  2.  
  3. $dbConnect = mysql_connect ($dbHost, $dbUser, $dbPass) or die ('MySQL connect failed. ' . mysql_error());
  4. mysql_select_db($dbName) or die('Cannot select database. ' . mysql_error());
  5.  
  6. $sql = "SELECT * FROM pfase_server, pfase_settings, pfase_payment WHERE payment_id = $q";
  7. $result = mysql_query($sql) or die(mysql_error());
  8. $row = mysql_fetch_assoc($result);
  9.  
  10. echo "Cena za SMS: <span>".$row['payment_price']."zł</span> z VAT";


  1. <select onchange="showPrice(this.value)">
  2. <option value=""></option>
  3. {foreach from=$payment item=row}<option value="{$row.payment_id}">{$row.payment_time}</option>{/foreach}


W <div id=#txtHint> wyświetla mi się cena, która jest zależna od wyboru w select. Moim celem jest wyświetlenie ponowne ceny, oraz numeru z bazy (id select = id ceny i numeru) tylko w innej postaci, tzn. nie "Cena za SMS: <span>".$row['payment_price']."zł</span> z VAT".
Proszę o pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
szalek01
post
Post #2





Grupa: Zarejestrowani
Postów: 129
Pomógł: 17
Dołączył: 17.09.2012

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


(IMG:style_emoticons/default/exclamation.gif) ! sql injection = (SELECT * FROM pfase_server, pfase_settings, pfase_payment WHERE payment_id = $q) <= $q=$_GET["q"];
poczytaj o PDO i JQUERY AJAX

Ten post edytował szalek01 27.09.2012, 20:08:51
Go to the top of the page
+Quote Post
CiRiO
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 27.09.2012

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


Wiem doskonale, że ten kod jest dziurawy i wiem jak temu zaradzić, lecz w tym etapie tworzenia kwestie zabezpieczeń pomijam. Tak samo metoda łączenia się z bazą jest tymczasowa. Odesłanie mnie do lektury jQuery AJAX nie jest rozwiązaniem problemu, tym bardziej, że nie nie poruszam się w tej tematyce i wiedza wykraczająca ponad podstawy jest mi zupełnie zbędna.
Pozdrawiam
Go to the top of the page
+Quote Post
Arcioch
post
Post #4





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

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


Hej (IMG:style_emoticons/default/smile.gif)

Tu masz napisane to co potrzebujesz tylko na tablicach i wykorzystując jQuery (IMG:style_emoticons/default/wink.gif) Kod składa się z 2 plików (IMG:style_emoticons/default/wink.gif) selecty.php w którym jest select i kod w js wysyłający wartość selecta do drugiego pliku post.php.
Dostosuj sobie to do bazy danych a następnie odpowiednio zabezpiecz (IMG:style_emoticons/default/wink.gif)

Plik selecty.php

  1. <?php
  2. $produkty = array('Komputer', 'Telewizor', 'Telefon');
  3. ?>
  4.  
  5.  
  6. <!DOCTYPE html>
  7. <meta charset="UTF-8">
  8. <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
  9.  
  10. div.first_select{
  11. display: block;
  12. float: left;
  13. width: 200px;
  14. }
  15.  
  16. select{
  17. width: 150px;
  18. text-align: center;
  19. }
  20.  
  21. div.decv{
  22. display: block;
  23. float: left;
  24. clear: both;
  25. margin: 100px 0px 0px 0px;
  26. }
  27.  
  28.  
  29. $(function(){
  30. // Tu masz funckje odpowiedzialna za pierwszego select
  31.  
  32. $('#produkty').change(function() {
  33.  
  34. var produkt = $('select#produkty option:selected').val();
  35.  
  36. if(produkt != ''){
  37. $.ajax({
  38. type: "POST",
  39. url: "post.php",
  40. data: "produkt=" + produkt ,
  41. cache: false,
  42. dataType: "json",
  43. success: function(data){
  44. $('div.desc').html(data);
  45. }
  46. });
  47. }else{
  48. $('div.desc').html('');
  49. }
  50.  
  51. });
  52.  
  53. });
  54.  
  55.  
  56. </head>
  57.  
  58. <div class="first_select">
  59. <select id="produkty" name="produkty">
  60. <option value="">Wybierz produkt</option>
  61. <? foreach($produkty as $key => $p):?>
  62. <option value="<?= $key?>"><?= $p ?></option>
  63. <? endforeach; ?>
  64. </select>
  65. </div>
  66.  
  67. <div class="desc">
  68. </div>
  69.  
  70. </body>
  71. </html>


plik post.php

  1. <?php
  2.  
  3.  
  4. $produkty = array('Komputer', 'Telewizor', 'Telefon');
  5.  
  6. $ceny = array('1500', '1000', '500');
  7.  
  8.  
  9.  
  10. if(isset($_POST['produkt'])){
  11.  
  12. $cena = 'Cena za produkt wynosci ';
  13. foreach($ceny as $key => $c){
  14. if($key == $_POST['produkt']){
  15. $cena .= $c.' PLN';
  16. break;
  17. }
  18. }
  19.  
  20. echo json_encode($cena);
  21. }
  22. ?>
  23.  
Go to the top of the page
+Quote Post
CiRiO
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 27.09.2012

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


Wszystko prawdopodobnie działałoby super, gdyby nie fakt, że korzystam również ze SMARTY. Wyklucza to wstawienie w value zmiennej $key, a co za tym idzie zawartość nie zmienia się zależnie od selecta. Rozwiązaniem tej sytuacji mogłoby być nazwanie funkcji przykładowo showPrice(str) i wstawienie do selecta onchange="showPrice(this.value)", lecz wiązałoby się to z przesłaniem metodą GET wartości value. Niestety nie wiem jak wdrożyć coś takiego w dany mi powyżej kod jquery. Ma ktoś jakieś pomysły? Albo potrafi przerobić mój kod bym mógł określić zawartość więcej niż jednego diva tak jak mogę zrobić w kodzie, który podesłał mi Arcioch.

Ten post edytował CiRiO 28.09.2012, 12:35:30
Go to the top of the page
+Quote Post
Arcioch
post
Post #6





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

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


Kolego to jest tylko przykład (IMG:style_emoticons/default/wink.gif) bez problemu można go zastosować ze smartami (IMG:style_emoticons/default/wink.gif)
Robisz selecta jak w Twoim kodzie w value wpisując id i ślesz id postem (IMG:style_emoticons/default/wink.gif) Ja akurat wysyłałem klucze tablicy bo mi tak było szybciej (IMG:style_emoticons/default/wink.gif) Kodu jQuery nie musisz zmieniać chyba ze nazwę wysyłanej postem zmiennej i id selecta z którego ma łapać (IMG:style_emoticons/default/wink.gif) Czyli robisz tak (IMG:style_emoticons/default/wink.gif) W pliku z templatem gdzie masz załączane arkusz stylów itp w znaczniku head doklejasz (IMG:style_emoticons/default/wink.gif)

  1. <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
  2.  
  3. $(function(){
  4. $('#produkty').change(function() {
  5.  
  6. var produkt = $('select#produkty option:selected').val();
  7.  
  8. if(produkt != ''){
  9. $.ajax({
  10. type: "POST",
  11. url: "post.php",
  12. data: "produkt=" + produkt ,
  13. cache: false,
  14. dataType: "json",
  15. success: function(data){
  16. $('div.desc').html(data);
  17. }
  18. });
  19. }else{
  20. $('div.desc').html('');
  21. }
  22.  
  23. });
  24.  
  25. });
  26.  


Twój select w smartach wygląda tak (IMG:style_emoticons/default/wink.gif) Dodatkowo potrzeby jest jakiś pusty div w którym będziemy wrzucać ten tekst (w tym przypadku div.desc)(IMG:style_emoticons/default/wink.gif)

  1. <select id="produkty" name="produkty">
  2. <option value=""></option>
  3. {foreach from=$payment item=row}<option value="{$row.payment_id}">{$row.payment_time}</option>{/foreach}
  4. <div class="desc"></div>


Plik post.php w Twoim przypadku będzie wyglądał tak (IMG:style_emoticons/default/wink.gif)

  1. <?
  2. if(isset($_POST['produkt'])){
  3.  
  4. $q=$_POST['produkt'];
  5.  
  6. $dbConnect = mysql_connect ($dbHost, $dbUser, $dbPass) or die ('MySQL connect failed. ' . mysql_error());
  7. mysql_select_db($dbName) or die('Cannot select database. ' . mysql_error());
  8.  
  9. $sql = "SELECT * FROM pfase_server, pfase_settings, pfase_payment WHERE payment_id = $q";
  10. $result = mysql_query($sql) or die(mysql_error());
  11. $row = mysql_fetch_assoc($result);
  12. $komunikat = "Cena za SMS: <span>".$row['payment_price']."zł</span> z VAT";
  13. echo json_encode($komunikat);
  14. }
  15. ?>


Go to the top of the page
+Quote Post
CiRiO
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 27.09.2012

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


Dziękuję ślicznie za pomoc. Wszystko działa znakomicie (IMG:style_emoticons/default/smile.gif)
Pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 15:55