andrzejlechniak
7.11.2010, 11:32:59
Witam, mam taki skrypt:
$id = $_GET['id'];
$query = "SELECT id,tytul,opis FROM kategorie_newsow WHERE id='$id'";
$result = mysql_query("SELECT id,id_cat,tytul,autor,tresc_krotka,tresc_cala,data FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC"); {
echo '<a href="art.php?id='.$row['id'].'"><b>'.stripslashes($row['tytul']).'</b></a> ('.date("d.m.Y, H:i", $row['data']).')<br />'; }
...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
7.11.2010, 11:39:15
"wyechuj" zapytanie i wklej to do edytora np. phpMyAdmin czy coś tam zobacz czy zwraca wyniki
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
7.11.2010, 11:49:35
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
7.11.2010, 11:52:41
a skad bierzesz $id ?
andrzejlechniak
7.11.2010, 11:57:34
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
7.11.2010, 12:01:39
ale wyswieltlasz to odrazu z ?id=

jak dla mnie to srypt nie ma zmiennej $id i dlatego nic ni wyswietla
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
7.11.2010, 13:56:35
nie no.... przecież autor posta napisał że dał echo $zapytanie i wkleił do phpMyAdmin i zwróciło mu wynik.
Autorze czy tak?
andrzejlechniak
7.11.2010, 14:09:41
dokładnie tak
john_doe
7.11.2010, 14:16:31
andrzej zapodaj to
$query = "SELECT id,tytul,opis FROM kategorie_newsow";
{
echo $row['tytul'] . '<br />'; }
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

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
7.11.2010, 14:21:55
OK, wyniki wyświetla i gra, ale przypisane do kategorii newsy już nie...
john_doe
7.11.2010, 14:23:08
andrzej edytowałem mój poprzedni post, przeczytaj i załatwione
dawaj pomógł
andrzejlechniak
7.11.2010, 14:40:32
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)...
john_doe
7.11.2010, 14:44:37
zamień mysql_fetch_array na mysql_fetch_assoc wszędzie
$id = $_GET['id'];
$query = "SELECT id,tytul,opis FROM kategorie_newsow WHERE id='$id'";
echo '<h2>'.$row['tytul'].'</h2>';
$result = mysql_query("SELECT id,id_cat,tytul,autor,tresc_krotka,tresc_cala,data FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC"); {
}
poza tym próbujesz wyświetlić opis a w zapytaniu go nie zwracasz andrzeju.
ciekawskiii
7.11.2010, 14:47:07
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
7.11.2010, 15:04:44
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
ciekawskiii
7.11.2010, 15:08:15
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
7.11.2010, 15:11:02
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
7.11.2010, 15:15:11
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
7.11.2010, 15:19:13
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
7.11.2010, 15:23:13
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
7.11.2010, 16:25:06
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
7.11.2010, 16:33:03
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?!?]
$id = $_GET['id'];
$query = "SELECT * FROM kategorie_newsow WHERE id='$id'";
echo '<h2>'.$row['tytul'].'</h2>';
$result = mysql_query("SELECT * FROM newsy WHERE id_cat='$id' ORDER BY tytul ASC"); {
}
ciekawskiii
7.11.2010, 16:38:08
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
7.11.2010, 16:43:57
OK,
tabele to:
newsy:
id
id_cat
tytul
autor
tresc
opis
data
kategorie_newsow:
id
tytul
opis
ciekawskiii
7.11.2010, 16:54:24
w drugim zapytaniu zmien id_kat na id
john_doe
7.11.2010, 16:54:48
andrew to mój ostatni post bo nie starasz się myśleć co robisz
$id = $_GET['id']; // masz to id tutaj - wyechuj czy zwraca numerek
$query = "SELECT * FROM kategorie_newsow WHERE id=" . $id;
{
echo '<h2>'.$row['tytul'].'</h2>'; }
$query2 = "SELECT * FROM newsy WHERE id_cat= " . $id;
{
}
andrzejlechniak
7.11.2010, 17:11:47
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
7.11.2010, 17:39:51
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
7.11.2010, 17:57:59
Generalnie to jeszcze nie napisałem skryptu dodawania do tego konkretnie, ale z mojej poprzedniej strony to coś takiego:
if (isset ($_POST['submit'])) { $sql="INSERT INTO
newsy
(autor,e_mail,title,date,news_short,news)
VALUES ('{$_POST['autor']}', '{$_POST['e_mail']}' ,'{$_POST['title']}', CURDATE(), '{$_POST['news_short']}', '{$_POST['news']}');";
}
echo '<div class="form_dodawanie"> <hr />
<form action="admin.php?id=administracja_newsami" method="POST">
<fieldset>
<legend>Dodaj nową wiadomość: </legend>
<div class="log_form">
Podaj nazwę autora:
<input type="text" name="autor" maxlength="20" value="'.$row_up['autor'].'" />
</div>
<div class="log_form">
Podaj e-mail autora:
<input type="text" name="e_mail" maxlength="20" value="'.$row_up['e_mail'].'" />
</div>
<div class="log_form">
Podaj tytuł wiadomości:
<input type="text" name="title" maxlength="150" value="'.$row_up['title'].'" />
</div>
<div class="log_form">
Napisz wiadomość [Streszczenie]: <br />
<textarea cols="40" rows="7" name="news_short">'.$row_up['news_short'].'</textarea>
</div>
<div class="log_form">
Napisz wiadomość [Rozwinięcie]: <br />
<textarea cols="40" rows="10" name="news">'.$row_up['news'].'</textarea>
</div>
<div class="log_form">
<input type="hidden" name="nb_update" value="'.$row_up['id'].'" />
<input type="submit" name="submit" value="Dodaj" title="Dodaj wiadomość">
<input type="submit" name="update" value="Zmień" title="Zmień treść wiadomości">
<input type="submit" name="reset" value="Wyczyść" title="Wyczyść wszystkie pola">
</div>
</fieldset>
</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
7.11.2010, 17:59:45
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
7.11.2010, 18:06:37
Chce wyświetlić listę kategorii jako linki. Abym za pomocą linka z danej kategorii mógł przejść do strony z newsem.
ciekawskiii
7.11.2010, 18:29:02
ale w swoim skrypcie to Ty chcrsz wyswietlic liste newsow a nie kategorii...
andrzejlechniak
7.11.2010, 18:30:56
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
7.11.2010, 18:39:11
Zamiast wykonywać x zapytań, gdzie x = liczba kategorii użyj joina:
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

.
Pobieraj zawsze tylko te kolumny, które ci są potrzebne.
ciekawskiii
7.11.2010, 18:41:41
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
7.11.2010, 18:42:01
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?
Mephistofeles
7.11.2010, 18:52:08
Fakt, dodaj przy SELECT:
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.