Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prosty Problem z nie pamiętliwym Selectem
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
Unises
Witam

Zwracam sie z prosba o pomoc w dosc błachej (ale nie dla mnie) sprawie, chce by lista rozwijalna pamietała wartosc po przeładowaniu,. Mam liste i przycisk, po wybaraniu i kliknieciu jest ok , tylko że na liscie jest warosc domyslna a ja chce by była to wartosc ostatnio wybrana. Wertowałem tą grupe probowałem zaimplementowac przykłady ale cos mi nie wychodzi, wiem ze musi byc warunek na selected, ale chyba nie do konca potrafie to zrozumiec, bo za diabła mi nie wychodzi i po kolejnym przykladzie jestem głupszy niz byłem, ohmy.gif nie wklejam tu nawet tego co próbowłem bo to żenujące sadsmiley02.gif , tylko fragment działajacego kod bez warunku

  1. <form action="xlist.php" method="get">
  2. <input type="submit" value="szukaj">
  3.  
  4.  
  5. <?php
  6.  
  7.  
  8. $conn = mssql_connect('(local)Vex', 'sa', 'as');
  9.  
  10.  
  11.  mssql_select_db("Vino", $conn)
  12. or die("nie dało się wybrać bazy");
  13.  
  14.  
  15. echo '<td><select name="listek" onchange="document.dodaj_transakcje.submit();">';
  16. echo'<option value="0">Wybierz dział';
  17.  
  18.  
  19. $query_s = "select Nazwisko from GRUPA order by Nazwisko";
  20.  
  21.  
  22. $result_s = mssql_query ($query_s);
  23. while ($row_s = mssql_fetch_array($result_s))
  24.  
  25.  
  26. echo'<option value="'.$row_s['Nazwisko'].'">'.$row_s['Nazwisko'].'</option>';
  27.  
  28.  
  29. echo $row_s;
  30. echo '</td>';
  31.  
  32.  
  33. .............
  34. ?>


Prosze o wyrozumiłość i o łopatologiczne wytłumaczenie gdzie i jak umiescic ten warunek.
php programmer
Możesz zrobić tak
Edit: Mała lecz istotna poprawka

  1. <form action="xlist.php" method="get">
  2. <input type="submit" value="szukaj">
  3.  
  4.  
  5. <?php
  6.  
  7. require('select.php');
  8. $select = new('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  9. $select->AddItem(0,'Wybierz dział');
  10. $select->SelectItem($_POST['listek']);
  11.  
  12.  
  13. $conn = mssql_connect('(local)Vex', 'sa', 'as');
  14.  
  15.  
  16.  mssql_select_db("Vino", $conn)
  17. or die("nie dało się wybrać bazy");
  18.  
  19. $query_s = "select Nazwisko from GRUPA order by Nazwisko";
  20.  
  21. $result_s = mssql_query ($query_s);
  22. while ($row_s = mssql_fetch_array($result_s))
  23.  $select->AddItem($row_s['Nazwisko'],$row_s['Nazwisko']);
  24.  
  25.  
  26. echo '<td>';
  27.  
  28. $select->OutPut();
  29.  
  30.  
  31. echo $row_s;
  32. echo '</td>';
  33.  
  34.  
  35. .............
  36. ?>


Includowany plik select.php

  1. <?
  2.  
  3. class Select{
  4.  
  5. var $name;
  6. var $items,$index,$i,$selected;
  7. var $style;
  8.  
  9. function Select($name,$style='',$params=''){
  10. $this->name  = $name;
  11. $this->style = $style;
  12. $this->params = $params;
  13. $this->index  = -1;
  14. $this->selected = -1;
  15. $this->items = Array();
  16. }
  17.  
  18. function AddItem($value,$view){
  19. $this->index++;
  20. $this->items[$this->index]['value'] = $value;
  21. $this->items[$this->index]['view'] = $view;
  22. }
  23.  
  24. function SelectItem($value){
  25. $this->selected = $value;
  26. }
  27.  
  28. function OutPut($label='',$width=300){
  29.  
  30. if (trim($label)!=''){
  31.  $width /= 2;
  32.  echo '<table cellaspacing="0" cellpadding="0" border="0">';
  33.  echo '<tr><td width="'.$width.'px" align="right" style="padding-right:5px">';
  34.  echo str_replace(' ','&nbsp;',$label);
  35.  echo '</td><td width="'.$width.'px">';
  36.  }
  37.  
  38. // *******************************************************************************
    ***
  39. echo '<select name="'.$this->name.'" id="'.$this->name.'" style="'.$this->style.'" '.$this->params.' >';
  40. for ($this->i = 0; $this->i <= $this->index ; $this->i++){
  41. $this->s = ($this->selected == $this->items[$this->i]['value']) ? 'selected' : '';
  42. echo '<option value="'.$this->items[$this->i]['value'].'" '.$this->s.' >'.$this->items[$this->i]['view'].'</option>';
  43. }
  44. echo '</select>';
  45. // ******************************************************************************
  46.  
  47. if (trim($label)!=''){
  48.  echo '</td></tr>';
  49.  echo '</table>';
  50.  }
  51.  
  52.  
  53. }
  54.  
  55. function Count(){
  56. return $this->index + 1;
  57. }
  58.  
  59. }
  60.  
  61. ?>
Unises
Dzieki za szybką odpowiedz , ale cos tam jest nie tak bo nie wyswietla mi absolutnie nic , na ekranie, nawet jesli tylko uzyje tego frgmentu kodu ktory jest w tym wątku powinno zadziałac, czy tak?, powinno wyswietlic przycisk, liste i wartosci zaladowane z tabeli do listy, ale tak sie nie dzieje., Wyczajiłem ze po wyłączeniu



  1. <?php
  2. #$select = new('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  3. ?>


Wyswietla mi tylko przycisk, tam jest chyba jakis blad składniowy sadsmiley02.gif
, albo to jeszcze cos innego
php programmer
pewnie tak, tzn błąd składniowy
na samym początku wpisz

  1. <?php
  2. ?>
Unises
Zrobiłem tak jak napisałeś dodałem raportowanie błedów, error_reporting(E_ALL);

okazało się że w select.php , po przekopiowaniu ze strony jest złamana na dwie linia odzielajaca
& nbsp;*****************,

poprawiłem to, potem wywalił mi Fatal error: Call to a member function on a non-object .. co zrozumiałe (ale przynajmniej wyswietlił przycisk), odchaszowałem,w skrypcie glownym line

  1. <?php
  2. $select = new('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  3. ?>



no i jestem w punkcie wyjscia, mam czystą strone na której nie wyswietla sie nic. worriedsmiley.gif
php programmer
Nie wiem czy zauważyłeś, ale w pewnym momencie
edytowałem swój post,

wyświetlenie przygotowanego select'a powoduje metoda
  1. <?php
  2. $select->OutPut();
  3. ?>

znajduje się później niż przygotowanie właściwości tego obiwektu

na potrzeby debugowania możesz wyświetlić obiekt

  1. <?php
  2. print_r($select);
  3. ?>
Unises
Zrobiłem tak jak napisałeś użyłem tego poprawionego przez Ciebie kodu i dalej nic nie wyswietliło, nastepnie uzyłem czegos strasznie uproszczonego (nie zwiera zródła danych itd) ale selecta bez wartosci w liscie chba powinno wyswietlic, niezaleznie czy uzyje select->OutPut(); czy tez print_r($select); oczywiscie dalej nic, jestem podłamany

  1. <form action="xlist.php" method="get">
  2. <input type="submit" value="szukaj">
  3.  
  4.  
  5.  
  6. <?php
  7.  
  8.  
  9. require('select.php');
  10.  
  11. $select = new('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  12.  
  13. $select->AddItem(0,'Wybierz dział');
  14.  
  15. $select->SelectItem($_POST['listek']);
  16.  
  17.  
  18. echo '<td>';
  19.  
  20. print_r($select);
  21.  
  22.  
  23. #$select->OutPut();
  24. #echo $row_s;
  25. echo '</td>';
  26.  
  27.  
  28. ?>
php programmer
Ok, zgrałem sobie przykłąd na dysk i pokazało błąd
w linijce gdzie masz
  1. <?php
  2. $select = new('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  3. ?>


powinno być oczywiście

  1. <?php
  2. $select = new Select('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  3. ?>


swoją drogą php powinien ci pokazywać jakie masz błedy
przynajmniej w fazie testów żebyś nie musiał wróżyć z fusów,
ustaw
ini_set('display_errors',TRUE);
Unises
Prawie sie ruszyło snitch.gif
Pokazuje mi liste, z załadowanymi wartosciami i przycisk szukaj, wybieram wartosc, klikam szukaj a lista i tak przeskakuje na wartosc domyslną.


Wyskakuje mi cos takiego:

Notice: Undefined index: listek in c:\program files\easyphp1-8\www\xlist.php on line 17

chodzi mu o ta linie

  1. <?php
  2. $select->SelectItem($_POST['listek']);
  3. ?>


W jaki spob mam zdefiniowac zeby to widział? i a tym samym zeby lista zrobiła sie pamiętliwa.
php programmer
spróbuj zamiast

  1. <?php
  2. $select->SelectItem($_POST['listek']);
  3. ?>



dać

  1. <?php
  2. $select->SelectItem($_GET['listek']);
  3. ?>
Unises
Zmiana nie pomogła jest tak samo jak było, a czy da sie jakas bardziej "jawnie" mu to zdeklarowac, moze przez jakas dodatkową zmienną pomocniczą? , ja kombinuje ale mi nie wychodzi.
php programmer
Zarówno w pokazanym powyżej skrypcie jak i w xlist.php
na samym początku dajesz

  1. <?php
  2. ?>


dodatkowo w xlist.php ustawiasz

  1. <?php
  2. $_SESSION['listek'] = $_GET['listek'];
  3. ?>


natomiast w pokazanym skrypcie daj tym razem

  1. <?php
  2. $select->SelectItem($_SESSION['listek']);
  3. ?>
Unises
Działa Dziekuje Ci bardzo ruszyło exclamation.gif biggrin.gif tzn na ekranie mam liste z załadowanymi wartosciami a po wybraniu wartosci i nacisnieciu przycisku szukaj, wartosc listy pozostaje nie zmieniona i rownoczesnie wendruje do paska adresu strony.

Ponizej zalczam działajacy skrypt


  1. <form action="xlist.php" method="get">
  2. <input type="submit" value="szukaj">



  1. <?php
  2.  
  3.  
  4.  
  5.  ini_set('display_errors',TRUE);
  6.  
  7.  
  8. require('select.php');
  9.  
  10. $_SESSION['listek'] = $_GET['listek'];
  11.  
  12.  
  13. $select = new Select('listek','',' onchange="document.dodaj_transakcje.submit();" ');
  14.  
  15.  
  16.  
  17. $select->AddItem(0,'Wybierz Nazwisko');
  18.  
  19.  
  20.  
  21. $select->SelectItem($_SESSION['listek']);
  22.  
  23.  
  24.  
  25. $conn = mssql_connect('(local)Vex', 'sa', 'as');
  26.  
  27.  
  28.  
  29.  mssql_select_db("Vino", $conn)
  30.  
  31. or die("nie dało się wybrać bazy");
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. $query_s = "select Nazwisko from GRUPA order by Nazwisko";
  40.  
  41.  
  42. $result_s = mssql_query ($query_s);
  43.  
  44. while ($row_s = mssql_fetch_array($result_s))
  45.  
  46. $select->AddItem($row_s['Nazwisko'],$row_s['Nazwisko']);
  47.  
  48.  
  49.  
  50. echo '<td>';
  51.  
  52.  
  53. $select->OutPut();
  54.  
  55.  
  56.  
  57. echo $row_s;
  58.  
  59. echo '</td>';
  60.  
  61.  
  62. ?>


W poniedziałek bedę ten fragment dodawał do całości składającej się z 4 takich list których wartosci mają służyć jako warunek where innego zapytania, jakby cos sie złego działo to sie odezwe w tym wątku.

Jeszcze raz Ci Serdecznie Dziekuje i Pozdrawiam
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.