Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select
Forum PHP.pl > Forum > Przedszkole
roman_g
Witam!

potrzebuje zrobic cos podobnego jak na tej stronie: http://ustaw.orange.pl
Na jednej stronie musze miec dwie listy wyboru (SELECT) z tymi samymi wartościami, z tym, że jak w pierwszej liście wybiorę wartość "a" to chciałbym żeby automatycznie w drugiej liście ona "znikła" i nie była możliwa do wyboru.
Np
Załóży, że SELECT1 wygląda tak:
a
b
c
d
SELECT2 tak:
a
b
c
d

Wybieram z SELECT1 opcje "a" i w SELECT2 mam juz dostępne tylko opcje:
b
c
d


Jak to zrobic??

pomocy....winksmiley.jpg
w3b
Ma to sie dziac na tej samej stronie, czy select2 jest na innej?

Zaraz lece do lekarza ale jak wroce to postaram sie cos skodzic:)smile.gif pozdrawiam
roman_g
SELECT2 jest na tej samej stronie co SELECT1

Kod
<form action="combo.php" method="POST">
Z
  <select name"zrodlo" style="width: 150px;">
    <option value=1>Warszawa</option>
    <option>Krakow</option>
    <option>Lodz</option>
  </select>
  do
  <select name"cel" style="width: 150px;">
    <option value=1>Warszawa</option>
    <option>Krakow</option>
    <option>Lodz</option>
    </select>
  <input type="submit" value="Pokaz trase">
</form>

Tylko, że ten kod MA WADE! a mianowicie mozna wybrać w obu SELECT'ach np "Warszawa", wg tego co mam zaplanowane zrobic będzie mi pokazywlo trase z Warszawy do Warszawy - czyli bezsensu... Chciałbym takich sytuacji uniknąć i dlatego w drugim selekcie musi zniknąć ta opcja, ktora zostala wybrana w pierwszym (i na odwrót).

Wykombinowałem jak to zrobić, ale w delphi - niestety nie potrafie przetlumaczyc tego na php:( Kod z delphi nizej
Kod
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Button1: TButton;
    Label1: TLabel;
    procedure ComboBox1Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  x,y,z: string;
  l,k: integer;

implementation

{$R *.dfm}

procedure TForm1.ComboBox1Change(Sender: TObject);
begin

If x<>'' then combobox2.Items.Insert(l,x);
if combobox1.Text='Warszawa' then
  begin
  combobox2.Items.Delete(0);
  x:='Warszawa';
  l:=0;
  end;
if combobox1.Text='Krakow' then
  begin
  combobox2.Items.Delete(1);
  x:='Krakow';
  l:=1;
  end;
if combobox1.Text='Lodz' then
  begin
  combobox2.Items.Delete(2);
  x:='Lodz';
  l:=2;
  end;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
If z<>'' then combobox1.Items.Insert(k,z);
if combobox2.Text='Warszawa' then
  begin
  combobox1.Items.Delete(0);
  z:='Warszawa';
  k:=0;
  end;
if combobox2.Text='Krakow' then
  begin
  combobox1.Items.Delete(1);
  z:='Krakow';
  k:=1;
  end;
if combobox2.Text='Lodz' then
  begin
  combobox1.Items.Delete(2);
  z:='Lodz';
  k:=2;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  y:=combobox1.Text+combobox2.Text;
  label1.Caption:=y;
end;


end.


pomoże ktos....?winksmiley.jpg
artur81
Ok dla testów napisałem ci taki kod korzystający z bazy danych, ajaxa i php. Może ci się przyda a jak nie to chociaż popatrz jak działa, może wyciagniesz jakieś wnioski:
Pliki:
index.php - Główny plik
blokuj.php - Plik odpowiedzialny za generowanie drugiej listy, to z nim się łączymy za pomocą ajaxa
polacz_z_baza.php - Parametry do połączenia z bazą.

index.php
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  5. <title>Formularze</title>
  6. <script type="text/javascript" src="advajax.js"></script>
  7. <script type="text/javascript">
  8. function blokuj(id)
  9. {
  10. var adres = "blokuj.php?id="+id;
  11. advAJAX.get({
  12. url: adres,
  13. onLoading:function(obj) {document.getElementById("lista2").innerHTML='<img src="loading.gif" />'; },
  14. onSuccess:function(obj) { document.getElementById("lista2").innerHTML=obj.responseText; },
  15. onError:function(obj) {alert(obj.responseText); }
  16. });
  17. }
  18.  
  19. </script>
  20. </head>
  21.  
  22. <body>
  23. <form action="" method="">
  24. <div id="lista1">
  25. <select name ="lista1" onchange="blokuj(this.value);">
  26. <?php 
  27. require_once('polacz_z_baza.php');
  28. $wynik = mysql_query("Select * from miasta;");
  29. while ($r = mysql_fetch_assoc($wynik)) {
  30. $id=$r['id'];
  31. $nazwa=$r['nazwa'];
  32. echo '<option value='.$id.'>'.$nazwa.'</option>';
  33. }
  34. ?>
  35. </select></div>
  36. <div id="lista2">
  37. <select name ="lista2">
  38. <?php 
  39. require_once('polacz_z_baza.php');
  40. $wynik = mysql_query("Select * from miasta;");
  41. while ($r = mysql_fetch_assoc($wynik)) {
  42. $id=$r['id'];
  43. $nazwa=$r['nazwa'];
  44. echo '<option value='.$id.'>'.$nazwa.'</option>';
  45. }
  46. ?>
  47. </select>
  48. </div>
  49. </form>
  50. </body>
  51. </html>


blokuj.php
  1. <?php 
  2. header('Content-Type: text/html; charset=ISO-8859-2');
  3. $id=(int)$_GET['id'];
  4. require_once('polacz_z_baza.php');
  5. $wynik = mysql_query("Select * from miasta where id not in ($id);");
  6. echo '<select name="lista2">';
  7. while ($r = mysql_fetch_assoc($wynik)) {
  8. $id=$r['id'];
  9. $nazwa=$r['nazwa'];
  10.  
  11. echo '<option value='.$id.'>'.$nazwa.'</option>';
  12. }
  13. echo '</select>';
  14. ?>


polacz_z_baza.php
  1. <?php
  2. //Umieszczam w stałych informacje potrzebne do połączenia z bazą
  3. // te dane będziesz musiał sobie pozmieniać tak abu odpowiadały Twoim
  4. DEFINE ('DB_USER','root');
  5. DEFINE ('DB_PASSWORD','');
  6. DEFINE ('DB_HOST','localhost');
  7. DEFINE ('DB_NAME','selecty');
  8.  
  9. mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR
  10. die ("Nie można nawiązać połączenia z serwerem bazy danych MySQL");
  11. mysql_select_db (DB_NAME) OR
  12. die ("Nie można otworzyć bazy selecty");
  13. ?>


i baza danych, a właściwie tabela przechowująca nazwy miast
miasta.sql
  1. # Baza danych : `selecty`
  2. #
  3.  
  4. # --------------------------------------------------------
  5.  
  6. #
  7. # Struktura tabeli dla `miasta`
  8. #
  9.  
  10. CREATE TABLE `miasta` (
  11. `id` tinyint(4) NOT NULL AUTO_INCREMENT,
  12. `nazwa` tinytext NOT NULL,
  13. PRIMARY KEY (`id`)
  14. ) TYPE=MyISAM AUTO_INCREMENT=8 ;
  15.  
  16. #
  17. # Zrzut danych tabeli `miasta`
  18. #
  19.  
  20. INSERT INTO `miasta` VALUES (1, 'Łódź');
  21. INSERT INTO `miasta` VALUES (2, 'Warszawa');
  22. INSERT INTO `miasta` VALUES (3, 'Gdańsk');
  23. INSERT INTO `miasta` VALUES (4, 'Gdynia');
  24. INSERT INTO `miasta` VALUES (5, 'Skierniewice');
  25. INSERT INTO `miasta` VALUES (6, 'Wałbrzych');

no i do tego będzie potrzebna ci jeszcze biblioteka advAJAX autorstwa Anakina, aby włączyć funkcjonalność ajaxa.
Wszystkie potrzebne pliki leżą tutaj
Forum pododawało znaki / przed cudzysłowiami więc trzeba poprawić, a pliku .rar jest wszystko ok.
Sprawdzałem na IE 6.0 i FF 1.5.0.6
Gerwazy2010
smile.gif dzięki! oto chodziło.
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.