Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]GDzi jest tu błąd w wyświetlaniu danych z bazy
Forum PHP.pl > Forum > Przedszkole
andrzejlechniak
Witam, mam taki skrypt:

  1.  
  2. $id = $_GET['id'];
  3. $query = "SELECT id,tytul,opis FROM kategorie_newsow WHERE id='$id'";
  4. $result = mysql_query ($query);
  5. $row = mysql_fetch_array($result);
  6. echo '<h2>'.stripslashes($row['tytul']).'</h2>';
  7.  
  8. $result = mysql_query("SELECT id,id_cat,tytul,autor,tresc_krotka,tresc_cala,data FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC");
  9. while($row = mysql_fetch_array($result))
  10. {
  11. echo '<a href="art.php?id='.$row['id'].'"><b>'.stripslashes($row['tytul']).'</b></a> ('.date("d.m.Y, H:i", $row['data']).')<br />';
  12. echo stripslashes($row['opis']).'<br /><br />';
  13. }


...i mam problem. Mam połączenie z bazą danych. Mam w bazie po jednym rekordzie w każdej z tych dwóch tabel, jako id (id i id_cat) mam numer 1. Ale na stronie nic mi się nie wyświetla. Error_reporting też nic nie pokazuje, nie wiem czemu mam błąd, prosze pomóżcie, A.
john_doe
"wyechuj" zapytanie i wklej to do edytora np. phpMyAdmin czy coś tam zobacz czy zwraca wyniki
lwc
Szczerze mówiąc na szybko sprawdziłem i wydaje mi się, że u mnie działa poprawnie, więc nie wiem o co chodzi. Zauważyłem jedynie, że próbujesz wyświetlić kolumne opis, a w drugim zapytaniu przecież tego opisu nie zwracasz, bo i nie znajduje się on w tej tabeli.
andrzejlechniak
Dziwne, zwraca wynik w php myadmin, znaczy to co jest w tabeli - ten rekord, za pomocą var_dump'a i wyszedł string(...) ale wyników na stronie nie mam...
ciekawskiii
a skad bierzesz $id ?
andrzejlechniak
To tak, pierwsze pole tabeli 'newsy' i 'kategorie_newsow' to id, zamieniam to na link czyli $_GET'em chcąc pobrać. Dodałem kolumne 'opis' ale wciąż nic nie ma na stronie, ale błędów też nie wyłapuje error...
ciekawskiii
ale wyswieltlasz to odrazu z ?id= questionmark.gif

jak dla mnie to srypt nie ma zmiennej $id i dlatego nic ni wyswietla
lwc
Rzeczywiście, użytkownik u góry chyba ma rację, po prostu, żeby skrypt zwrócił wynik musisz się odwołać do id, bo na podstawie niego on może wykonać zapytania. Myślałem, że to jest oczywiste.
john_doe
nie no.... przecież autor posta napisał że dał echo $zapytanie i wkleił do phpMyAdmin i zwróciło mu wynik.

Autorze czy tak?
andrzejlechniak
dokładnie tak
john_doe
andrzej zapodaj to
  1.  
  2.  
  3. $query = "SELECT id,tytul,opis FROM kategorie_newsow";
  4. $result = mysql_query ($query);
  5. while ($row = mysql_fetch_assoc($result))
  6. {
  7. echo $row['tytul'] . '<br />';
  8. }
  9.  


to musi Ci dać wynik. Rozbij to co robisz na mniejsze taski i sprawdzaj i napewno wyłapiesz o co chodzi.
btw nie masz białej czcionki - zartuje smile.gif

Używaż mysql_fetch_array błędnie - luknij w manual
Mój kod to mysql_fetch_assoc i wtedy odwołujesz się np. $row['nazwa_kolumny_z_bazy]
w Twoim przypadku powinieneś użyć np. $row[1]
andrzejlechniak
OK, wyniki wyświetla i gra, ale przypisane do kategorii newsy już nie...
john_doe
andrzej edytowałem mój poprzedni post, przeczytaj i załatwione
dawaj pomógł smile.gif
andrzejlechniak
Niestety nie jarze, siedze, patrze i... za przeproszeniem nic, przypisuję id z kategorii do id newsa i nic, nic się nie wyświetla. Kategorie tak, ale to przypisanie do kategorii newsa już nie. I co teraz...
PS. Chętnie podam 'POMÓGŁ' (zgadnijcie za co)... winksmiley.jpg
john_doe
zamień mysql_fetch_array na mysql_fetch_assoc wszędzie
  1.  
  2. $id = $_GET['id'];
  3. $query = "SELECT id,tytul,opis FROM kategorie_newsow WHERE id='$id'";
  4. $result = mysql_query ($query);
  5. $row = mysql_fetch_assoc($result);
  6. echo '<h2>'.$row['tytul'].'</h2>';
  7.  
  8. $result = mysql_query("SELECT id,id_cat,tytul,autor,tresc_krotka,tresc_cala,data FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC");
  9. while($row = mysql_fetch_assoc($result))
  10. {
  11. echo $row['tytul'];
  12. }

poza tym próbujesz wyświetlić opis a w zapytaniu go nie zwracasz andrzeju.
ciekawskiii
a to Ty pisales ten skrypt?

ja bym to zrobil o wiele prosciej i byloby bez problemu, zamiast dwoch tabel w bazie zrob jedna i tyle,
teraz tylko sie gubisz przy tym i nie wiesz jak to wyswietlic a tak bedzie tylko jedno zapytanie
andrzejlechniak
Dobra, jest tak, nic nie działa, mam dwie tabele, jeden rekord, nie wyświetla mi błędów ani wyników, dzięki za wszystkie dobre rady, a poza tym co do tego czy dwie czy jedna tabela to musi być dwie tabele bo jedna to newsy i jego parametry (typu autor, wpis, itd.) a druga to kategoria (nazwy). I musi być tak bo jedna to nie wystarcza na wszystko, bo do każdego newsa musi być przypisana kategoria. A jeśli tych kategorii ma być 50 albo 100? Dodałem do tabeli news kolumnę opis, więc powinno zwracać wszystkie wyniki a nic, NIC a nic nie zwraca, więc już totalnie nie wiem czemu sciana.gif sad.gif
ciekawskiii
no a co za poblem zeby w tabeli news dodac kategorie i tytul newsa?

pozniej na stronie to sobie sortujesz jak chcesz jednym zapytaniem
john_doe
ciekawski bo tak się nie robi.
jedna tabela do kategorii - słownik, druga to wpisy ( jedna kolumna klucz obcy wskazujący na słownik )
ciekawskiii
kto niby powiedzial ze tak sie nie robi i w czym to szkodzi?

robi sie tak zeby bylo prosto i wygodnie a nie jakies kombinowanie i niepotrzebne laczenie zapytan
john_doe
moim zdaniem ten przykład to podstawa podstaw po prostu i tak się nie robi. Trzeba patrzeć w przód, jak np. będziesz rozbudowywał projekt etc........ i z Twoim podejściem wtedy nie będzie ok.
ciekawskiii
kazdy robi po swojemu a ja nie widze problemu w tym zeby tak robic a jak on sie uczy to lepiej niech sie uczy jak najprosciej, co bedzie jak przyjdzie mu laczyc 5 tabel? skoro z dwoma sobie nie radzi...
Mephistofeles
Nie ucz złych nawyków!

Normalizacja, poczytaj.
A jak kiedyś będzie chciał dodać internacjonalizację? Będzie powielał wszystkie niepotrzebne dane newsa oprócz tłumaczonej treści? Tak się nie robi, i tyle.
andrzejlechniak
Ok, ale wciąż nie mam rozwiązanego problemu. Mam taki skrypt, (poprawiony przez jednego z uczestników forum) i wciąż widzę pustą stronę, [LEO, WHY?!?]

  1. $id = $_GET['id'];
  2. $query = "SELECT * FROM kategorie_newsow WHERE id='$id'";
  3. $result = mysql_query ($query);
  4. $row = mysql_fetch_assoc($result);
  5. echo '<h2>'.$row['tytul'].'</h2>';
  6.  
  7. $result = mysql_query("SELECT * FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC");
  8. while($row = mysql_fetch_assoc($result))
  9. {
  10. echo $row['tytul'];
  11. }
ciekawskiii
ja nie ucze tylko tlumacze jak jest prosciej i jak ja robie:D wole miec 10 tabel w bazie danych niz 1000 proste

a jak on, to zrobi to mnie to malo interesuje

pokaz budowe tabel

pokaz budowa tabel
andrzejlechniak
OK,

tabele to:
newsy:
id
id_cat
tytul
autor
tresc
opis
data

kategorie_newsow:
id
tytul
opis
ciekawskiii
w drugim zapytaniu zmien id_kat na id
john_doe
andrew to mój ostatni post bo nie starasz się myśleć co robisz
  1.  
  2. $id = $_GET['id']; // masz to id tutaj - wyechuj czy zwraca numerek
  3. $query = "SELECT * FROM kategorie_newsow WHERE id=" . $id;
  4. $result = mysql_query ($query);
  5. while($row = mysql_fetch_assoc($result))
  6. {
  7. echo '<h2>'.$row['tytul'].'</h2>';
  8. }
  9.  
  10. $query2 = "SELECT * FROM newsy WHERE id_cat= " . $id;
  11. $result2 = mysql_query($query2);
  12. while($wiersz = mysql_fetch_assoc($result2))
  13. {
  14. echo $wiersz['tytul'];
  15. }
andrzejlechniak
Postarałem się postąpić wg. Waszych porad, ale niestety teraz wyrzuca mi 2 błędy:

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\...\index.php on line 83
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\...\index.php on line 87

a wyników jak nie było tak nie ma
ciekawskiii
jakim cudem bledy??

a tak swoja droga, gdy laczysz obie tabele to nie mozesz wyswietlac i kategorii i newsa tym samym id, a co bedzie jezeli id beda rozne?
w tym momencie gdy id kategorii to np.1 a posta to np.5 ktorego nie ma to normalne ze nie wyswietle

ale pokaz jeszcze jak zapisujesz dodawanie newsa

ogolnie to jest proste jak drut ale jak nie widze wszystkiego to trudno cos poradzic:/
andrzejlechniak
Generalnie to jeszcze nie napisałem skryptu dodawania do tego konkretnie, ale z mojej poprzedniej strony to coś takiego:

  1. if (isset ($_POST['submit'])) {
  2. $sql="INSERT INTO
  3. newsy
  4. (autor,e_mail,title,date,news_short,news)
  5. VALUES ('{$_POST['autor']}', '{$_POST['e_mail']}' ,'{$_POST['title']}', CURDATE(), '{$_POST['news_short']}', '{$_POST['news']}');";
  6. $result=mysql_query($sql) or print ($sql);
  7. }
  8.  
  9. echo '<div class="form_dodawanie">
  10. <hr />
  11. <form action="admin.php?id=administracja_newsami" method="POST">
  12. <fieldset>
  13. <legend>Dodaj nową wiadomość: </legend>
  14. <div class="log_form">
  15. Podaj nazwę autora:
  16. <input type="text" name="autor" maxlength="20" value="'.$row_up['autor'].'" />
  17. </div>
  18.  
  19. <div class="log_form">
  20. Podaj e-mail autora:
  21. <input type="text" name="e_mail" maxlength="20" value="'.$row_up['e_mail'].'" />
  22. </div>
  23.  
  24. <div class="log_form">
  25. Podaj tytuł wiadomości:
  26. <input type="text" name="title" maxlength="150" value="'.$row_up['title'].'" />
  27. </div>
  28.  
  29. <div class="log_form">
  30. Napisz wiadomość [Streszczenie]: <br />
  31. <textarea cols="40" rows="7" name="news_short">'.$row_up['news_short'].'</textarea>
  32. </div>
  33.  
  34. <div class="log_form">
  35. Napisz wiadomość [Rozwinięcie]: <br />
  36. <textarea cols="40" rows="10" name="news">'.$row_up['news'].'</textarea>
  37. </div>
  38.  
  39. <div class="log_form">
  40. <input type="hidden" name="nb_update" value="'.$row_up['id'].'" />
  41. <input type="submit" name="submit" value="Dodaj" title="Dodaj wiadomość">
  42. <input type="submit" name="update" value="Zmień" title="Zmień treść wiadomości">
  43. <input type="submit" name="reset" value="Wyczyść" title="Wyczyść wszystkie pola">
  44. </div>
  45. </fieldset>
  46. </form>';


Oczywiście jest jeszcze SELECT a $row_up --> służył do aktualizacji. Chodzi mi o przypisanie do kategorii, np.

KATEGORIA 1:
-news 1
-news 2
-news 3

KATEGORIA 2:
-news 10
-news 12
-news 4
Mephistofeles
Chcesz pobrać newsa i jego kategorię, czy listę newsów w kategorii?

PS. mysql_ jest już dawno przestarzałe, dzisiaj używa się PDO, ewentualnie mysqli, teraz gdy się uczysz najlepiej przesiąść się od razu na nowe rozwiązania, będzie łatwiej niż później, gdy już się przyzwyczaisz.
andrzejlechniak
Chce wyświetlić listę kategorii jako linki. Abym za pomocą linka z danej kategorii mógł przejść do strony z newsem.
ciekawskiii
ale w swoim skrypcie to Ty chcrsz wyswietlic liste newsow a nie kategorii...
andrzejlechniak
Dokładnie to chce wyświetlić listę newsów przypisanych do kategorii, tak jak pisałem:

KATEGORIA 1:
-news 01
-news 02

KATEGORIA 2:
-news 03
-news 04
Mephistofeles
Zamiast wykonywać x zapytań, gdzie x = liczba kategorii użyj joina:
  1. SELECT k.tytul, n.tytul FROM kategoria k LEFT JOIN news n ON k.id = n.kategoria_id WHERE (k.id = 1)

Ale nie jestem pewien, czy będzie działało w takiej postaci biggrin.gif.
Pobieraj zawsze tylko te kolumny, które ci są potrzebne.
ciekawskiii
juz sie sam w tym pogubilem:D

zamien w drugim zapytaniu na id=".$row['id']." tak samo jak maz w linku

teraz musi wyswietlic
andrzejlechniak
OK, spróbuję ale jak potem odczytywać dane z bazy, tzn. zwykle bywa tak $row['tytul'] to jak tutaj odczytać np. tytul --> $row['tytul'] bo w obu tabelach jest takie samo pole? snitch.gif
Mephistofeles
Fakt, dodaj przy SELECT:
  1. k.tytul AS kat_tytul, n.tytul AS news_tytul

W skrócie: aliasy.
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.