Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak zrobić aby skrypt wyświetlał artykuł?
Forum PHP.pl > Forum > Przedszkole
marmat00
Mam nbaze danych zbudowaną tak:

  1. CREATE TABLE IF NOT EXISTS `mm_article` (
  2. `id` tinyint(255) NOT NULL,
  3. `name` varchar(255) NOT NULL,
  4. `art` varchar(255) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
  7.  
  8.  
  9. CREATE TABLE IF NOT EXISTS `mm_menu` (
  10. `id` tinyint(255) NOT NULL AUTO_INCREMENT,
  11. `kod` varchar(255) NOT NULL,
  12. `zapytanie` varchar(255) NOT NULL,
  13. PRIMARY KEY (`id`)


i chciałbym aby po kliknięciu w link wyświetlał się artykuł.
w kolumnie kod jest takie coś:

  1. <a class="m-menu-tab" href="index.php">art</a><span class="hide"> | </span>


a w kolumnie zapytanie
  1. "SELECT art FROM `mm_article` WHERE `id` = 1 " ;


na stronie index:

  1. <?php
  2.  
  3. $link = mysql_connect("localhost", "system", "system")
  4. or die("Nie udało się połączyć: " . mysql_error());
  5. mysql_select_db('system', $link)
  6. $query1 = 'SELECT zapytanie FROM `mm_menu` ';
  7. $results1 = mysql_query($query1)
  8.  
  9. while ($row1 = mysql_fetch_array($results1)) {
  10. extract($row1);
  11. //echo "$zapytanie" ;
  12.  
  13. $query2 = $zapytanie ;
  14.  
  15.  
  16.  
  17.  
  18. $results2 = mysql_query($zapytanie)
  19.  
  20. while ($row2 = mysql_fetch_array($results2)) {
  21. extract($row2);
  22. echo "$art" ;
  23.  
  24.  
  25. }
  26. }
  27. ?>

jak to zrobić męczę się już 2 dni.
Spawnm
Proszę dodać bbcode oraz nadać sensowny tytuł.
wiiir
Ty chyba jestes niepoważny z ta swoja baza danych, paranoja trzymac w bazie gotowe zapytania do konkretnych artykulow...
zrob to np tak
  1. // robisz link ktory okresla jaki id art bedziesz otwierac czyil np art=1, oczywisie jakie bedziesz mial to juz twoja sprawa
  2. // te id trzymasz w tabeli menu, jak generujesz to sobie przypisujesz do art
  3. <a class="m-menu-tab" href="index.php?act=1">art</a><span class="hide"> | </span>

  1. //odbierasz to id
  2. $id_act = $_POST['act'];
  3. // do zapytania z artykulami przekazyjesz jaki id art ma ci pobrac
  4. $query1 = 'SELECT * FROM mm_article where id = '.$id_art;
  5. //wykonujesz zapytanie
  6. $results1 = mysql_query($query1)
  7. // robisz tablice wynikowm jaka ci tam pasuje
  8. $row1 = mysql_fetch_array($results1) ; //zakladam ze bedzie tylko jeden art o konkretnym id
  9. // wyswietlasz nazwe artykulu
  10. echo $row1['name'];
masiakla
@wiiir:
1. A znajdziesz przy takim wywołaniu act w $_POST ?
2. Zakładasz, że będzie jeden art o tym id, ale nie zakładasz, że może go nie być w ogóle.
3. O odporności zapytania na sqlinjection już nie wspomnę.
CuteOne
UP:
no przecież nie napisze mu całej wyszukiwarki artykułów sleep.gif

  1. // Tworzenie menu pobieranego z bazy danych //
  2. /*
  3. tabela menu:
  4. id - wiadomo unikatowy, autoin
  5. link_name - czyli tytuł linku
  6. status - link aktywny / nieaktywny
  7. możesz dodać style, kolejność wyświetlania(wtedy dodajesz ORDER BY ) i co tam jeszcze chcesz
  8. */
  9.  
  10. $menu = '';
  11.  
  12. $query = mysql_query("SELECT * FROM mm_article WHERE status = 1"); // pobiera wszystkie aktywne arty
  13.  
  14. while( $row = mysql_fetch_array($query) ) {
  15.  
  16. $menu .= '<a href="index.php?act='.$row['id'].'>'.$row['link_name'].'</a><span>|</span>';
  17. }
  18.  
  19. echo $menu;


  1. //odbierasz to id -> + jakaś filtracja
  2. $id_act = $_GET['act']; // zamiast $_POST ;)
  3. // do zapytania z artykulami przekazyjesz jaki id art ma ci pobrac
  4.  
  5. $results = mysql_query("SELECT * FROM mm_article where id = ".$id_art) or die(mysql_error());
  6. // robisz tablice wynikowm jaka ci tam pasuje
  7. $row = mysql_fetch_array($results) ; //zakladam ze bedzie tylko jeden art o konkretnym id
  8. // wyswietlasz nazwe artykulu
  9. echo $row['link_name'];
masiakla
Chodzi mi głównie o druga część kodu. Pod act można wrzucić cokolwiek.

Punkt 3 mojego postu:
Cytat
$id_act = $_GET['act']; // zamiast $_POST winksmiley.jpg
$results = mysql_query("SELECT * FROM mm_article where id = ".$id_art) or die(mysql_error());

A tu zabezpieczenie się w tym przypadku jest bajecznie proste przed np. "1; DROP TABLE mm_article; --", z resztą żeby nie męczyć się i nie próbować szukać tabel, można zastrzyk rozwinąć.

Punkt 2 poprzedniego postu:
Cytat
$results = mysql_query("SELECT * FROM mm_article where id = ".$id_art) or die(mysql_error());
$row = mysql_fetch_array($results);
echo $row['link_name'];

Już nie pamiętam czy poleci warning czy fatal, ale w przypadku kiedy mysql_query nie zwróci nic z zapytania, brak rekordów, bo może się tak zdarzyć, że ktoś klepnie numerek jaki mu się podoba w adresie, to zaliczymy bardzo piękny error z php. A zabezpieczenie przed tym też jest bardzo proste.

Wychodzę z założenia, że jak już się komuś pomaga/podpowiada/whatever powinno się to robić rzetelnie. Jeżeli ktoś się pyta o tak podstawową sprawę, to raczej nei czaji zagadnień z zakresu sql injection, może gdzieś o tym słyszał, ale raczej nie wie nic. A dostawienie dwóch if'ów to nie jest wielki wysiłek.
marmat00
do kodu "wiiir" wywala taki błąd:

  1. Parse error: syntax error, unexpected T_VARIABLE in /var/www/virtual/system.marmathosting.pl/htdocs/index.php on line 105
amii
Brak średnika ?
$results1 = mysql_query($query1)
marmat00
I NADAL TO SAMO
yevaud
Cytat(marmat00 @ 5.09.2010, 15:12:07 ) *
I NADAL TO SAMO


zamiast ryczec, wygoogluj co znaczy ten blad i sprawdz dlaczego wyskakuje w tej linii(nawet nie wkleiles co masz w tej linii) - to jest blad skladni
marmat00
  1. $row1 = mysql_fetch_array($results1) ;


Dodałem średnik tutaj

  1. $results1 = mysql_query($query1) ;


i teraz mam takie coś:

  1. Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/virtual/system.marmathosting.pl/htdocs/index.php on line 106
masiakla
Po za tym
Cytat(PHPManual)
For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.
For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

Więc coś w zapytaniu masz zwalone.

Swoją droga popraw to wyświetlanie tak by nie było jaj jak nie ma artykułu o danym id:
  1. if($row = mysql_fetch_array($results1)){
  2. //tu wykonujesz jak jest art
  3. } else {
  4. //a tu jak go nie ma
  5. }


Po za tym co to jest 105 i 106 linia, nie jestem w stanie tego odnieść.
Cysiaczek
-> Przedszkole
wiiir
Cytat(masiakla @ 5.09.2010, 01:42:05 ) *
@wiiir:
1. A znajdziesz przy takim wywołaniu act w $_POST ?
2. Zakładasz, że będzie jeden art o tym id, ale nie zakładasz, że może go nie być w ogóle.
3. O odporności zapytania na sqlinjection już nie wspomnę.


ad 1. Byla 1 w nocy wiec bylem spiacy moze dlatego napisalem post a nie get bo to chyba oczywiste ze mialo byc get (sry za blad)
ad 2. zalezenia dotyczyly tego jednego przypadku zeby pokazac mu na czym to ma polegac (wiem ze moze go nie byc albo moze byc stringiem itd)
ad 3. chyba zartujesz ze napisze mu caly gotowy skrypt z filtracja danych.

Napialem mu 5 linijek kodu zeby zrozumial jak moze to zrobic wiec nie bede pisal obslugi wszystkich mozliwych bledow
A jesli ktos bezmyslnie wkleja podany kod do swojego skryptu no to gratulacje lol.
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.