Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQLite][PHP]wyszukiwanie rekordów
redelek
post 17.06.2020, 14:41:26
Post #1





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Dzień dobry,

Nie umiem sobie poradzić z takim problemem. Użytkownik wprowadza dwa numery w dwa pola dz_number i license_number. Jeśli znajdzie skrypt taką DZ to sprawdza czy license_number numer jest prawidłowy i odwrotnie.
Do różnych dz_number mogą być przypisane te same numery license_number. I mam problem, bo nie mogę tematu ugryźć. Programista ze mnie okazjonalny, więc wybaczcie proszę.

  1. $db = new MyDB();
  2.  
  3. $res = $db->query('SELECT * FROM `lic_view` WHERE license_number = '.$f_licens.' AND dz_number LIKE'.$f_dz.'');
  4.  
  5. if ($res) {
  6. echo '<table class="tab_add"><tr><td>DZ number</td><td>File name</td><td>File path</td><td>Date add</td></tr>';
  7. while ($row = $res->fetchArray()) {
  8. echo "
  9. <tr>
  10. <td>".$row['dz_number']."</td>
  11. <td>".$row['fname']."</td>
  12. <td>".$row['fpath']."</td>
  13. <td>".$row['dtadd']."</td>
  14.  
  15. </tr>
  16. ";
  17.  
  18.  
  19. }
  20. } else {
  21. echo "WARRNING: No record found in the database";
  22. }

Problem jest w tym, że jeśli ktoś wpisze prawidłowy DZ , a numer license_number nie ma dostaję pustą tabelę a nie komunikat, że rekordu nie znaleziono. Tak samo w drugą stronę jeśli DZ nie ma w bazie a jest license_number dostaję pustą tabelę.
Jak wpiszę dwa numery poprawnie dostaję odpowiednie rekordy, tylko nie mogę poradzić sobie z tym, że jednego numeru nie ma (nie jest pusty tylko ma inny numer, niż ten co przypisałem w DZ.
Zapytanie $res zawsze zwraca mi 1 i nie wiem czy to zapytanie jest źle zrobione czy ten if do sprawdzania.

dzięki za pomoc lub wskazówkę, przepraszam jeśli temat wydaje się błahy, chcę sobie ułatwić pracę i nie wysyłać tony email z numerami.


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 17.06.2020, 14:54:56
Post #2





Grupa: Moderatorzy
Postów: 36 454
Pomógł: 6292
Dołączył: 27.12.2004




qeuery zawsze zwraca resourse, nawet jak nei ma rekordow. Masz tam FALSE tylko wtedy gdy zapytanie sie nie powiedzie

Musisz wiec sprawdzic ile rekordow zwroca twoje resource. Niestety nie wiem jak wyglada twoja klasa MyDB wiec to juz sam sobie zrob


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 18.06.2020, 07:20:48
Post #3





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Cytat(nospor @ 17.06.2020, 15:54:56 ) *
qeuery zawsze zwraca resourse, nawet jak nei ma rekordow. Masz tam FALSE tylko wtedy gdy zapytanie sie nie powiedzie

Musisz wiec sprawdzic ile rekordow zwroca twoje resource. Niestety nie wiem jak wyglada twoja klasa MyDB wiec to juz sam sobie zrob


Zawsze zwraca mi jeden jak DZ podaje prawidłową a numer licencji się nie zgadza to dostaję jeden. Jak numer licencji jest dobry a DZ zły to też dostaję jeden i dlatego myślę że coś w zapytaniu SQL jest nie tak.
Klasa to dużo powiedziane smile.gif wygląda tak
  1. class MyDB extends SQLite3 {
  2.  
  3. function __construct() {
  4. $this->open('C:\application.db3');
  5.  
  6. }
  7. }


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 18.06.2020, 08:58:16
Post #4





Grupa: Moderatorzy
Postów: 36 454
Pomógł: 6292
Dołączył: 27.12.2004




Podajesz sprzeczne dane. Teraz piszesz ze zawsze zwraca ci jeden a w poprzednim poscie pisales ze zwraca 0

Cytat
Problem jest w tym, że jeśli ktoś wpisze prawidłowy DZ , a numer license_number nie ma dostaję pustą tabelę

Mozesz ustalic sam ze soba jedna wersje i podac ostatecznie co jest zwracane a co nie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
redelek
post 18.06.2020, 09:10:37
Post #5





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Cytat(nospor @ 18.06.2020, 09:58:16 ) *
Podajesz sprzeczne dane. Teraz piszesz ze zawsze zwraca ci jeden a w poprzednim poscie pisales ze zwraca 0


Mozesz ustalic sam ze soba jedna wersje i podac ostatecznie co jest zwracane a co nie?


Oki już sobie poradziłem dodałem sobie takie zapytanie
  1. $sqlcount = $db->query('SELECT COUNT(*) FROM `lic_view` WHERE license_number = '.$f_licens.' AND dz_number = '.$f_dz.'');
  2. list($name) = $sqlcount->fetchArray(SQLITE3_NUM);
  3. if ($name != 0){
  4. ///dsadsadasd
  5. }else {
  6. // dsadasd
  7. }


i działa smile.gif))

Ten post edytował redelek 18.06.2020, 09:11:02


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
nospor
post 18.06.2020, 09:34:06
Post #6





Grupa: Moderatorzy
Postów: 36 454
Pomógł: 6292
Dołączył: 27.12.2004




To zapytanie jest totalnie zbedne. Jak juz mowilem, poprostu pobierz liczbe rekordow zwroconych przez zapytanie. Wystarczyl zajrzec do manuala sqlite ktorego widze uzywasz. No ale lepiej kombinowac tongue.gif

https://www.php.net/manual/en/function.sqlite-num-rows.php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 23.04.2024 - 16:42