Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyświetleniem błędu, w przypadku braku ID w bazie
Forum PHP.pl > Forum > PHP
br0nks
Witam,

Mam taki problem:

Posiadam stronę, gdzie w pliku pokaz.php są wyświetlane id wg tego, który wybierzemy, np: pokaz.php?id=1 i wyświetla coś.
A gdy odpalę sam plik pokaz.php, na górze strony wyświetla mi się błąd.
Kod
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in pokaz.php on line 4


A chciałbym aby pokazał mój własny tekst przy `pokaz.php` np: "błąd, wróć do strony głównej"...

tu poczatek skryptu pokaz.php:
  1. <?php include ("config.php");
  2. $id=$_GET["id"];
  3. $x=mysql_query("SELECT * FROM baza WHERE id=$id");
  4. while ($y=mysql_fetch_assoc($x)){
  5. $id=$y['id'];
  6. $text=$y['text'];
  7. }
  8. ?>


czyli 4 linijka:
Kod
    while ($y=mysql_fetch_assoc($x)){



I kolejna sprawa, jak zrobić z tego poniżej, aby po wywołaniu: `pokaz.php?id=123` i nie będzie tego ID w bazie, to wyświetli mi błąd?

kod skryptu pokaz.php:
  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // połączenie z mysql
  6. include "config.php";
  7.  
  8. // przerabiamy dane z GETa na liczbę (zabezpieczenie)
  9. $id = (int)$_GET['id'];
  10.  
  11.  
  12. // tworzymy zapytanie na artykuł
  13. $result = mysql_query("SELECT * FROM baza WHERE id='$id'");
  14. // przerabiamy na tablicę
  15. $row = mysql_fetch_array($result);
  16.  
  17.  
  18. // wyświetlamy nagłówek
  19. echo '<a href="pokaz.php?id='.$id.'" title="'.$text.'">'.$text.'</a>';
  20.  
  21.  
  22. // rozłączenie z bazą danych
  23.  
  24. // koniec buforowania
  25.  
  26. ?>


Serdeczne dzięki za wszelką pomoc!
vermis
Kod
if (empty($id)) {
// obsługa błędu
} else {
// pobranie danych
}


Drugi problem - skorzystaj z tego http://php.net/manual/en/function.mysql-num-rows.php
br0nks
gdy użyłem tego, co wyżej napisałeś (a próbowałem już tak wcześniej)
to gdy wejdę do `pokaz.php` oprócz tego błędu, który jest w linijce nr 4, pokazuje się to co po winno przy braku ID.

A przy nie istniejącym ID, nadal brak błędu...


a co do tego problemu z mysql num rows.. to jakaś jeszcze większa podpowiedź?smile.gif bo nie mam żadnej koncepcji na to :/

PS: dodam, że przy pokaz.php?id=3 (jeżeli istnieje, lub nie istnieje dane ID)<-- nie występuję ten błąd z tą 4 linijka.
vermis
Którego pliku używasz? Dałeś kody dwóch plików pokaz.php i nie jestem teraz pewien, w którym jest problem.
br0nks
tak, oba kody są w pokaz.php

PS: gdy dodam coś takiego:

Kod
if(!empty($_GET['id'])) {

echo 'hi jack';

} else {

}


to przy wpisaniu byle jakiego ID pokazuje zawsze 'hi jack'.
vermis
Nie bardzo wiem gdzie masz tą resztę kodu, ale tak powinno działać.
  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // połączenie z mysql
  6. include "config.php";
  7.  
  8. // przerabiamy dane z GETa na liczbę (zabezpieczenie)
  9. $id = (int)$_GET['id'];
  10.  
  11. if (empty($id)) {
  12. // błąd brak id
  13. } else {
  14. // tworzymy zapytanie na artykuł
  15. $result = mysql_query("SELECT * FROM baza WHERE id='$id'");
  16. if (mysql_num_rows($result) >0) {
  17. // przerabiamy na tablicę
  18. $row = mysql_fetch_assoc($result);
  19. $text = $row['text'];
  20. $id = $row['id'];
  21. // wyświetlamy nagłówek
  22. echo '<a href="pokaz.php?id='.$id.'" title="'.$text.'">'.$text.'</a>';
  23. } else {
  24. // brak rekordu w bazie
  25. }
  26.  
  27. // rozłączenie z bazą danych
  28.  
  29. // koniec buforowania
  30.  
  31. ?>
br0nks
oo super! dzięki wielkie! teraz przy każdym nieistniejącym ID pokazuje to co bym chciał!
ale przy pokaz.php nadal ten błąd co był u góry strony. i przy braku ID jak mógłbym dodać mój własny tytuł strony?

BTW: ten kod, który podałeś, to jako zastąpienie tych dwóch, które ja dałem?

bo chodzi o to, że ten, który jest na górze strony, on wywołuje mi tytuły stron i id do znaczników meta.
a później jest dużo html i ten drugi kod.


PS; albo jak zrobić aby przy wejściu do pokaz.php (bez wybranego ID) przenosiło do np id=1 lub do id=0?
wtedy dałbym sobie spokój z tym błędem u góry.. :/

PS2: albo właśnie zobaczyłem, że gdy podzielę kod ten, który mi dałeś i wrzucę go na górę, zamiast tam na dól, to błędu nie ma, ale cala strona się pieprzy, przez else {} bo nie zamyka się na górze i lipa. i nie wiem jak to podzielić, aby nie było tego problemu..





haha:D pokombinowałem jakoś i problem rozwiązałem z wyświetlaniem!

Mega piękne dzięki!:)



Tylko jak ustawić jakiś opis do stron błędu (pokaz.php i id których nie ma)?
Bo normalnie pobiera mi się nazwa wyświetlanego tekstu z `$text` i wskakuje na opis...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.