Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nieaktywne lub aktywne pole wyboru - Select
18Pawel18
post
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Mam problem z aktywnym, bądź nieaktywnym polem SELECT.

W bazie danych mam wpisane państwa i chcę aby po wybraniu Polski był dostępny SELECT z województwami czyli możliwość wybrania województwa, a po wybraniu innej opcji (innego państwa) zablokowany wybór (z logicznych przyczyn).

Próbowałem dodać przed SELECT-em z województwami: if($wojewodztwo['id'] == 135) ?> ale nie działało. W czym jest problem??

Całość:

Baza danych MySql:

Kod
CREATE TABLE IF NOT EXISTS `panstwo` (
  `id` int(10) unsigned NOT NULL,
  `nazwa` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Zrzut danych tabeli `panstwa`
--

INSERT INTO `panstwo` (`id`, `nazwa`) VALUES
(1, 'Afganistan'),
(2, 'Albania'),
(3, 'Algieria'),
(4, 'Andora'),
(5, 'Angola'),
(6, 'Antigua i Barbuda'),
(7, 'Arabia Saudyjska'),
.....
(165, 'Zumbia');


Docelowy plik PHP:

Kod
<select name="panstwo" id="panstwo">
            <option value="0">Wybierz państwo</option>
            <?php
            
            
            //pobranie listy państw
            $panstwa = pobierzPanstwa();

            if(isset($_POST['panstwo'])) $panstwSel = $_POST['panstwo']; else $panstwSel = '0';
            ?>
            <?php foreach($panstwa as $panstwo): ?>
                <option value="<?php echo $panstwo['id']; ?>" <?php if($panstwo['id'] == $panstwSel) echo 'selected'; ?>><?php echo $panstwo['nazwa']; ?></option>
            <?php endforeach; ?>

        </select>


Kod
<select name="wojewodztwo" id="wojewodztwo">
            <option value="0">Wybierz województwo</option>
            <?php
            
            
            //pobranie listy wojewodztw
            $wojewodztwa = pobierzWojewodztwa();

            if(isset($_POST['wojewodztwo'])) $wojewSel = $_POST['wojewodztwo']; else $wojewSel = '0';
            ?>
            <?php foreach($wojewodztwa as $wojewodztwo): ?>
                <option value="<?php echo $wojewodztwo['id']; ?>" <?php if($wojewodztwo['id'] == $wojewSel) echo 'selected'; ?>><?php echo $wojewodztwo['nazwa']; ?></option>
            <?php endforeach; ?>

        </select>


Znalazłem też takie rozwiązanie(przykład):

Kod
<html>
<head>
    <script language="javascript">
    
    function test()
    {
    var wartosc_pola_xyz;
    var tekst=document.getElementById('abc');
    
    wartosc_pola_xyz = document.getElementById('xyz').value;
    
    if(wartosc_pola_xyz=='0')
    {
    tekst.value="opcja niedostępna";
    document.getElementById('abc').disabled=true;
    }
    
    if(wartosc_pola_xyz=='1')
    {
    tekst.value="opcja niedostępna";
    document.getElementById('abc').disabled=true;
    }
    
    if(wartosc_pola_xyz=='2')
    {
    tekst.value="";
    document.getElementById('abc').disabled=false;
    }
    }
    </script>
</head>
<body>

    <FORM>
    <select name="xyz" id="xyz" onChange="test()">
    <option value=0 selected></option>
    <option value=1>opcja 1</option>
    <option value=2>opcja 2</option>
    </select>
    <input type="text" name="abc" id="abc" disabled value="opcja niedostępna">
    </form>
    

</body>
</html>


ale zabardzo też mi to nie działało.

Co tam można zmienić żeby to zadziałało?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
valkirek
post
Post #2





Grupa: Zarejestrowani
Postów: 117
Pomógł: 6
Dołączył: 24.07.2013

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


Dobrze kombinujesz ale skoro chcesz wylaczyc wojewodztwo to musisz sprawdzac pole panstwo czyli w select wojewodztwo dajesz:
  1. if(isset($_POST['panstwo']) && $_POST['panstwo']==135) { echo 'disabled'; } //wylacz pole gdy istnieje post z id polski


dodatkowo wylacz live przez js:
  1. $("#panstwo").change(function() { //po zmianie
  2. var panstwo = $("#panstwo").val(); //pobierasz value
  3.  
  4. if(panstwo != 135) //rozne od polski
  5. {
  6. $("select#wojewodztwo").attr("disabled","disabled"); //to wylacz
  7. } else {
  8. $("select#wojewodztwo").removeAttr("disabled"); //else wlacz
  9. }
  10. });


Zakladajac, ze 135 to id polski z bazy takie cos powinno dzialac, dodaj oczywiscie id #panstwo i #wojewodztwo do selectow
Go to the top of the page
+Quote Post
18Pawel18
post
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Zrobiłem dokładnie jak mówiłeś i nic. Jeśli nie wiesz o co może chodzić to mogę wrzucić przykład na serwer i wtedy konkretnie w kodzie i działaniu zobaczysz.

Kod
<script type="text/javascript">

    $("#panstwo").change(function() { //po zmianie
    var panstwo = $("#panstwo").val(); //pobierasz value
    
    if(panstwo != 135) //rozne od polski
    {
    $("select#wojewodztwo").attr("disabled","disabled"); //to wylacz
    } else {
    $("select#wojewodztwo").removeAttr("disabled"); //else wlacz
    }
    });
</script>


Kod
<select name="panstwo" id="panstwo" >
            <option value="0">Wybierz państwo</option>
            <?php
            
            
            //pobranie listy państw
            $panstwa = pobierzPanstwa();

            if(isset($_POST['panstwo'])) $panstwSel = $_POST['panstwo']; else $panstwSel = '0';
            ?>
            <?php foreach($panstwa as $panstwo): ?>
                <option value="<?php echo $panstwo['id']; ?>" <?php if($panstwo['id'] == $panstwSel) echo 'selected'; ?>><?php echo $panstwo['nazwa']; ?></option>
            <?php endforeach; ?>

        </select>


Kod
<select name="wojewodztwo" id="wojewodztwo" <?php if(isset($_POST['panstwo']) && $_POST['panstwo']==135) { echo 'disabled'; }//wylacz pole gdy istnieje post z id polski ?>>
            <option value="0">Wybierz województwo</option>
            <?php
            
            
            //pobranie listy wojewodztw
            $wojewodztwa = pobierzWojewodztwa();

            if(isset($_POST['wojewodztwo'])) $wojewSel = $_POST['wojewodztwo']; else $wojewSel = '0';
            ?>
            <?php foreach($wojewodztwa as $wojewodztwo): ?>
                <option value="<?php echo $wojewodztwo['id']; ?>" <?php if($wojewodztwo['id'] == $wojewSel) echo 'selected'; ?>><?php echo $wojewodztwo['nazwa']; ?></option>
            <?php endforeach; ?>

        </select>
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




&& $_POST['panstwo']==135
No tu to ma byc raczej && $_POST['panstwo']!=135
przeciez disabled robisz dla roznych od Polski a nie dla Polski


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post
Post #5





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Link do tego z czym jest problem:

http://testowa123.pusku.com/test.php

Dostęp do ftp-a:

Nazwa hosta: testowa123.pusku.com
Użytkownik: u401008114
Hasło: test100

Baza danych wygląda tak:

Kod
CREATE TABLE IF NOT EXISTS `panstwo` (
  `id` int(10) unsigned NOT NULL,
  `nazwa` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Zrzut danych tabeli `panstwa`
--

INSERT INTO `panstwo` (`id`, `nazwa`) VALUES
(1, 'Afganistan'),
(2, 'Albania'),
(3, 'Algieria'),
(4, 'Andora'),
(5, 'Angola'),
(6, 'Antigua i Barbuda'),
(7, 'Arabia Saudyjska'),
(8, 'Argentyna'),
(9, 'Armenia'),
(10, 'Australia'),
(11, 'Austria'),
(12, 'Azerbejdżan'),
(13, 'Bahamy'),

......................

(134, 'Peru'),
(135, 'Polska'),
(136, 'Portugalia'),
(137, 'Republika Południowej Afryki'),
(138, 'Republika Środkowoafrykańska'),
(139, 'Republika Zielonego Przylądka'),
(140, 'Rosja'),
(141, 'Rumunia'),
(142, 'Rwanda'),
(143, 'Saint Kitts i Nevis'),
(144, 'Saint Lucia'),
(145, 'Saint Vincent i Grenadyny'),
(146, 'Salwador'),
(147, 'Samoa'),
(148, 'San Marino'),
(149, 'Senegal'),
(150, 'Serbia'),
(151, 'Seszele'),
(152, 'Sierra Leone'),
(153, 'Singapur'),
(154, 'Słowacja'),
(155, 'Słowenia'),
(156, 'Somalia'),
(157, 'Sri Lanka'),
(158, 'Stany Zjednoczone'),
(159, 'Suazi'),
(160, 'Sudan'),
(161, 'Sudan Południowy'),
(162, 'Surinam'),
(163, 'Syria'),
(164, 'Szwajcaria'),
(165, 'Szwecja'),
(166, 'Tadżykistan'),
(167, 'Tajlandia'),
(168, 'Tanzania'),
(169, 'Timor Wschodni'),
(170, 'Togo'),
(171, 'Tonga'),
(172, 'Trynidad i Tobago'),
(173, 'Tunezja'),
(174, 'Turcja'),
(175, 'Turkmenistan'),
(176, 'Tuvalu'),
(177, 'Uganda'),
(178, 'Ukraina'),
(179, 'Urugwaj'),
(180, 'Uzbekistan'),
(181, 'Vanuatu'),
(182, 'Watykan'),
(183, 'Wenezuela'),
(184, 'Węgry'),
(185, 'Wielka Brytania'),
(186, 'Wietnam'),
(187, 'Włochy'),
(188, 'Wybrzeże Kości Słoniowej'),
(189, 'Wyspy Marshalla'),
(190, 'Wyspy Salomona'),
(191, 'Wyspy Świętego Tomasza i Książęca'),
(192, 'Zambia'),
(193, 'Zimbabwe'),
(194, 'Zjednoczone Emiraty Arabskie');

CREATE TABLE `wojewodztwa` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `nazwa` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 AUTO_INCREMENT=19;

--
-- Zrzut danych tabeli `wojewodztwa`
--

INSERT INTO `wojewodztwa` VALUES (1, 'wielkopolskie');
INSERT INTO `wojewodztwa` VALUES (2, 'zachodnio-pomorskie');
INSERT INTO `wojewodztwa` VALUES (3, 'dolnośląskie');
INSERT INTO `wojewodztwa` VALUES (4, 'kujawsko-pomorskie');
INSERT INTO `wojewodztwa` VALUES (5, 'lubelskie');
INSERT INTO `wojewodztwa` VALUES (6, 'lubuskie');
INSERT INTO `wojewodztwa` VALUES (7, 'łódzkie');
INSERT INTO `wojewodztwa` VALUES (8, 'małopolskie');
INSERT INTO `wojewodztwa` VALUES (9, 'mazowieckie');
INSERT INTO `wojewodztwa` VALUES (10, 'opolskie');
INSERT INTO `wojewodztwa` VALUES (11, 'podkarpackie');
INSERT INTO `wojewodztwa` VALUES (12, 'podlaskie');
INSERT INTO `wojewodztwa` VALUES (13, 'pomorskie');
INSERT INTO `wojewodztwa` VALUES (14, 'śląskie');
INSERT INTO `wojewodztwa` VALUES (15, 'świętokrzyskie');
INSERT INTO `wojewodztwa` VALUES (16, 'warmińsko-mazurskie');
INSERT INTO `wojewodztwa` VALUES (17, 'wielkopolskie');
INSERT INTO `wojewodztwa` VALUES (18, 'zachodnio-pomorskie');

Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra, ale o to:
$("#panstwo").change(function()
masz wywolac dopiero po utworzeniu pola panstwo a nie przed...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Nie kumam o co chodzi. Zmienisz mi to na serwerze już?
Go to the top of the page
+Quote Post
valkirek
post
Post #8





Grupa: Zarejestrowani
Postów: 117
Pomógł: 6
Dołączył: 24.07.2013

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


Nie zartuj sobie, w konsoli js jak byk masz blad. Nie widzisz , ze masz 2 razy <script type="text/javascript"> i 2 razy </script> ?

Wystarczy troche wysilku bo dostales praktycznie gotowca
Go to the top of the page
+Quote Post
18Pawel18
post
Post #9





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Widziałem, już dawno to zmieniłem. Przy przenoszeniu źle wkleiłem.
Go to the top of the page
+Quote Post
valkirek
post
Post #10





Grupa: Zarejestrowani
Postów: 117
Pomógł: 6
Dołączył: 24.07.2013

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


No ale zeby jquery dzialalo to musisz jeszcze dac linka do jquery ech np w head na poczatku
  1. <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>


nie wiem teraz jaki byl link do najnowszej wersji zawsze ale ten powinien dzialac

Ten post edytował valkirek 25.07.2013, 18:19:52
Go to the top of the page
+Quote Post
18Pawel18
post
Post #11





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Wszystko zmieniłem jak mowiłeś. Logicznie patrząc wszystko powinno już działać, ale nie działa.

Zastanawiam się nad tym fragmentem, czy jest dobry:

Kod
<select name="wojewodztwo" id="wojewodztwo" <?php if(isset($_POST['panstwo']) && $_POST['panstwo']!=135) { echo 'disabled'; }//wylacz pole gdy istnieje post z id polski ?>>
            <option value="0">Wybierz województwo</option>
            <?php
Go to the top of the page
+Quote Post
valkirek
post
Post #12





Grupa: Zarejestrowani
Postów: 117
Pomógł: 6
Dołączył: 24.07.2013

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


Nie jest dobrze:/ pomysl masz ten select z wojewodztwami wylaczyc gdy panstwo to polska czyli ma byc
  1. $_POST['panstwo']==135


Po drugie jak ma dzialac $_POST skoro nie masz submit?
Go to the top of the page
+Quote Post
18Pawel18
post
Post #13





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Cytat(nospor @ 25.07.2013, 17:32:25 ) *
&& $_POST['panstwo']==135
No tu to ma byc raczej && $_POST['panstwo']!=135
przeciez disabled robisz dla roznych od Polski a nie dla Polski


Tak wcześniej gość napisał, więc już nie wiem jak powinno byc poprawnie.


Jeśli panstwo nie jest równe Polsce czyli id 135 to blokuje select. Więc jest dobrze.
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
pomysl masz ten select z wojewodztwami wylaczyc gdy panstwo to polska czyli ma byc
Co ty bredzisz..... ma wylaczyc gddy panstwo to nie Polska....wkoncu wojewodztwa ma dla Polski a nie dla nie Polski....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post
Post #15





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Widzi ktoś w czym jest problem??
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Napisalem ci przeciez wyraznie....o to:
<script type="text/javascript">

$("#panstwo").change(function() { //po zmianie
var panstwo = $("#panstwo").val(); //pobierasz value

if(panstwo != 135) //rozne od polski
{
$("select#wojewodztwo").attr("disabled","disabled"); //to wylacz
} else {
$("select#wojewodztwo").removeAttr("disabled"); //else wlacz
}
});

</script>

ma byc po utworzeniu pol a nie przed. Czyli masz to przeniesc na sam dol, juz po utworzeniu pol a bedzie dzialac. Tu naprawde nie ma nic trudnego, tylko ttrzeba chciec pomyslec a nie lenia miec.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post
Post #17





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Wybacz, jest ok. Dzieki za pomoc.

Zrobiłem jeszcze coś takiego do walidacji pól:

Kod
<script type="text/javascript">

function validateForm(){

if($("#wojewodztwo").next().attr('class') == 'error') $("#wojewodztwo").next().remove();

if(($("#wojewodztwo option:selected").val() == '0')) $("#wojewodzwto").after('<div class="error">Wybierz województwo</div>');

      var iloscBledow = $('.error').length;
        if(iloscBledow > 0)return false;
        else return true;
    }

</script>


Jak mam to ugryźć, żeby przeszło walidację jak wybiorę inne państwo niż Polska?

Zrobiłem tak, ale nie chwyta:

Kod
if(($("#wojewodztwo option:selected").val() == '0') || ($("#panstwo option:selected").val() == '135')) $("#wojewodztwo").after('<div class="error">Wybierz województwo</div>');

Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale jak ma chwytac? Podpiales to pod wyslanie formularza? Bo nie widze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
18Pawel18
post
Post #19





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 1.02.2010

Ostrzeżenie: (10%)
X----


Tak, wszystko jest podpięte i działa, wkleiłem tylko fragment, który odpowiada za walidację województw. Ale chodzi o to że chce to tak przerobić, żeby wyświetlało błąd gdy jest wybrane państwo Polska, a nie wybrane województwo, a nie wyświetlało błędu jak inne Państwo i nie trzeba wybierać województwa.

Ten post edytował 18Pawel18 26.07.2013, 09:44:41
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to pokaz jak wyglada podpieta calosc, bo w linku co podales nie ma nic podpietego.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 21.08.2025 - 14:38