Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Problem z if i dwoma warunkami
---Szaman---
post 7.06.2012, 11:01:19
Post #1





Goście







Dopiero zaczynam przygodę z PHP i mam problem, na który rozwiązania nie umiem znaleźć, mimo intensywnego przeszukiwania polsko- i anglojęzycznych for. Chodzi mianowicie o zastosowanie "if" w przypadku spełnienia dwóch, lub więcej warunków.

Tak sformułowałem formularz w pliku HTML, wybrałem metodę GET, żeby widzieć co jest przesyłane do pliku php:
Kod
<form method="get" action="kloss.php">
<input type="checkbox" name="bubu" value="bol"> Bolek <br />
<input type="checkbox" name="bubu" value="lol"> Lolek <br />
<input type="checkbox" name="bubu" value="tol"> Tola <br />
<input type="submit" value="GO"><br>
</form>

W przypadku zaznaczenia dwóch pierwszych pól chceckbox do php leci " ?bubu=bol&bubu=lol "
Wpierw spróbowałem interpretować te dane w php: w ten sposób:
Kod
if ($_GET['bubu'] == 'bol' && $_GET['bubu'] == 'lol')
{
echo'Bolek i Lolek.';
}
elseif ($_GET['bubu'] == 'bol' && $_GET['bubu'] != 'lol')
{
echo'sam Bolek.';
}

Pojawił się jednak problem z "widzeniem" przez php drugiego warunku, spróbowałem więc przez zdefiniowanie zmiennych:
Kod
$oni = $_GET['bubu'];
$onb = ($oni == 'bol');
$onl = ($oni == 'lol');
$ont = ($oni == 'tol');

if ($onb && $ont)
{
echo'Bolek i Lolek.';
}
elseif ($onb && !$ont)
{
echo'sam Bolek.';
}

Problem jednak pozostał. Podejrzewam, że ma to związek z tym, że w przypadku użycia danych liczbowych,a nie imion niemożliwe jest, by x=1 i jednocześnie x=2. Nie mam już kompletnie pomysłu jak sobie z tym poradzić i stworzyć php wyświetlające różne wyniki w zależności od tego czy którykolwiek z bohaterów jest zaznaczony w checkbox (czyli zastosowaniu empty lub isset), czy też w przypadku wszelkich możliwych ich kombinacji. Proszę o pomoc.
Go to the top of the page
+Quote Post
konrados
post 7.06.2012, 11:27:01
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


A zauważyłeś, że twoje checkboxy mają identyczną nazwę "bubu"? Jak chcesz je rozróżniać potem w kodzie?
Go to the top of the page
+Quote Post
Tliti
post 7.06.2012, 12:57:50
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2012

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


Ok, już się zalogowałem.
Wielkie dzięki Konrados, wcześniej też próbowałem w chceckboxie dawać różne name, ale musiałem coś namotać i porzuciłem sprawdzanie w tym kierunku.
Teraz to tak wygląda:
Htm
Kod
<form method="get" action="kloss.php">
<input type="checkbox" name="bub1" value="bol"> Bolek <br />
<input type="checkbox" name="bub2" value="lol"> Lolek <br />
<input type="checkbox" name="bub3" value="tol"> Tola <br />
<input type="submit" value="GO"><br>

i php
Kod
if ($_GET['bub1'] == 'bol' && $_GET['bub2'] == 'lol' && $_GET['bub3'] == 'tol')
{
echo'Bolek i Lolek i Tola.';
}
elseif ($_GET['bub1'] == 'bol' && $_GET['bub2'] == 'lol' && $_GET['bub3'] != 'tol')
{
echo'Bolek i Lolek.';
}
elseif ($_GET['bub1'] == 'bol' && $_GET['bub2'] != 'lol' && $_GET['bub3'] != 'tol')
{
echo'sam Bolek.';
}

Problem w tym, że przy zaznaczeniu tylko 'bub1' w checkbox 'bub2' i 'bub3' wyskakuje jako "undefined index". Może zamiast używać != powinienem użyć (empty($_GET['bub2']) ?
Go to the top of the page
+Quote Post
konrados
post 7.06.2012, 13:04:56
Post #4





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

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


Zgadza, możesz użyć empty():

  1. if(!empty($_GET['bub1']))...


Ten post edytował konrados 7.06.2012, 13:05:55
Go to the top of the page
+Quote Post
Tliti
post 7.06.2012, 13:23:01
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 7.06.2012

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


Problem rozwiązany, wystarczyło użyć empty zamiast != i isset zamiast ==
Kod
if (isset($_GET['bub1']) && (isset($_GET['bub2'])) && (isset($_GET['bub3'])))
{
echo'Bolek i Lolek i Tola.';
}
elseif (isset($_GET['bub1']) && (isset($_GET['bub2'])) && (empty($_GET['bub3'])))
{
echo'Bolek i Lolek.';
}
elseif (isset($_GET['bub1']) && (empty($_GET['bub2'])) && (empty($_GET['bub3'])))
{
echo'sam Bolek.';
}

XAMPP nie zgłasza zastrzeżeń smile.gif

I jeszcze pytanie - jeżeli napotkam na jeszcze jakieś trudności w czasie tworzenia wszystkich możliwych odpowiedzi na checkbox w tym kodzie, to lepiej pisać o tym posta tutaj, czy w osobnych tematach ?
Go to the top of the page
+Quote Post
Szymciosek
post 7.06.2012, 13:23:43
Post #6





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


Wg. mnie dopisuj tutaj.
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: 13.06.2025 - 09:14