Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Linki(odnośniki) i rekordy z bazy danych
Forum PHP.pl > Forum > Przedszkole
kvachu
No więc przyszła pora na coś w PHP czego jeszcze nie robiłem i coś czego się bałem =V. Nie wiem nawet jak to wytłumaczyć, ale postaram się, bo wiem, że dla was to pestka zrobić to co ja chcę.
Mianowicie mam na stronie litery alfabetu A B C D E F... i tak dalej i po kliknięciu w nie chcę by mi wyskakiwały gry zaczynające się na dane litery. Tytuły mam w bazie danych i też mam kolumnę od literki. Mógłbym porobić osobno dokumenty a.php, b.php, c.php itd., ale to trochę niepraktyczne i po prostu chciałbym mieć jeden tylko dokument np. games.php odpowiadający za wyświetlanie gier z liter alfabetu.


Jeszcze takie drugie pomniejsze pytanko.
Czy jest jakaś funkcja, która usunie mi z ciągu znaków znak " ' "? Próbowałem tego:
  1. $title2 = str_replace("'", "", $title2);

Ale niestety usuwa mi ten znak i wszystko inne co się za nim znajduje =[.

Sorry za takie lamesrkie pytania, ale ja nigdy jakimś pro programistą PHP nie będę, bo nie ma co ukrywać jestem na to za głupi. A używam tego tylko na własne potrzebny, dla stronek o moich hobby itd. Nie mam zamiaru zarabiać tworząc dla kogoś. Mam przerwy w używaniu PHP około dwu-trzymiesięczne, bo jak wspomniałem bawię się tym tylko wtedy kiedy chcę coś dla siebie zrobić.

Z góry dzięki za pomoc.
Blame
Każda literka powinna być linkiem, który będzie przekierowywał na adres np. games.php?letter=twoja_literka. Następnie w pliku games.php za pomocą $_GET odbierasz daną literkę i pobierasz gry z bazy które pasują do zapytania: "SELECT * FROM tabela_z_grami WHERE nazwa_gry LIKE '$_GET['letter']%'". Pamiętaj jeszcze o filtrowaniu tych danych, żeby to rzeczywiście była litera a nie jakiś syf. A jeśli chodzi o usunięcie apostrofu to może
  1. str_replace("\'", "");

PS. Pisane na szybko tongue.gif
sweter
To może zapytanie do MySQL zrób takie:

(dla gier zaczynających się na A...)

Kod
SELECT *
FROM `tabela z grami` 
WHERE `tytul_gry` LIKE 'A%'


(dla gier zaczynających się na B...)

Kod
SELECT *
FROM `tabela z grami` 
WHERE `tytul_gry` LIKE 'B%'


itd.

Moim zdaniem to niepotrzebna jest ta kolumna z literkami.

Mam nadzieję, że Ci pomogłem smile.gif

Pozdrawiam
kvachu
No więc mniej więcej już wiem o co chodzi. Jak mam odczytywany games.php przez index.php:
  1. <?php
  2. if (!isset($link)) {
  3. include("games.php");
  4. } else if(file_exists($link.'.php')) {
  5. include("./$link.php");
  6. }
  7. ?>

To games.php działa noemalnie, ale jak klikam w link literki np A:
  1. <a href="games.php?letter=A">


To wywala mi błąd:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gbg\games.php on line 9
W games.php:
  1. <div id="letters">
  2. "<? echo $_GET['letter'];?>" games
  3. </div>
  4.  
  5. <?php
  6.  
  7. $wynik2 = mysql_query ("SELECT * FROM games ORDER BY title asc");
  8. $numer_wpisu = 1;
  9. while ($rekord = mysql_fetch_assoc($wynik2)) {
  10.  
  11. $title = $rekord['title'];
  12. $title2 = $title;
  13. $title2 = str_replace("\'", "", $title2);
  14. $title2 = str_replace(".", "", $title2);
  15. $title2 = str_replace(" ", "", $title2);
  16. $title2 = str_replace("!", "", $title2);
  17. $title2 = str_replace("-", "", $title2);
  18. $title2 = str_replace(",", "", $title2);
  19.  
  20. $title2 = trim($title2);
  21.  
  22. $path = "shots/$title2";
  23. $folder = opendir($path);
  24. $i = 0;
  25. while(false !=($plik = readdir($folder))) {
  26. if($plik != "." && $plik != "..") {
  27. $obrazki[$i]= $plik;
  28. $i++;
  29. }
  30. }
  31. closedir($folder);
  32. $losowy=rand(0,count($obrazki)-1);
  33. $losowy2=rand(0,count($obrazki)-1);
  34. $losowy3=rand(0,count($obrazki)-1);
  35. $losowy4=rand(0,count($obrazki)-1);
  36.  
  37. ?>
  38.  
  39.  
  40. <div id="title">
  41. &nbsp; <a href=""><font color="#e4f4b2"><i><b><? echo $rekord['title'];?></b></i></font></a> (<font color="white"> <? echo $rekord['number'];?> </font>)
  42. <div style="height: 15px; position: absolute; top: 0px; right: 0px;">
  43. Click the title to see all screenshots &nbsp;
  44. </div>
  45. </div>
  46. <div id="utitle"></div>
  47. <div id="sshots">
  48.  
  49. <div id="screen">
  50. <img src="shots/<?php echo $title2; ?>/<?php echo $title2; ?>_title.png" width="160" height="144" border="0" alt="">
  51. </div>

Ale:
  1. <div id="letters">
  2. "<?php echo $_GET['letter']; ?>" games
  3. </div>

Wyświetla się normalnie i przechwytuje literkę =D. Cieszę się, że powoli łapię możliwości $_GET. Ale, gdy zmieniam zapytanie do bazy na takie jakie zaproponowaliście:
  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE title LIKE '$_GET['letter']%'");

To skrypt wali się już na siódmej linii:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in c:\usr\krasnal\www\gbg\games.php on line 7
I nie wyświetla nawet:
  1. <div id="letters">
  2. "<?php echo $_GET['letter']; ?>" games
  3. </div>

W postaci "A" games, jest tylko wyżej podany błąd i nic więcej. Oczywiście za bardzo nie wiem co te błędy znaczą.

Natomiast:
  1. $title2 = str_replace("\'", "", $title2);

Działa połowicznie. Przy tworzeniu nazwy folderu gry przefiltrowanej tym niema apostrofu, ale przy wyświetlaniu ścieżki:
  1. <img src="shots/<?php echo $title2; ?>/<?php echo $title2; ?>_title.png" width="160" height="144" border="0" alt="">

Apostrof się pojawia przez co ścieżka do shotów jest inna i nie wyświetlają się one i jest kilka błędów.

Jeszcze chciałbym wiedzieć jak by musiał wyglądać <a href="">, żeby ładowało linki przez index, a nie w pustej karcie. Próbowałem tak:
  1. <a href="index.php?link=games?letter=A">

Ale nie działa. Oczywiście bez literki to wiem jak ładować dokumenty w index: <a href="index.php?link=games">

W ogóle dzięki za odpowiedź.
imashjan82
W games.php

$numer_wpisu = 1
co to znaczy?

Bo mysql wlasnie tego nie rozumie. Jak przy tym rodzaju błedu pokazuję Ci załuzmy linjie 5 to bład jest w linji 4, juz to rozpracowałem ;-)

  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE ( title LIKE '".$_GET[letter]."%')");


Tyle Ci mogę pomóc
kvachu
@imashjan82
Ale ta zmienna nie jest nawet w zapytaniu mysql i jest poprawnie zadeklarowana. Jedyne w czym pomogłeś to w oczyszczeniu skryptu z tej zmiennej, która tu nei powinna być =P. Ale to nie o to mi chodzi =[.

[EDIT]
Znalazłem jednego byka. W:
  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE ( title LIKE '".$_GET[letter]."%')");

Schowały mi się znaki "()". Mimo wszystko wciąż pozostaje teraz ten błąd:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\gbg\games.php on line 9

[EDIT2]
Naprawdę głupie i porąbane to jest, bo to:
  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE title LIKE '".$_GET[letter]."%'");

Działa, ale tylko jak wchodzę z głównego index.php, a jak z literki to już nie ; [.

[EDIT3]
OK udało mi się zrobić i działa =DDD. Wystarczyło link zmienić na:
  1. <a href="index.php?link=games&letter=A">

I jest elegancko, dzięki ziomsy!
imashjan82
Przepraszam ale :

To jest twoje (tak jak pokazales w przykladzie):
  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE title LIKE '$_GET['letter']%'");

zaraz za nawiasem klamrowym dałeś procent, wiec to nie mogło działać nie rozdzieliłeś tego.

A to ja Ci podeslalem:
  1. $wynik2 = mysql_query ("SELECT * FROM games WHERE ( title LIKE '".$_GET[letter]."%')");

A nawiasy dałęm po to abyś mógł zrozumieć błąd.

P.S. właśnie sam w tej chwili robię to, ale troszkę inaczej niż TY, bo mi zależy na jak najbardziej czytelnym adresie. Powodzenia dalej.

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.