Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z if i dwoma warunkami
Forum PHP.pl > Forum > Przedszkole
--Szaman--
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.
konrados
A zauważyłeś, że twoje checkboxy mają identyczną nazwę "bubu"? Jak chcesz je rozróżniać potem w kodzie?
Tliti
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']) ?
konrados
Zgadza, możesz użyć empty():

  1. if(!empty($_GET['bub1']))...
Tliti
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 ?
Szymciosek
Wg. mnie dopisuj tutaj.
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.