Piszę program do wyszukiwania uczniów z bazy danych.
W pliku index.php znajduje się formularz w którym wpisuję 4 dane
1. typ TEXT zmienna o nazwie iduczn oznaczająca id ucznia w bazie danych w formacie int(w formacie np.1)
2. typ TEXT o nazwie imieuczn oznaczająca imie ucznia w bazie danych w formacie TEXT(w formacie np.Jan)
3. typ TEXT nazwuczn oznaczające imie ucznia w bazie danych w formacie TEXT(w formacie np.Kowalski)
4.typ TEXT klasauczn oznaczające imie ucznia w bazie danych w formacie TEXT(w formacie np. 7b)
W przypadku gdy podane jest id ucznia program działa prawidłowo.
np.
lub
W przypadku gdy nie ma podanego id ucznia program wyrzuca błąd
Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%''% OR nazwuczn LIKE %''% OR klasauczn LIKE %'7b'%' at line 1 in C:\xampp\htdocs\ksiegarnia\szukaj.php:25 Stack trace: #0 C:\xampp\htdocs\ksiegarnia\szukaj.php(25): mysqli->query('SELECT * FROM u...') #1 {main} thrown in C:\xampp\htdocs\ksiegarnia\szukaj.php on line 25
W przypadku gdy w zapytaniu zamiast
if($iduczn>0){
$sql = "SELECT * FROM uczn WHERE iduczn=$iduczn OR imieuczn='$imieuczn' OR nazwuczn='$nazwuczn' OR klasauczn='$klasauczn'";
}
else {
$sql = "SELECT * FROM uczn WHERE imieuczn LIKE %'$nazwuczn'% OR nazwuczn LIKE %'$nazwuczn'% OR klasauczn LIKE %'$klasauczn'%";
}
było
if($iduczn>0){
$sql = "SELECT * FROM uczn WHERE iduczn=$iduczn OR imieuczn='$imieuczn' OR nazwuczn='$nazwuczn' OR klasauczn='$klasauczn'";
}
else {
$sql = "SELECT * FROM uczn WHERE imieuczn='$nazwuczn' OR nazwuczn='$nazwuczn' OR klasauczn='$klasauczn'";
}
program nie wyrzucał powyższego błędu lecz nie wykrywał podanych danych w bazie danych (podawałem w formularzu imię ucznia np. Jan które znajdowało się w bazie danych jednak program wyświetlił mi brak osoby w bazie danych (tak zaprogramowałem gdy nie można odnaleźć danych w bazie danych, jednak iż gdy podam id ucznia owa informacja mi nie wyskakuje i program działa prawidłowo więc skrypt na brak osób w bazie działa prawidłowo)
Nie wiem jak wysłać prawidłowe zapytanie w przypadku gdy w formularzu nie ma podanego id ucznia (else do wyżej wysłanego ifa)
a o to cały kod pliku szukaj.php z którym jest problem
<?php
session_start();
require_once"connect.php";
$polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
if($polaczenie->connect_errno!=0)
{
echo"Error ".$polaczenie->connect_errno;
}
else
{
$iduczn = $_POST['iduczn']; //wejście TEXT(występują tylko cyferki)
$imieuczn = $_POST['imieuczn']; //wejście TEXT z formualrza (w formacie np. Jan)
$nazwuczn = $_POST['nazwuczn']; //TEXT z formualrza(w formacie np. Kowalski)
$klasauczn = $_POST['klasauczn']; //TEXT z formularza(w formacie np.7b)
if($iduczn>0){
$sql = "SELECT * FROM uczn WHERE iduczn=$iduczn OR imieuczn='$imieuczn' OR nazwuczn='$nazwuczn' OR klasauczn='$klasauczn'";
}
else {
$sql = "SELECT * FROM uczn WHERE imieuczn LIKE %'$nazwuczn'% OR nazwuczn LIKE %'$nazwuczn'% OR klasauczn LIKE %'$klasauczn'%";
}
if ($rezultat = $polaczenie->query($sql))
{
$ilu_user = $rezultat->num_rows;
if($ilu_user>0)
{
$wiersz = $rezultat->fetch_assoc();
echo "<p>".$wiersz['iduczn']."</p>";
echo "<p>".$wiersz['imieuczn']."</p>";
echo "<p>".$wiersz['nazwuczn']."</p>";
echo "<p>".$wiersz['klasauczn']."</p>";
unset($_SESSION['blad']);
$rezultat->free_result();
}
else {
$_SESSION['blad'] = '<span style="color:red">Brak osoby w bazie danych</span>';
header('Location:index.php');
}
}
$polaczenie->close();
}
?>
Formularz znajduje się w pliku index.php lecz z nim nie ma problemu i działa prawidłowo i przesyła dane jak wyżej opisano w postaci POST (jak w poradniku na yt na kanale pasja informatyki lecz ma inne pola i przesyła inne dane pod innymi nazwami)
<?php
session_start();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Biblioteka</title>
</head>
<body>
Wyszukaj ucznia:
<form action="szukaj.php" method="post">
Id ucznia: <br/> <input type="text" name = "iduczn"/><br/>
Imie ucznia: <br/> <input type="text" name = "imieuczn"/><br/>
Nazwisko ucznia: <br/> <input type="text" name = "nazwuczn"/><br/>
klasa ucznia: <br/> <input type="text" name = "klasauczn"/><br/><br/>
<input type="submit" value="Szukaj" />
</form>
<?php
if(isset($_SESSION['blad'])){
echo $_SESSION['blad'];
}
?>
</body>
</html>
baza danych również prawidłowo działa i posiada dane jak wyżej opisano wykonano ją również jak w poradniku na yt lecz z innymi danymi.
Mam nadzieje że ktoś pomoże w moim problemie z składnią w zapytaniu sql i podane informacje starczą jeśli nie mogę podesłać więcej informacji na temat problemu tylko muszę wiedzieć jakie