Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wywolac wiecej elementow z bazy danych o zadanym atrybucie?
Forum PHP.pl > Forum > PHP
kunass2
Witam!

Poszukuje rozwiazania do takiego problemu:


Mam kod php za pomoca ktorego z dwoch tabel wyswietlam pojedyncze rekordy, mianowicie:
  1.  
  2. <?php
  3. require "connection.php";
  4. connection();
  5.  
  6. $result = mysql_query("SELECT * FROM wiersz WHERE id = {$_GET['ids']}")
  7. or
  8. $result = mysql_query("SELECT * FROM zlote_mysli WHERE id = {$_GET['zm']}");
  9.  
  10. if (isset($_GET['ids']))
  11. {
  12.  
  13. $wiersz = mysql_fetch_object($result);
  14.  
  15.  
  16. echo $wiersz->autor; //*wyswietlam rekord z pierwszej tabeli(wiersz)
  17. echo $wiersz->tytul;
  18. echo $wiersz->tresc;
  19.  
  20. }
  21.  
  22. elseif (isset($_GET['zm']))
  23. {
  24.  
  25. $zlote_mysli = mysql_fetch_object($result);
  26.  
  27. echo $zlote_mysli->autor;
  28. echo $zlote_mysl->tytul;
  29. echo $zlote_mysl->tresc; //*wyswietlam rekord z drugiej tabeli(zlote_mysli)
  30. }
  31.  
  32. else
  33.  
  34. echo "";
  35. ?>

No wlasnie i teraz w jaki sposob mozna stworzyc taka mozliwosc zeby uzytkownik jak kliknie na przycisk np" wiecej" dostanie ponizej pozostale rekordy o konkretnej wartosci atrybutu. Czyli:

Jest tabela( id, autor, tytul, tresc). Za pomoca get i atrybutu ID wyswietla sie jakis caly wiersz z tabeli. Jak teraz napisac kod zeby wyswietlilo sie ponizej w ten sam sposob wiecej wierszy z tabeli o takim samym autorze jak ten wybrany?

tu jest przyklad o co mi chodzi. Chce zeby z bazy wyswietlilo pod spodem wiecej wierszy z tabeli o tym samym autorze "amelia". Jak to zrobic?
kokers
yyy. Jeśli chcesz żeby pojawiły się pozostałe wiersze bez przeładowania strony to nie pozostaje nic innego jak AJAX i odpowiednie zapytanie do bazy gdzie sprawdzasz
  1. WHERE autor LIKE 'amelia'

Jeśli z przeładowaniem to tylko warunek odpowiedni.
I tak na wszelki wypadek. Wyświetlanie tych rekordów w pętli.
kunass2
no wlasnie czyli

  1. $result = mysql_query("SELECT * FROM zlote_mysli WHERE autor LIKE $zlote_mysli->autor");
  2.  


chodzi mi o to zeby on sam wybieral reszte na podstawie autora jaki zostal wybrany. Tyle ze nie moge mu podac wartosci Amelia bo w kazdym przypadku mi wyrzuci amelie, i nie bedzie ona zmienna. Czy tak bedzie dobrze?

I jeszcze jedno. Nie wiem jak podlaczyc pod a href petle ktora ma wykonywac po przycisnieciu, np:


  1. <a href="wiecej rekordow o autorze $zlote_mysli->autor" id="tratata">pokaz wiecej wierszy tego autora</a>
  2.  
  3. <?php
  4. $result = mysql_query("SELECT * FROM zlote_mysli WHERE autor LIKE $zlote_mysli->autor");
  5.  
  6. $zlote_mysli = mysql_fetch_object($result);
  7.  
  8. for($i = 0; $i <= count($zlote_mysli->id); ++$i){ //tu jest kod php ktory teoiretycznie ma dzialac po kliknieciu na hrefa.
  9.  
  10. echo $zlote_mysli->autor;
  11. echo $zlote_mysl->tytul;
  12. echo $zlote_mysl->tresc;
  13.  
  14. ?>


Potrzebuje pomocy zeby zweryfikowac ten drugi kod php i pokazac jak podlaczyc php do hrefa zeby zadzialalo?
kokers
jeśli już to, jak wyświetlisz sobie dany wiersz autora dodaj link na końcu w stylu:

  1. <a href="http://twojadomena/nazwaskryptu.php?autor=<?php echo $zlote_mysli->autor;?>" id="tratata">pokaz wiecej wierszy tego autora</a>


i w pliku do którego się odniesiesz pobierasz autora dla którego chcesz pobrać listę:

  1. $autor = mysql_real_escape_string($_GET['autor']); // poczytaj o zabezpieczeniu prze sqlinjection


i zapytanie:

  1. $result = mysql_query("SELECT * FROM zlote_mysli WHERE autor LIKE '$autor'"); //przy stringach zmienna musi być w apostrofy ujęta.


i potem wyświetlanie z pomocą while. poczytaj o tym tutaj:
http://www.kursy.czestochowaonline.pl/mysql/3.html
kunass2
czyli moj kod powinien wygladac nastepujaco:
  1.  
  2. <?php
  3. require "connection.php";
  4. connection();
  5.  
  6. $result = mysql_query("SELECT * FROM wiersz WHERE id = {$_GET['ids']}")
  7. or
  8. $result = mysql_query("SELECT * FROM zlote_mysli WHERE id = {$_GET['zm']}");
  9.  
  10. if (isset($_GET['ids']))
  11. {
  12.  
  13. $wiersz = mysql_fetch_object($result);
  14.  
  15.  
  16. echo $wiersz->autor; //*wyswietlam rekord z pierwszej tabeli(wiersz)
  17. echo $wiersz->tytul;
  18. echo $wiersz->tresc;
  19.  
  20. }
  21.  
  22. elseif (isset($_GET['zm']))
  23. {
  24.  
  25. $zlote_mysli = mysql_fetch_object($result);
  26.  
  27. echo $zlote_mysli->autor;
  28. echo $zlote_mysl->tytul;
  29. echo $zlote_mysl->tresc; //*wyswietlam rekord z drugiej tabeli(zlote_mysli)
  30. echo '<a href="http://twojadomena/nazwaskryptu.php?autor=';
  31. echo $zlote_mysli->autor;
  32. echo 'id="tratata">pokaz wiecej wierszy tego autora</a>';
  33.  
  34. require('autor.php');
  35.  
  36. }
  37.  
  38. else
  39.  
  40. echo "";
  41. ?>



a w pliku autor.php:
  1. <?php
  2. // w tym momecie musze sie jeszcze raz laczyc z ta sama baza danych?
  3.  
  4. $result = mysql_query("SELECT * FROM zlote_mysli WHERE autor LIKE '$autor'");
  5.  
  6. if (isset($autor)) {
  7. $autor = mysql_real_escape_string($_GET['autor']);
  8. for($i = 0; $i <= count($zlote_mysli->autor); ++$i)
  9.  
  10. {
  11.  
  12. echo $zlote_mysli->autor;
  13. echo $zlote_mysl->tytul;
  14. echo $zlote_mysl->tresc;
  15.  
  16. }
  17.  
  18.  
  19. }
  20. ?>
  21.  
  22.  


o zabezpieczeniach dopiero poczytam, ale czy tak bedzie wygladal moj kod?
kokers
Ten drugi na pierwszy rzut oka powinien być mniej więcej tak:
  1. <?php
  2. // w tym momecie musze sie jeszcze raz laczyc z ta sama baza danych? <- jeśli jest to osobny, plik nowe wywołanie to tak.
  3.  
  4. if (isset($autor)) {
  5. $autor = mysql_real_escape_string($_GET['autor']);
  6. $result = mysql_query("SELECT * FROM zlote_mysli WHERE autor LIKE '$autor'");
  7.  
  8.  
  9. for($i = 0; $i < mysql_num_rows($result); ++$i)
  10.  
  11. {
  12. $zlote_mysli = mysql_fetch_object($result);
  13. echo $zlote_mysli->autor;
  14. echo $zlote_mysl->tytul;
  15. echo $zlote_mysl->tresc;
  16.  
  17. }
  18.  
  19.  
  20. }else{
  21. //jakis komunikat ze nie wybral autora
  22. }
  23. ?>
kunass2
zauwazylem ze w tym pierwszym link a href bedzie tylko przekierowywal na strone z wybranymi wierszami danego autora. Aleone beda sie juz wyswietlac wczeniej bez klikania bo wlaczylem przeciez:

  1. require('autor.php');


a w autor.php lacze sie z baza, szukam tych rekordow i je wyswietlam, wiec uzytkownik bez klikania w hrefa juz bedzie mial wszystkie wyswietlone... mam racje?

Bo ja docelowo chcialem zeby to reagowalo dopieropo kliknieciu.

kokers
nie zauważyłam, że już tam require wstawiasz. masz rację, w ten sposób to się będzie wyświetlało.

Masz dwie opcje.
- Albo po kliknięciu przekieruje usera na stronę z listą wierszy (czyli autor.php). Wtedy pozostaje wszystko bez zmian, tylko usuwasz tego require i masz wiersz i listę wierszy danego autora jako osobne strony.
- Albo po kliknięciu poprzez AJAX załaduje się wynik pliku autor.php. Ale żeby można było tego dokonać, odsyłam do np. jQuery i funkcji .load() lub prototype i funkcji update().
kunass2
no wlasnie, ja chcialbym zeby to sie zaladowalo na tej samej stronie... po prostu wyswietlilo kolejne wiersze z tabeli... o zadanym atrybucie... w tymprzypadku tego samego autora co wybrany. Dzieki, jeszcze popatrze... i zapytam ponownie.
AndyPSV
  1. $q = mysql_query(); if(mysql_num_rows($q) > 0) while($_r = mysql_fetch_array($q)) $r[] = $_r;
  2.  
  3. var_export($r);
kunass2
w ktorym miejscu powinienem to wstawic? Jakbys mogl pomoc w ten sposob to dziekuje...


glownie chodzi tez o to jak podlaczyc finkcje pod href zeby ona zostala wywolana nie odrazu po zaladowaniu strony tylko po kliknieciu hrefa...
AndyPSV
musisz zrobic strone z przeladowaniem

  1. <a href='URLtwojskrypt.php'>twoj link</a>

w pliku twojskrypt.php wstawiasz kod, ktory ma wykonac akcje, a nastepnie przekierowujesz na ta sama strone:

  1. <?php
  2.  
  3. // tu akcje
  4. exit(header('Location: httpURL'));
  5.  
  6. ?>


na twoim miejscu znalazlbym sobie kolege co zna php (poznal na forum albo znalazl w swoim otoczeniu)
kokers
matko.... wystarczy AJAX. naprawdę... Szukaj o load w Jquery lub update w prototype. Poczytaj o tym, spróbuj, a jak będziesz miał jakiś problem pytaj dalej.
AndyPSV
chodzi o to, ze kolega nie zna php (podstaw), wiec pominmy gadke o ajax (albo jquery ;>)
jesli chcesz uzyc jquery to musisz i tak najpierw opracowac podstawowy kod
kokers
sorry, ale nie rozumiem takiej postawy. Skoro chłopak pisze na forum i próbuje, to znaczy że chce się nauczyć. Nie widzę żadnego problemu aby przy okazji nauki php poznał jedną czy dwie funckje jakiejś biblioteki js... Każdy kiedyś zaczynał...
kunass2
http://www.kursy.czestochowaonline.pl/mysql/3.html dostalem od Was ten link... to fakt nie znam wielu podstaw, ale mam ochote sie dowiedziec. A tam jest duzo na ten temat, tylko ze zanim to przestudiuje minie troche czasu, ale dam rade. Dzieki za pomoc. Ale jakby sie dalo jakos bez Ajax i JQuery to bede wdzieczny bo o tym to ja tylko slyszalem, a php juz analizuje od tygodnia i probuje go wykorzystac...wink.gif wymyslilem cos takiego:


  1. <?php
  2. require "connection.php";
  3. connection();
  4.  
  5. $result = mysql_query("SELECT * FROM zlote_mysli WHERE type = {$_GET['tp']}");
  6.  
  7.  
  8.  
  9. if (isset($_GET['tp']))
  10. {
  11. while($zlote_mysli = mysql_fetch_row($result)){
  12.  
  13.  
  14.  
  15. echo $zlote_mysli->type;
  16. echo $zlote_mysli->tresc;
  17. echo $zlote_mysli->autor;
  18. }
  19. }
  20. else
  21. echo "nie ma nic";
  22. ?>



Chcialem zeby mi wybralo z tabeli zlote_mysli wszystkie wiersze ktore maja okreslona wartosc pola type i je wypisalo. Pozniej ten link ktory mi wygeneruje kod(czyli *.php?tp=costam) chcialem wykorzystac do przekierowania pod hrefy. Polaczylem sie z baza, narzucilem zapytanie, zastosowalem petle while, wypisalem. Ale nie dziala. Moja kolumna type w tabeli ma rodzaj pola longtext. Wazne to jest?
kokers
ważne, bo stringi dajesz w apostrofach. a stringiem jest typ m.in longtext, text, varchar. No i jeśli to są krótkie teksty (jak nazwa autora) to nie ma sensu dawać longtext tylko wystarczy varchar.
spróbuj tak:

  1. $result = mysql_query("SELECT * FROM zlote_mysli WHERE type LIKE '{$_GET['tp']}'");
kunass2
nie dziala, a na pewno mam dobrze konstrukcje z while? bo zakladajac ze sql jest juz poprawnie tylko to moze budzic watpliwosci...
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.