Nie działający warunek

0

Witam tworzę prostą wyszukiwarkę danych. Docelowo formularz ma 3 miejsca. Chciałbym aby docelowo można było wyszukiwać wypełniając oba pola imputtext lub tylko jedno. (Radio zawsze będzie zaznaczone). Warunek zaczynający się od 43 linijki wydaje mi się dobrze napisany ale niestety nie działa. W takiej formie działa tylko wyszukiwanie po obu imputach przy podawaniu tylko jednego niczego nie wyszukuje.. za wszelką pomoc dziękuje

Zapytania do SQL są dobrze napisane sprawdzałem je w phpmyadmin
Oba działają jeśli zostawiam jedno z nich w kodzie

<html lang="pl">
<head>
	<meta charset="utf-8">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
	<title>Wyszukiwarka szkoleń</title>
</head>
	<body>
		<img src="1.png"> </br></br>
		<h1>Wyszukiwarka szkoleń</h1>
		<form method="post">
			Stopień kursu:*
			<input type="radio" name="stopien" value="1">1
			<input type="radio" name="stopien" value="2">2
			<input type="radio" name="stopien" value="3">3<br><br>
			
			Zawód:  <input type ="text" name="zawod"/> </br></br>
			Miejscowość: <input type ="text" name="miejscowosc"/> </br></br>
			<input type ="submit" value ="Wyszukaj"/> <input type="reset" value="Wyczyść" />		
		</form>
			
		
		<?php
			ini_set('display_errors','Off');
			$stopien = $_POST['stopien'];
			$zawod = $_POST['zawod'];
			$miejscowosc = $_POST['miejscowosc'];
			$conn = new mysqli("localhost","root","","wyszukiwarka") or die ("Error");
			$conn-> query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
			
			echo "<table border='1' width='100%' cellpadding='10'><tr>
			<td width='1%'>Stopień</td>
			<td width='20%'>Szkoła</td>
			<td width='6%'>Miejscowość</td>
			<td width='10%'>Zawód</td>
			<td width='5%'>Symbol_zawodu</td>
			<td width='5%'>Symbol_kwalifikacji</td>
			<td width='6%'>Start</td>
			<td width='6%'>Koniec</td>
			<td width='2%'>Ilosc_Miejsc</td>
			<td width='30%'>Adres</td>
			<td>Zakład</td>
			</tr>";
			
		
			$zapytanieOR ="Select Stopien,Szkola,Miejscowosc,Zawod,Symbol_zawodu,Symbol_kwalifikacji,Start,Koniec,Ilosc_Miejsc,Adres,Zaklad 
			FROM szkolenia 
			WHERE szkolenia.Stopien='$stopien' AND (szkolenia.Zawod='$zawod' OR szkolenia.Miejscowosc='$miejscowosc')";
			
			$zapytanieAND ="Select Stopien,Szkola,Miejscowosc,Zawod,Symbol_zawodu,Symbol_kwalifikacji,Start,Koniec,Ilosc_Miejsc,Adres,Zaklad 
			FROM szkolenia 
			WHERE szkolenia.Stopien='$stopien' AND szkolenia.Zawod='$zawod' AND szkolenia.Miejscowosc='$miejscowosc'";
			
			if((isset($_POST['zawod'])) && (isset($_POST['miejscowosc']))){
				$wynik = $conn->query($zapytanieAND);
			}elseif((isset($_POST['zawod'])) || (isset($_POST['miejscowosc']))){
				$wynik = $conn->query($zapytanieOR);
			}
			
			while($wiersz=$wynik->fetch_assoc()) {
			echo "<table border='1' width='100%' cellpadding='10'><tr>
			<td width='1%'>". $wiersz['Stopien'] ."</td>
			<td width='20%'> ". $wiersz['Szkola'] ."</td>
			<td width='6%'> ". $wiersz['Miejscowosc']."</td>
			<td width='10%' >". $wiersz['Zawod']."</td>
			<td width='5%'> ". $wiersz['Symbol_zawodu']."</td>
			<td width='5%'> ". $wiersz['Symbol_kwalifikacji']."</td>
			<td width='6%'> ".$wiersz['Start']."</td>
			<td width='6%'> ".$wiersz['Koniec']."</td>
			<td width='2%'> ".$wiersz['Ilosc_Miejsc']."</td>
			<td width='30%'> ".$wiersz['Adres']."</td>
			<td> ".$wiersz['Zaklad']."<br></tr></table>" ;}
			
			unset($stopien);
			unset($zawod);
			unset($miejscowosc);
			unset($conn);
		?>
	</body>
</html>

1

Nie znam się dobrze na SQL i nie do końca wiem dlaczego Twoje zapytanie nie działa ale możesz spróbować połączyć 2 podzapytania przy pomocy UNION i wyciąć powtórki przy pomocy DISTINCT.

Jedno zapytanie będzie mieć radio i 1 pole, a drugie radio i 2 pole.

Pozdrawiam
M.

Ps.

Z tego co czytam nawet nie trzeba używać DISTINCT

1

A co jest w zmiennej $wynik zaraz za warunkiem? Sprawdzałeś przez którego "ifa" przechodzi program w zależności od wyboru?

1

Tak jak zauważył kolega wyzej:

W if sprawdzasz czy pola są isset a nie czy są puste. Tu jest błąd.

Trzeba do 1 ifa dodać

if((isset($_POST['zawod'])) && (isset($_POST['miejscowosc'])) && ($_POST['zawod'] != '') && ($_POST['miejscowosc'] != '')){
    $wynik = $conn->query($zapytanieAND);
}elseif((isset($_POST['zawod'])) || (isset($_POST['miejscowosc']))){
    $wynik = $conn->query($zapytanieOR);
}
0

Dzięki za pomoc, musiałem jeszcze poprawić zapytanie ale już działa poprawnie.
Rozumiem faktycznie nie wziąłem pod uwagę tego że isset sprawdza tylko czy dana zmienna istnieje a nie czy jest pusta ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1