Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Funkcja kolejny news
Forum PHP.pl > Forum > PHP
korey
Witam.

Ostatnio sporo czasu siedzę na Funkcją która bedzie w bottomie i po naciśnięciu na niego wyświetli nam kolejnego newsa w zależności od news_id.

Gdyż miałem 5 newsów o ID 1, 2, 3, 4, 5. zastosowałem coś takiego:
  1. WERSJA NA LOCALHOST
  2. ?>
  3. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://localhost/~Szkolne_Kola/index.php?news=<?php echo $numer+1; ?>'" />
  4. <?php
  5.  
  6. WERSJA NA SERWIE WWW
  7. ?>
  8. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo $numer+1; ?>'" />
  9. <?php
  10.  
  11. //oba kody u góry działały poprawnie

Było wszystko tak jak chciałem dopóki nie usunąłem jednego newsa.
na lacalhascie zostały mi teraz newsy o news_id 1, 2, 3 i 5.
no i gdy jestem na newsie o id 3 i chcę udać się do newsa o numerze ID 5 przycisk wpisuje newsa o id 4 (ten którego usunąłem). mógłbym dostać jakieś rady by wybierało mi news_id po kolei od najmniejszego do największego z tych jakie są dostępne w DB.

to kod jaki teraz wymyślilem ale nie działa poprawnie sad.gif
  1. ?>
  2. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo pobier($numer); ?>'" />
  3. <?php
  4.  
  5. }
  6. function pobier($numer) {
  7. $pytanie = "SELECT MIN(news_id) FROM newsy WHERE `news_id` > ".$numer." ";
  8. $wykonaj = mysql_query($pytanie);
  9.  
  10. if(mysql_num_rows($wykonaj) > 0) {
  11. $wiersz = mysql_fetch_row($wykonaj);
  12. return $wiersz['news_id'];
  13. }
  14. return "nie ma nusa";
  15. }


Z Góry dziękuje za pomoc
darko
Wyciągnij do tablicy z bazy idki newsów, przeleć po tablicy i doklejaj do linków (index.php?news= ) kolejne wartości idków
ChrisB
zmien zapytanie na:
  1. SELECT news_id FROM newsy WHERE news_id > ".$numer." ORDER BY news_id ASC LIMIT 1";



a błąd masz w "mysql_fetch_row" zwraca kolumny (wynik) w formie numerycznej($wiersz[0]; ) a ty sie odnosisz do niego po stringu ($wiersz['news_id']; )

zamień to na mysql_fetch_assoc i ruszyć już powinno
korey
Zamieniłem wszystko w/g wskazówek i wygląda to tak:
  1. <?php
  2.  
  3.  
  4. function pokaz_all($numer){
  5. $zapytanie = "SELECT * FROM `newsy` WHERE `news_id` = ".$numer." ";
  6. $wykonaj = mysql_query($zapytanie);
  7. // mysql_fetch_row
  8. // mysql_fetch_array
  9. // mysql_num_rows
  10. // num_rows
  11. // fetch_row
  12. while($wiersz = mysql_fetch_array($wykonaj))
  13. {
  14. $tytul = ($wiersz['tytul']);
  15. $data = ($wiersz['data']);
  16. $autor = ($wiersz['autor']);
  17. $tresc = ($wiersz['tresc']);
  18. $ful_tresc = ($wiersz['ful_tresc']);
  19. $news_id = ($wiersz['news_id']);
  20.  
  21. echo '<link rel="stylesheet" type="text/css" href="functions/newsy.css" media="screen"/>';
  22. echo '<table name="news" class="news" cellpadding="3" cellspacing="0">';
  23. echo '<tbody>';
  24. echo '<tr align="left">';
  25. echo '<td colspan="2" rowspan="1" name="news_title" class="news_title">'.ucfirst($tytul).'</td>';
  26. echo '</tr>';
  27. echo '<tr align="justify">';
  28. echo '<td colspan="2" rowspan="1"><b>'.ucfirst($tresc).'</b>';
  29. echo ucfirst($ful_tresc);
  30.  
  31. echo '</td>';
  32. echo ' </tr>';
  33. echo '<tr>';
  34. echo '<td name="news_autor" class="news_autor"><b>Autor: </b>'.ucfirst($autor).'</td>';
  35. echo '<td name="news_data" class="news_data">'.ucfirst($data).'</td>';
  36. echo '</tr>';
  37. echo '</tbody>';
  38. echo '</table>';
  39. echo '<br />';
  40. echo '<center>';
  41. echo '<INPUT TYPE="BUTTON" value="Wstecz" class="wstecz" onClick="history.back()" />';
  42. echo '</center>';
  43. echo '<br />';
  44. }
  45. ?>
  46. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo pobier($numer); ?>'" />
  47. <?php
  48.  
  49. }
  50.  
  51. function pobier($numer) {
  52.  
  53. $pytanie = " SELECT news_id FROM newsy WHERE news_id > ".$numer." ORDER BY news_id ASC LIMIT 1";
  54.  
  55. $wykonaj = mysql_query($pytanie);
  56.  
  57. if(mysql_fetch_assoc($wykonaj) > 0) {
  58. $wiersz = mysql_fetch_assoc($wykonaj);
  59. return $wiersz['news_id'];
  60. }
  61. return "nie ma nusa";
  62. }
  63.  
  64.  
  65.  
  66. ?>

Pokazałem wszystko bo moze gdzieś wcześniej jest błąd..
O to adres stronki na której mi to nie działa. http://szkolne-kola.comuf.com/index.php?page=start
ChrisB
na początek

  1. if(mysql_fetch_assoc($wykonaj) > 0) {


zmien na

  1. if(mysql_num_rows($wykonaj) > 0) {


bo jedno pobiera dane i tworzy tablice, a to co potrzebujesz to ilość zwróconych rekordów (mysql_num_rows)
a potem podaj poprawny link do strony:)
korey
Przerobiłem to i nic. sad.gif

  1. <?php
  2. // FUNKCJA pokaz_all POKAZUJE CAŁĄ TREŚĆ NEWSA.
  3. function pokaz_all($numer){
  4. $zapytanie = "SELECT * FROM `newsy` WHERE `news_id` = ".$numer." ";
  5. $wykonaj = mysql_query($zapytanie);
  6. // mysql_fetch_row
  7. // mysql_fetch_array
  8. // mysql_num_rows
  9. // num_rows
  10. // fetch_row
  11. while($wiersz = mysql_fetch_array($wykonaj))
  12. {
  13. $tytul = ($wiersz['tytul']);
  14. $data = ($wiersz['data']);
  15. $autor = ($wiersz['autor']);
  16. $tresc = ($wiersz['tresc']);
  17. $ful_tresc = ($wiersz['ful_tresc']);
  18. $news_id = ($wiersz['news_id']);
  19.  
  20. echo '<link rel="stylesheet" type="text/css" href="functions/newsy.css" media="screen"/>';
  21. echo '<table name="news" class="news" cellpadding="3" cellspacing="0">';
  22. echo '<tbody>';
  23. echo '<tr align="left">';
  24. echo '<td colspan="2" rowspan="1" name="news_title" class="news_title">'.ucfirst($tytul).'</td>';
  25. echo '</tr>';
  26. echo '<tr align="justify">';
  27. echo '<td colspan="2" rowspan="1"><b>'.ucfirst($tresc).'</b>';
  28. echo ucfirst($ful_tresc);
  29.  
  30.  
  31. echo '</td>';
  32. echo ' </tr>';
  33. echo '<tr>';
  34. echo '<td name="news_autor" class="news_autor"><b>Autor: </b>'.ucfirst($autor).'</td>';
  35. echo '<td name="news_data" class="news_data">'.ucfirst($data).'</td>';
  36. echo '</tr>';
  37. echo '</tbody>';
  38. echo '</table>';
  39. echo '<br />';
  40. echo '<center>';
  41. echo '<INPUT TYPE="BUTTON" value="Wstecz" class="wstecz" onClick="history.back()" />';
  42. echo '</center>';
  43. echo '<br />';
  44. }
  45.  
  46. ?>
  47. // BOTTON KTÓRY PO NACIŚNIĘCIU MA PRZENIEŚĆ MNIE DO KOLEJNEGO NEWSA PO nr DI (news_id) OD NIŻSZEGO DO WYŻSZEGO.
  48. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo pobierz($numer); ?>'" />
  49. <?php
  50. }
  51.  
  52. // POKAZUJE KOLO PRZYCISKU JAKI NEWS JEST WYŚWIETLANY AKTUALNIE W/G id (POMOCNICZE TYMCZASOWO)
  53. echo $numer;
  54. // MOJA FUNKCJA
  55. function pobierz($numer) {
  56. $pytanie = "SELECT MIN(news_id) FROM `newsy` WHERE `news_id` > ".$numer."";
  57. $wykonaj = mysql_query($pytanie);
  58. if(mysql_num_rows($wykonaj) > 0) {
  59. $wiersz = mysql_fetch_array($wykonaj);
  60. return $wiersz['news_id'];
  61. }
  62. else {
  63. return "nie ma nusa";
  64. }
  65. }

Po kliknięciu na "kolejny news" a adresie przeglądarki wyskakuje
Kod
http://szkolne-kola.comuf.com/index.php?news=
po znaku = powinien pokazać sie ny ID
ChrisB
napisałeś że zmieniłeś wszystko wg wskazówek:P

  1. SELECT news_id FROM newsy WHERE news_id > ".$numer." ORDER BY news_id ASC LIMIT 1";


min(id_news) nie zwraca pola nazwanego id_news
jesli chcesz zostawic swój sql - to zmień na min(id_news) as id_news
korey
Yyyyyy...
Wiesz.. nie pisałem tego zapytania.. i wiesz co.? taj napisałem tak jak mówiłeś..
działa.. biggrin.gif biggrin.gif
Co mogem dać na koniec by jak nie będzie większego in znikał button
----------------------------------------------

Już sobie poradziłem biggrin.gif

Do:
  1. ?>
  2. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo pobierz($numer); ?>'" />
  3. <?php


Dodałem sobie:
  1. $nastepny_id = pobierz($news_id);
  2. if($nastepny_id != null) {
  3. ?>
  4. <INPUT TYPE="BUTTON" value="kolejny news" class="wstecz" onclick="window.location='http://szkolne-kola.comuf.com/index.php?news=<?php echo pobierz($numer); ?>'" />
  5. <?php



i zamieniłem
Kod
else{
return 'nie ma newsa';
}

Na

Kod
else {
return null;
}


Dzięki za pomoc. Kolejny kłopot dzięki wam rozwiązany. smile.gif
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.