Sasuke Uchiha
18.06.2012, 02:26:31
Witam mam problem gdyż nie wyświetla mi żadnych stron tzn wyświetla mi tylko jedną stronę z 5 rekordami tak jak powinno chodź w bazie jest ponad 10 rekordów spełniających podany warunek to i tak coś kurde nie gra bo jest tylko 1 strona i nie wyświetla ani wstecz ani dalej. Proszę o pomoc oto kod skryptu
<?php
$viev_news = "SELECT id, title, author, icon, date, time, img, vievs, comments, img1, info1, info2
FROM news WHERE id=".$_GET['id_news']."" or
die('Blad');
$vievs = ++$row_viev_news['vievs'];
mysql_query("UPDATE news SET vievs='$vievs' WHERE id=".$_GET['id_news']."");
if($_POST['add_cm'] == 'yes') {
if (!empty($_POST['valcm'])){
$date_add = date("Y-m-d"); $time_add =date("G:i:s");
$valcm = ahack($_POST['valcm']);
mysql_query("INSERT INTO comments (`id`, `category`, `id_news`, `id_user`, `user`, `text`, `date`, `time`) VALUES ('', 'news', '".$_GET['id_news']."', '$id_user', '$login_user', '".mysql_real_escape_string($valcm)."', '$date_add', '$time_add')") or
die (mysql_error); $num_comments_news_add = ++$row_viev_news['comments'];
mysql_query("UPDATE news SET comments='$num_comments_news_add' WHERE id=".$_GET['id_news'].""); }else {
$error = 'Twój komentarz jest za dlugi!';
}
}else {
$error = 'Twój komentarz jest za krótki!';
}
}else {
$error = 'Puste Pole';
}
}
$comments = "SELECT SQL_CALC_FOUND_ROWS * FROM comments WHERE id_news=".$_GET['id_news']." ORDER BY id DESC LIMIT ". mysql_escape_string((int
)$_GET['page_cm'] *limit_cm
).",".limit_cm
;
<table style="margin-bottom: 10px;" valign="top" cellspacing="0" cellpadding="0">
<tr><td><img src="img/bg_site_news_1.png"></td></tr>
<tr style="background-image: url(img/bg_site_repeat_2.png);"><td>
<table style="margin-left: 7px;" valign="top" cellspacing="0" cellpadding="0">
<tr><td style="background-repeat: no-repeat; padding-left: 10px; color: #151515; font-family: Arial; font-size: 14px; width: 490px; height: 45px; background-image: url(img/bg-title.png);">
<table cellspacing="0" cellpadding="0"><tr>
<td><img src="img/icons/'.$row_viev_news['icon'].'"></td>
<td style="padding-left: 5px;">
<font style="color: #151515; font-size: 14px;"><b>'.$row_viev_news['title'].'</b></font><br> <font style="color: #505050; font-size: 11px;">Autor: <b>'.$row_viev_news['author'].'</b> '.$row_viev_news['date'].' '.$row_viev_news['time'].'</font>
</td></tr></table></td></tr>
<tr><td><table style="margin-right: 16px; margin-top: 10px; margin-left: 9px;" cellspacing="0" cellpadding="0">
<tr><td style="text-align: justify; color: #FFFFFF; font-family: Arial; font-size: 11px;"><img style="margin-top: 3px;margin-right: 5px;" align="left" src="img/'.$row_viev_news['img1'].'"><b>'.$row_viev_news['info1'].'</b><br><br></td></tr>
<tr><td style="text-align: justify; color: #FFFFFF; font-family: Arial; font-size: 11px;">'.$row_viev_news['info2'].'<br><br></td></tr>
<tr><td style="text-align: justify; color: #FFFFFF; font-family: Arial; font-size: 14px;"><b>KOMENTARZE('.$num_rows_comments_news.'):</b></td></tr>
</table></td></tr>
</table>';
$number_id = 1 + $num_rows_comments_news;
{
$avatar = "SELECT avatar
FROM users WHERE id=".$comments_row['id_user']."" or
die('Blad');
<table style="width: 485px; margin-top: 10px; margin-left: 8px;" align="center" cellspacing="0" cellpadding="0">
<tr><td><img src="img/bg_comments_1.png"></td></tr>
<tr><td style="background-image: url(img/bg_comments_2.png);">
<table cellspacing="0" cellpadding="0"><tr valign="top"><td style="padding-left: 7px;"><img src="img/'.$row_avatar['avatar'].'"></td><td style="padding-left: 5px;">
<a href="index_test.php?site=profil&&id='.$comments_row['id_user'].'"><font style="font-family: Arial; font-size: 12px;color: #f5b93e;"><b>'.$comments_row['user'].'</b></font></a><font style="padding-left: 5px;font-family: Arial; font-size: 10px;color: #797979;">'.$comments_row['time'].' / '.$comments_row['date'].'</font><font style="margin-left: 235px;font-family: Arial; font-size: 10px;color: #ffffff;"><b>#'.--$number_id.'</b></font><br>
<font style="font-family: Arial; color: #bbbbbb; font-size: 10px;">'.$comments_row['text'].'</font>
</td></tr></table>
</td></tr>
<tr><td><img src="img/bg_comments_3.png"></td></tr>
</table>';
}
<tr><td>';
//Pobieramy ilosc danych w bazie
$comments = "SELECT FOUND_ROWS() as Ilosc";
if($_GET['page_cm']>0){
echo '<a href="index_test.php?site=viev_news&&id_news='.$_GET['id_news'].'&&page_cm='.($_GET['page_cm']-1).'">wstecz</a> '; }
for($i = 0;$i<ceil($rows_page_cm/limit_cm);$i++){
echo '<a href="index_test.php?site=viev_news&&id_news='.$_GET['id_news'].'&&page_cm='.($i).'">[ '.($i+1).' ]</a> '; }
if($_GET['page_cm']<ceil($rows_page_cm/limit_cm)-1){
echo ' <a href="index_test.php?site=viev_news&&id_news='.$_GET['id_news'].'&&page_cm='.($_GET['page_cm']+1).'">dalej</a>'; }
<tr style="background-image: url(img/bg_site_repeat_2.png);">
<td><form action="index_test.php?site=viev_news&&id_news='.$_GET['id_news'].'" method="post">
<table align="center" cellspacing="0" cellpadding="0">
<tr><td style="padding-bottom: 5px;text-align: justify; color: #FFFFFF; font-family: Arial; font-size: 14px;"><b>DODAJ KOMENTARZ:</b></td></tr>
<tr><td><img src="img/bg_add_cm_1.png"></td></tr>
<tr align="center"><td align="center">
<textarea name="valcm" style="margin: 0px;padding-left: 5px; padding-right: 5px; border: 0px;background-image: url(img/bg_add_cm_2.png);resize: none; width: 395px; height:80px;"></textarea>
</td></tr>
<tr><td><img src="img/bg_add_cm_3.png"></td></tr>
<tr><td style="padding-top: 10px;" align="right">';
if($id_user != 0) {
<input type="hidden" name="add_cm" value="yes" />
<input type="image" src="img/button_send_cm.png" />
';
}
else{
echo'Tylko zalogowani użytkownicy mogą dodawać komentarze!';
}
</table>
</td>
</tr>
<tr><td><img src="img/bg_site_bottom_3.png"></td></tr>
</table>';
?>
CuteOne
18.06.2012, 04:30:55
Dobra rada.. przepisz skrypt na nowo bo tu jest jedno wielkie bagno.
1. Włącz raportowanie błędów
2a. Jeżeli używasz or die(mysql_error()); to staraj się dodać je do każdego zapytania a nie jedno z mysql_error(), drugie z ('blad') a inne bez
2b. Tego or die() nie powinno być przy stringu
$viev_news = "SELECT id, title, author, icon, date, time, img, vievs, comments, img1, info1, info2
FROM news WHERE id=".$_GET['id_news']."" or die('Blad');
3. Po co w URL linków dajesz dwa razy && ?
4. Po co zliczasz rekordy w zapytaniu a później znowu za pomocą mysql_num_rows() - poczytaj o COUNT
5. Używasz zmiennych, których nigdzie nie zadeklarowałeś
i wiele innych...
ps. do paginacji użyj gotowca - będzie o niebo lepszy niż to co masz teraz
Sasuke Uchiha
18.06.2012, 08:29:57
Dziękuej za rady ale to nie rozwiązuje w zadnym stopniu mojego problemu... nie chcę żadnych gotowców bo tak niczgo się nie nauczę.
peter13135
18.06.2012, 09:14:42
Wiem, że jego odpowiedź Cię nie zadowoliła, bo pewnie chciałbyś otrzymać informację "w tej linni powinno być to i tamto zamiast czegoś tam". Niestety, ale Twój skrypt jest taki brudny, że analizowanie go nie sprawi nikomu przyjemności.
Powinieneś się cieszyć, że CuteOne przebrnął przez 10 linii Twojego skryptu i wypisał Ci błędy jakie tam popełniłeś

Ja również nie chcę się zbytnio męczyć. Powiem tyle:
w linii 110 masz ten kod który wyświetla przycisk "dalej".
Jest on wtedy wyświetlany, gdy spełniony jest warunek w linii 108.
Skoro się nie wyświetla, a Twoim zdaniem powinien, to zobacz sobie, co w tych zmiennych siedzi i na podstawie tego będziesz wiedział czemuj warunek nie jest spełniony.
Sasuke Uchiha
18.06.2012, 09:30:51
no właśnie nie wiem co jest źle skoro w poprzednim skrypcie dokładnie tak sam to rozwiązałem i wszystko działa.
Zacznij sprawdzać co jest nie tak przez var_dump().
http://www.phpro.org/tutorials/Pagination-...HP-and-PDO.html tu masz w miarę dobry skrypt paginacji, obiektowy, ale jak choć trochę znasz PHP to załapiesz i przystosujesz.
Sasuke Uchiha
18.06.2012, 09:54:35
Nie bardzo się rozumiemy gdyż chcę zrozumieć co w tym konkretnym przykładzie jest źle
Postaw się w Naszej sytuacji. Pokazujesz kod który ma ~150 linii, jest źle napisany, nawet to nie jest angielski, już pomijając składnie... Trudno wskazać cokolwiek, ponieważ:
1. nie podałeś żadnego błędu, tylko że Ci się coś nie wyświetla
2. nie mamy tego działającego kodu u siebie, a najzwyczajniej nikt nie kopiuje kodu z forum i nie wymyśla bazy do niego, tylko po to żeby go sprawdzić.
Tak jak pisałem, zacznij wstawiać co kilka linijek var_dump(), co masz sprawdzać? Zmienne jakie odbierasz i porównaj je z tymi co mają być. W ten sposób znajdziesz "błąd".
Obstawiałbym to:
$comments = "SELECT SQL_CALC_FOUND_ROWS * FROM comments WHERE id_news=".$_GET['id_news']." ORDER BY id DESC LIMIT ". mysql_escape_string((int
)$_GET['page_cm'] *limit_cm
).",".limit_cm
;
peter13135
18.06.2012, 10:42:51
Czemu sobie po prostu nie wyświetlisz tych zmiennych sam nie zobaczysz ?
Problem jest oczywisty do rozwiązania.
Nie wyświetla Ci się ten przycisk dalej bo nie spełniony jest warunek
warunek nie jest spełniony bo $_GET['page_cm'] nie jest mniejsze od ceil($rows_page_cm/limit_cm)-1, czyli któraś wartość jest nieprawidłowa
Wyświtl te wartości i zbadaj która wartość jest błędna.
Następnie zastanów się, czemu wartośc jest błędna.
Sasuke Uchiha
18.06.2012, 10:44:15
ale nie wyświetla się żaden błąd w dodatku jest kropka w kropke zrobione tak samo jak poprzedni SKRYPT... a sam kod proszę bardzo podaje linijki w którym jest część tego skryptu:
- od 86 do 112
- 37 oraz 38
Naprawdę reszta nie ma tutaj żadnego znaczenia...
I właśnie dlatego to Ty masz to sprawdzić. Jak, już Ci napisałem, peter13135 zresztą też.
Sasuke Uchiha
18.06.2012, 10:48:25
no ok już chyba wiem co jest nie tak źle zlicza chyba ilość komentarzy bo zamiast 12 w wartości $rows_page_cm wyświetla że jest 1 hmm tylko dlaczego skoro w poprzednim skrypcie dobrze liczy oO
peter13135
18.06.2012, 10:51:13
CuteOne napisał Ci:
Cytat
4. Po co zliczasz rekordy w zapytaniu a później znowu za pomocą mysql_num_rows() - poczytaj o COUNT
a Ty mówisz, że jego post nie jest pomocny i nie rozwiązuje problemu
Sasuke Uchiha
18.06.2012, 10:55:18
Cytat(peter13135 @ 18.06.2012, 11:51:13 )

CuteOne napisał Ci:
a Ty mówisz, że jego post nie jest pomocny i nie rozwiązuje problemu

Bo najpierw to zliczam do pętli aby potem móc sobie od tego odejmować id posta żebym nie musiał pisać 2 niepotrzebnych zapytań dodatkowych do bazy przy wprowadzaniu nowego rekordu. W dodatku zmieniłem teraz nawet nazwy zmiennych aby nie były identyczne i co ? i nic dalej jest wartość 1
A czytałeś w ogóle co pisaliśmy? Robisz wszytko tak, jak robić się nie powinno. Dopracuj skrypt lepiej. Co ma wspólnego dodawanie rekordów do paginacji? To są 2 różne rzeczy, a Ty chcesz je łączyć w 1? Litości.
Sasuke Uchiha
18.06.2012, 10:58:53
nie nic nie łącze tylko ktoś sie pytał dlaczego robię 2 razy to samo więd odpowiadam jak to rozwiązałem. Pytanie moje brzmi dlaczego ten sam sposób idealnie ten sam... działa w tym skrypcie ?
<?php
$news = "SELECT SQL_CALC_FOUND_ROWS * FROM news ORDER BY id DESC LIMIT ". mysql_escape_string((int
)$_GET['porcja'] *limit_news
).",".limit_news
;
{
<table style="margin-bottom: 10px;" valign="top" cellspacing="0" cellpadding="0">
<tr><td><img src="img/bg_site_news_1.png"></td></tr>
<tr style="background-image: url(img/bg_site_repeat_2.png);"><td>
<table style="margin-left: 7px;" valign="top" cellspacing="0" cellpadding="0">
<tr><td style="background-repeat: no-repeat; padding-left: 10px; color: #151515; font-family: Arial; font-size: 14px; width: 490px; height: 45px; background-image: url(img/bg-title.png);">
<table cellspacing="0" cellpadding="0"><tr>
<td><img src="img/icons/'.$news_row['icon'].'"></td>
<td style="padding-left: 5px;">
<font style="color: #151515; font-size: 14px;"><b>'.$news_row['title'].'</b></font><br> <font style="color: #505050; font-size: 11px;">Autor: <b>'.$news_row['author'].'</b> '.$news_row['date'].' '.$news_row['time'].'</font>
</td></tr></table></td></tr>
<tr><td><table style="margin-right: 16px; margin-top: 10px; margin-left: 9px;" cellspacing="0" cellpadding="0">
<tr><td style="text-align: justify; color: #FFFFFF; font-family: Arial; font-size: 11px;"><img style="margin-top: 3px;margin-right: 5px;" align="left" src="img/'.$news_row['img1'].'">'.$news_row['info1'].'<br><br></td></tr>
<tr><td style="padding-left: 15px; color: #FFFFFF; font-family: Arial; font-size: 11px; width: 473px; height: 31px; background-image: url(img/bg_info_news_3.png); background-repeat: no-repeat;">Wyświetleń: <font color="#ffc000">'.$news_row['vievs'].'</font> Komentarzy: <font color="#ffc000">'.$news_row['comments'].'</font> <font style="padding-left: 210px;"><a style="color: #ffc000;" href="?site=viev_news&&id_news='.$news_row['id'].'">czytaj więcej...</a></font></td></tr>
</table></td></tr>
</table>
</td></tr>
<tr><td><img src="img/bg_site_bottom_3.png"></td></tr>
</table>';
}
//Pobieramy ilosc danych w bazie
$news = "SELECT FOUND_ROWS() as Ilosc";
if($_GET['porcja']>0){
echo '<a href="?porcja='.($_GET['porcja']-1).'">wstecz</a> '; }
for($i = 0;$i<ceil($iloscWpisow/limit_news);$i++){
echo '<a href="?porcja='.($i).'">[ '.($i+1).' ]</a> '; }
if($_GET['porcja']<ceil($iloscWpisow/limit_news)-1){
echo ' <a href="?porcja='.($_GET['porcja']+1).'">dalej</a>'; }
?>
peter13135
18.06.2012, 11:00:13
Jak już jesteśmy przy niepotrzebnych zapytaniach. To zastanów się po co trzymasz w tabeli newsów liczbę komentarzy
Sasuke Uchiha
18.06.2012, 11:03:26
no i wracamy do punktu wyjścia to nie ma teraz tutaj w tym momencie żadnego znaczenia.
Cytat
Pytanie moje brzmi dlaczego ten sam sposób idealnie ten sam... działa w tym skrypcie ?
W tym drugim robisz to źle.
Sasuke Uchiha
18.06.2012, 11:07:43
Tak tylko że jest jota w jotę tak samo zrobione schematycznie no ale jest źle no zasadniczo coś musi być źle skoro tutaj napisałem i nie działa
To zamiast pisać że coś nie działa, może w końcu go sprawdzisz tak jak napisaliśmy? Już dawno byś miał odpowiedź.
Sasuke Uchiha
18.06.2012, 11:12:00
no tylko nic nie wyskakuje w tym problem o czym już pisałem ? ;/
w var_dump Ci nic nie wyskakuje? A to ciekawe... Używasz go tak jak trzeba?
peter13135
18.06.2012, 11:13:34
Cytat(Sasuke Uchiha @ 18.06.2012, 12:12:00 )

no tylko nic nie wyskakuje w tym problem o czym już pisałem ? ;/
Co to znaczy nic mi nie wyskakuje ?
Nie bardzo rozumiem.
Sasuke Uchiha
18.06.2012, 11:14:51
żaden błąd po prostu tyle string(1) "1" a to że jest 1 wiem już z samego wyświetlenia poprzez echo
To już coś wiemy, teraz szukaj dalej, po zmiennych. I sprawdź dlaczego jest 1.
Sasuke Uchiha
18.06.2012, 11:19:12
no i tu jest problem bo nie wiem dlaczego jest 1... gdy pobieram wcześniej trochę inną metodą to rekordów jest 12... co to sprawdzania co mam jeszcze np sprawdzić ?
Pokaż Nam te metody. Chodzi o zapytanie? Tylko wklej fragment nie całość
Sasuke Uchiha
18.06.2012, 11:22:47
$comments = "SELECT SQL_CALC_FOUND_ROWS * FROM comments ORDER BY id DESC LIMIT ". mysql_escape_string((int
)$_GET['page_cm'] *limit_cm
).",".limit_cm
;
Nie podobają mi się te kropki z " w zapytaniu. A wpisz to na sztywno i zobacz czy działa, bez zmiennych i stałych.
ps. stałe piszemy z DUŻYCH_LITER.
$comments = "SELECT SQL_CALC_FOUND_ROWS * FROM comments ORDER BY id DESC LIMIT 1 *5, 5";
peter13135
18.06.2012, 11:27:02
Te 2 skrypty nie są zrobione według jednego schematu

Zauważ, że w tym :poprzednim skrypcie: po zapytaniu z "SQL_CALC_FOUND_ROWS" masz od razu "SELECT FOUND_ROWS() as Ilosc";
W Twojej zmodyfikowanej wersjo pomiędzy tymi zapytaniami dajesz jeszcze jakieś inne zapytania, co zmienia wartość tego FOUND_ROWS()
Sasuke Uchiha
18.06.2012, 11:35:45
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /viev_news.php on line 64
peter13135
18.06.2012, 11:37:08
0_O'
Co to ma być ?
Sasuke Uchiha
18.06.2012, 11:38:25
Chciał żeby zmienił
$comments = "SELECT SQL_CALC_FOUND_ROWS * FROM comments ORDER BY id DESC LIMIT 1 *5, 5";
to tak uczyniłem i pojawił się piękny błąd
peter13135
18.06.2012, 11:43:03
No.. to oczywiste, że taki błąd z tego będzie.
Nie wiem skąd !*! wziął takie zapytanie... bo przecież ta operacja : mysql_escape_string((int)$_GET['page_cm'] *limit_cm) zwraca Ci gotową liczbę np 5, czy 10, a nie string w postaci 1*5.
Dodatkowo użycie mysql_escape_string jest bez sensu, skoro argumentem jest integer.
W każdym razie, ustosunkuj się do mojego poprzedniego postu.
Sasuke Uchiha
18.06.2012, 11:44:54
no ale szczerze powiedziawszy pod tym zapytaniem jest tylko zasadniczo zbiór zmiennych plus pętla więc nie wiem o jakie zapytanie ci chodzi bo go zwyczajnie tutaj nie widzę
To był przykład że masz to zrobić na sztywno, a nie kopiować bezmyślnie to co ktoś napisze.
Sasuke Uchiha
18.06.2012, 11:46:33
sory już widzę chodzi ci o
$avatar = "SELECT avatar
FROM users WHERE id=".$comments_row['id_user']."" or
die('Blad');
no ale co ja na to poradzę skoro to tam musi być a nie przestawie zapytania nigdzie indziej ;/
peter13135
18.06.2012, 11:53:26
linia 37. :
$comments = "SELECT SQL_CALC_FOUND_ROWS(...)
to ustawia FOUND_ROWS na powiedzmy 12.
linia 66 :
$avatar = "SELECT avatar
FROM users WHERE id=".$comments_row['id_user']."" or
die('Blad');
to ustawia FOUND_ROWS na 1. (bo id jest kluczem, więc jest tylko jeden wiersz)
linia 87 : $comments = "SELECT FOUND_ROWS() as Ilosc";
Pobierasz FOUND_ROWS() które = 1
ot. Cała filozofia.
Masz 2 wyjścia
1. Awatar i komentarze możesz odczytać za pomocą jednego zapytania.
2. Ilość wierszy (czyli to co robisz w linni 87 ) możesz odczytać od razu po wykonania zapytania co masz w linii 37.
Nie gadaj, że nie da się zamienić. "normalni" programiści w skrócie mówiąc najpierw pobierają dane (wszystkie) obliczają co trzeba, przygotowują gotowy string do wyświetlenia i dopiero potem wyświetlają.
Ty robisz tak, że pobierzesz ze 2 wartości z bazy, wyświetlisz je, potem zonowu coś pobierzesz, coś dodasz i pomnożysz i potem wyświetlasz.
Sasuke Uchiha
18.06.2012, 11:54:16
ok usunołem to zapytanie i działa ale fakt faktem chciałbym zachować je czy jest na to rada ?
no bo to są 2 tabele osobne z komentarzami i z newsem ;d
a w zasadzie są to 3 tabele newsy, user, komentarze
peter13135
18.06.2012, 11:57:17
Wiem. I co z tego ?
W celu zachowania pogody ducha opuszczam ten temat i życzę powodzenia
Sasuke Uchiha
18.06.2012, 12:16:57
ktoś ma sugestie / pomysł ? nie za bardzo wiem jak sprawić aby to zapytanie stało się "niewidzialne" ;0
Sasuke Uchiha - przepisz to wszytko od nowa i poprawnie, jeśli nie potrafisz, to albo weź się za kurs PHP (bo brakuje Ci fundamentalnych podstaw), albo zleć to komuś w dziale oceny, będzie szybciej.
peter13135
18.06.2012, 18:02:01
Nawet nie spróbujesz zrobić tego samodzielnie.
O ile pobieranie jednym zapytaniem danych z dwóch tabel może być dla Ciebie jako początkującego trudne, to punkt 2 jest banalny i nie wiem jak można to prościej wytłumaczyć.
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.