Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][sql]Sprawdzaniec istnienia w bazie
MILICJA
post
Post #1





Grupa:
Postów: 31
Pomógł: 3
Dołączył: 25.08.2006

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


Siema snitch.gif Otoz mam pewien problem za sprawdzaniem czy dany rekord jest bazie.
Sprawdzam to tak :

  1. <?php
  2. function sprawdzIst ($pid, $baza_danych) {
  3.  
  4. $istnieje= mysql_query("Select * FROM $baza_danych WHERE id = '$pid' ");
  5. $ile = mysql_num_rows($istnieje);
  6.  
  7. if ( $ile == 0 ) { 
  8.  
  9.  
  10. print '<CENTER></ br></ br>Strona o podanym id nie istnieje<CENTER>';
  11.  
  12.  
  13. }else {
  14.  
  15. wyPodstrone ($pid,$baza_danych); // funkcja wyswietla podstrone ( to dziala poprawnie)
  16.  
  17.  
  18. }
  19.  
  20. }
  21. ?>



Funkcja dziala bez zarzutu dopóki w "$pid" nie znajdzie sie / wtedy
mam oto taki komunikacik :

  1. Warning: mysql_fetch_array(): supplied argument IS NOT a valid MySQL result resource IN podstrony_index.php ON line 41



Wie ktos co nalezy poprawic ?

Ten post edytował MILICJA 27.08.2006, 20:34:16


--------------------
Pomogłem ? Nie zapomnij kliknąć na "Pomógł" ;D
Go to the top of the page
+Quote Post
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


1. Prosze poprawić temat wątku. Nie jest zgodny z zasadami panującymi na forum Przedszkole.
2.
Cytat(MILICJA @ 27.08.2006, 21:23 ) *
Wie ktos co nalezy poprawic ?
Należy sprawić aby $pid zawsze był liczbą calkowitą. Zrzutuj to na typ int lub zanim zaczniesz działać sprawdź jakiego typu jest zmienna i zareaguj jeśli nie jest int'em.
Go to the top of the page
+Quote Post
limak
post
Post #3





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 13.03.2004
Skąd: Siemianowice Śl.

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


po pierwsze to nie masz nigdzie listingowanym kodzie mysql_fetch_array wiec troche sciemniłeś z tym błędem, ale to nie ważne winksmiley.jpg Musisz sobie zrobić walidację. Walidację zawsze trzeba robić na każdej zmiennej która jest doklejana do zapytania, bo inaczej skrypt jest podatny na atak.


--------------------
karczmarczyk.com
Go to the top of the page
+Quote Post
cadavre
post
Post #4





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


Dopisz na końcu skryptu:
  1. <?php
  2. ?>
i powiedz co wypisze. Najprawdopodobniej znak "/" uznawany jest za slash poprzedzający znak (np. /" czy //).


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
MILICJA
post
Post #5





Grupa:
Postów: 31
Pomógł: 3
Dołączył: 25.08.2006

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


Z bledem nie sciemniam (mysql) - bo wywoluje go funkcja wyPodstrone ($pid,$baza_danych); ( wyswietla podstrony). jak sprawdzic czy zmienna jest intt questionmark.gif



gry "?pid=1/ " wyskakuje ten wlasnie blad

Ten post edytował MILICJA 27.08.2006, 20:39:27


--------------------
Pomogłem ? Nie zapomnij kliknąć na "Pomógł" ;D
Go to the top of the page
+Quote Post
Lonas
post
Post #6





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


Można to rozwiązać dwojako :

Rozwiazanie pierwsze:
- zastosuj po zapytaniu mysql_query() ciag or die(mysql_error())
np.:

  1. <?php
  2. $result = mysql_query("SELECT nazwa_pola FROM nazwa_bazy WHERE nazwa_pola='costam'") or die(mysql_error());
  3. ?>


W ten sposob przy nieprawidlowym zapytaniu skrypt sie skonczy i wyswietli bledy zapytania.

Albo można tak :
  1. <?php
  2. $result = mysql_query("");
  3. {
  4. }
  5. else
  6. {
  7. }
  8. ?>

Teraz o co w tym wszystkim chodzi (kiedy powstaje blad).
Bład nie powstaje gdy zapytanie jest poprawne i generuj rezultat typu #resource
zmienna do ktorej zapisano wynik dzialania mysql_query() mozna smialo wstawic do mysql_fetch...().
Jesli w zapytaniu jest blad funkcja mysql_query() nie zwraca odpowiedniego rezultatu dla funkcji mysql_fetch...() i dlatego dopiero przy wywolaniu mysql_fetch...() nastepuje "wylozenie sie" skryptu.

pzdr


--------------------
Go to the top of the page
+Quote Post
limak
post
Post #7





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 13.03.2004
Skąd: Siemianowice Śl.

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


Cytat
Z bledem nie sciemniam (mysql) - bo wywoluje go funkcja wyPodstrone ($pid,$baza_danych); ( wyswietla podstrony). jak sprawdzic czy zmienna jest intt questionmark.gif



gry "?pid=1/ " wyskakuje ten wlasnie blad


a, ok, chyba ze tak smile.gif

czy dana zmienna jest typu int można sprawdzić wywołując
is_numeric($zmienna);
zwroci ^ true jesli jest, lub false jesli nie jest.

można też jawnie przypisac typ, dodając "(int)" przed nazwą zmiennej, tj (int)$zmienna_typu_int

pozdrawiam

Ten post edytował limak 27.08.2006, 20:47:49


--------------------
karczmarczyk.com
Go to the top of the page
+Quote Post
mike
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~Lonas pierwszy sopsób slaby a drugi na dodatek błędny.

Nie powinno się przerywać działania skryptu w jakimkolwiek momencie.
A już na pewno nie wyrzucając przy tym akich informacji jak proponujesz.
Owszem, na etapie debuggowania tak, ale poten - nigdy.

W drugim przykładzie sugerujesz funkcję mysql_affected_rows() a ja sugeruję dowiedzeć się do czego w ogóle ona sluży i nie wprowadzać innych w błąd.


~MILICJA odsyłam do manuala:
Go to the top of the page
+Quote Post
MILICJA
post
Post #9





Grupa:
Postów: 31
Pomógł: 3
Dołączył: 25.08.2006

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


Dziekuje za pomoc. " if (is_numeric($pid) == true) { " w pelni pomoglo . Wszystk odzial poprawnie obojetnei co wpisze. Uważam ze "mike_mech" zamiast pomagac i probowac rozwiazac problem pi**** glupoty.


--------------------
Pomogłem ? Nie zapomnij kliknąć na "Pomógł" ;D
Go to the top of the page
+Quote Post
mike
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(MILICJA @ 27.08.2006, 21:57 ) *
Dziekuje za pomoc. " if (is_numeric($pid) == true) { " w pelni pomoglo . Wszystk odzial poprawnie obojetnei co wpisze. Uważam ze "mike_mech" zamiast pomagac i probowac rozwiazac problem pi**** glupoty.

A ja uważam że masz pierwsze i ostatnie słowne ostrzeżenie za używanie wulgaruzmów na forum. Gwiazdki, gwiazgkami a każdy wie o co chodzi więc daruj je sobie.
Jeśli nie potrafisz sie wypowiadać kulturalnie na publicznym forum to nie rób tego w ogóle. Nikt nie będzie tutaj tolerował Twojego chamstwa.

Dostałeś ode mnie dwie podpowiedzi, prowadzące bez problemu do rozwiązania. Listę funkcji odpowiedzialnych za sprawdzanie typów i instrukcje jak je rzutować. Jeśli nie zrozumiałeś manuala to jest powód żeby się rucać jak gówniarz.
Jeśli spodziewasz się na tym forum dostawać gotowce to zmień nastawienie, to forum służy do nauki i rozwijania umiejętności przy pomaganiu innym. A nie spełnianiu próśb leni i nierobów, którzy tyłka do manuala ruszyć nie potrafią.

Zastanów się więc następnym razem co piszesz.
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 Aktualny czas: 19.08.2025 - 05:06