• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd składni sql w php

Object Storage Arubacloud
0 głosów
303 wizyt
pytanie zadane 23 października 2022 w PHP przez LisekPolska Początkujący (340 p.)

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

1 odpowiedź

+1 głos
odpowiedź 23 października 2022 przez Nudzi mi się Gaduła (4,460 p.)
wybrane 23 października 2022 przez LisekPolska
 
Najlepsza

Znak % powinien znajdować się w apostrofie a nie przed nim i za nim.

 $sql = "SELECT * FROM uczn WHERE imieuczn LIKE '%$nazwuczn%' OR nazwuczn LIKE '%$nazwuczn%' OR klasauczn LIKE '%$klasauczn%'";
  

 

komentarz 23 października 2022 przez LisekPolska Początkujący (340 p.)
Dzięki 2 godziny szukałem błędu kolejne pół pisałem to pytanie a błędem było 6 znaków.
komentarz 23 października 2022 przez Nudzi mi się Gaduła (4,460 p.)
Jest jeszcze błąd przy imieuczn LIKE '%$nazwuczn%'.

Podobne pytania

0 głosów
1 odpowiedź 237 wizyt
pytanie zadane 27 maja 2022 w PHP przez kingkushlee Gaduła (3,960 p.)
0 głosów
1 odpowiedź 2,493 wizyt
pytanie zadane 27 września 2015 w SQL, bazy danych przez wanderer Gaduła (3,710 p.)
–2 głosów
1 odpowiedź 322 wizyt
pytanie zadane 26 września 2019 w SQL, bazy danych przez Wujciorada Nowicjusz (190 p.)

92,555 zapytań

141,404 odpowiedzi

319,559 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...