Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] automatyczne tworzenie linków, Linki z bazy MySQL
CconradD
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Witam
Chciałbym sie zapytać jak można stworzyć takie linki: index.php?funkcja=50. Mam w bazie mysql kilka kategorii, np. kategorie filmów, czy rok produkcji. Jak wyświetlić właśnie za pomocą takiego linku horror (index.php?gatunki=horror), czy np i horror i film z roku 2000 (index.php?gatunki=horror&rok=2000). Czy można "podpiąć" do tego jakąś funkcje i np wartość którą funkcja będzie modyfikować (ndex.php?funkcja=50)? Bardzo dziękuje za wszelką pomoc.

Ten post edytował CconradD 22.04.2008, 14:25:24
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
pyro
post
Post #2





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(CconradD @ 22.04.2008, 15:24:05 ) *
Witam
Chciałbym sie zapytać jak można stworzyć takie linki: index.php?funkcja=50. Mam w bazie mysql kilka kategorii, np. kategorie filmów, czy rok produkcji. Jak wyświetlić właśnie za pomocą takiego linku horror (index.php?gatunki=horror), czy np i horror i film z roku 2000 (index.php?gatunki=horror&rok=2000). Czy można "podpiąć" do tego jakąś funkcje i np wartość którą funkcja będzie modyfikować (ndex.php?funkcja=50)? Bardzo dziękuje za wszelką pomoc.


w adresie takie rzeczy sie przekazuje za pomoca $_GET, przykład:

index.php
  1. <?php
  2.  
  3. $wyraz = $_GET['wyraz'];
  4. echo $wyraz;
  5.  
  6. ?>


jezeli np. teraz wywolasz stronw w ten sposob index.php?wyraz=ciasteczko to na stronie pojawi ci sie "ciasteczko"
Go to the top of the page
+Quote Post
CconradD
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Dzięki wielkie. Mam jeszcze pytanie, jak stworzyć z nazw w bazie takie linki. Czyli np mam 'ciasteczko', 'tort', 'ciasto' i w jaki sposób to zrobić.
Go to the top of the page
+Quote Post
webdice
post
Post #4


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2. $query = mysql_query ('SELECT `column` FROM `table`');
  3.  
  4. while ($field = mysql_fetch_assoc ($query))
  5. {
  6. print $field['column'] . '<br />';
  7. }
  8. ?>


O coś takiego Ci chodzi?
Go to the top of the page
+Quote Post
CconradD
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Dzięki webdicepl ale nie chodzi mi o samo ich wyświetlenie. Chodzi mi o taka sytuacje: mam w MySQLu 3 filmy gatunku horror, 4 dramat. Chciałbym żeby po wpisaniu index.php?gatunek=horror wyświetlało mi tylko filmy gatunku horror. Przy czym żeby sam umaił wczytać jakie są gatunki (żeby nie definiować je ręcznie).
Go to the top of the page
+Quote Post
webdice
post
Post #6


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Pokaż strukturę tabel z bazy danych.
Go to the top of the page
+Quote Post
CconradD
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Tak wygląda moja baza (jeżeli to jest struktura):

  1. CREATE TABLE movies(
  2. ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT ,
  3. NUM INT,
  4. DATEADD DATE,
  5. COUNTRY TEXT,
  6. CATEGORY TEXT,
  7. YEAR INT,
  8. LENGTH INT,
  9. ACTORS TEXT,
  10. URL TEXT,
  11. DESCRIPTION TEXT,
  12. COMMENTS TEXT
  13. );
Go to the top of the page
+Quote Post
Piniek
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM movies WHERE category={$_GET['gatunek']}

oczywiście przed zapytaniem musisz walidowac zmienna $_GET['gatunek'] aby uniknąć wstrzyknięcia klodu
Go to the top of the page
+Quote Post
webdice
post
Post #9


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




  1. <?php
  2. $query = mysql_query ("SELECT * FROM `movies` WHERE `category` = '" . $_GET['kategoria'] . "'");
  3.  
  4. while ($field = mysql_fetch_assoc ($query))
  5. {
  6. print $field['column'] . '<br />';
  7. }
  8. ?>


Link będzie wyglądał mniej więcej tak:

Kod
index.php?kategoria=horror


Oczywiście umieszczenie _GET w zapytaniu jest dość ryzykowne, ale to już odsyłam Cię do tematu o bezpieczeństwie skryptów.
Go to the top of the page
+Quote Post
CconradD
post
Post #10





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


No działa super (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Właśnie o takie coś mi chodziło. Dzięki wam za pomoc. Jeszcze poczytam o bezpieczeństwie, w razie problemów to będę sie pytał.

Z tego co zrozumiałem, to żeby zapobiedz dostaniu się obcego kodu, to należy walidować zmienne (uściślać jak mają wyglądać). Czy np jeżeli w zmiennej będą cyfry, to sprawdzić czy w zmiennej są cyfry. Ale w zmiennej DESCRIPTION jest tekst, to prócz zamiany cudzysłowów, to inaczej nie mogę tego walidować. Czy dobrze to zrozumiałem? Czy też jest jakiś inny sposób na zabezpieczenia się przed _GET.

Ten post edytował CconradD 22.04.2008, 18:53:11
Go to the top of the page
+Quote Post
Piniek
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 463
Pomógł: 49
Dołączył: 27.12.2007
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Istnieje bardzo wiele możliwości zabezpieczenia.
wiesz ze to na pewno będzie sam tekst wiec możesz dac wyrażenie regularne które bedzie przepuszczać sam tekst nic więcej (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
CconradD
post
Post #12





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Teraz jeszcze trochę poczytałem, a taka forma zabezpieczenia (zamiast walidacji):
  1. <?php
  2. $get = $_GET['kategoria']; 
  3. $query = mysql_query ("SELECT * FROM `movies` WHERE `CATEGORY` = '" . mysql_real_escape_string($get) . "'");
  4.  
  5. while ($field = mysql_fetch_assoc ($query))
  6. {
  7. print $field['column'] . '<br />';
  8. }
  9. ?>

Sorry, że tak zarzucam pytaniami ale pierwszy raz pisze skrypt w którym mi dość zależy na bezpieczeństwie.

Ten post edytował CconradD 22.04.2008, 20:03:15
Go to the top of the page
+Quote Post
pyro
post
Post #13





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(CconradD @ 22.04.2008, 21:02:43 ) *
Teraz jeszcze trochę poczytałem, a taka forma zabezpieczenia (zamiast walidacji):
  1. <?php
  2. $get = $_GET['kategoria']; 
  3. $query = mysql_query (&#092;"SELECT * FROM `movies` WHERE `CATEGORY` = '\" . mysql_real_escape_string($get) . \"'\");
  4.  
  5. while ($field = mysql_fetch_assoc ($query))
  6. {
  7. print $field['column'] . '
  8. ';
  9. }
  10. ?>

Sorry, że tak zarzucam pytaniami ale pierwszy raz pisze skrypt w którym mi dość zależy na bezpieczeństwie.


zabezpieczenie dobre, ale zamiast:
  1. <?php
  2. </br >print $field['column'] . '';
  3. ?>


proponuje dac:

  1. <?php
  2. print htmlentities(stripslashes($field['column']));
  3. ?>



niepotrzebne cudzyslowy i stripslashes dla upiekszenia (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
</br >

Ten post edytował pyro 22.04.2008, 20:33:34
Go to the top of the page
+Quote Post
marcio
post
Post #14





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


I ogolnie jesli to user podaje dane ktore sie potem zapisuja do bazy to daj tez htmlspecialchars() przy zapisywaniu lub wyswietlaniu bo jak nie to bedzie ladny XSS chyba ze sam dodajesz do bazy to jeszcze ujdzie ale lepiej zawsze dac (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
CconradD
post
Post #15





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


Dzięki wam wielkie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) biorę sie za pisanie

Jeszcze jedno pytanie do walidacji. Czy tak zbudowana funkcja (w formularzu ma wybrać plik o rozszerzeniu .xml) jest bezpieczna i poprawna?
  1. <?php
  2. $import_xml = htmlspecialchars(strip_tags(trim($HTTP_POST_VARS['import_xml'])));
  3. if(isset($HTTP_POST_VARS['import_xml']) && !preg_match( '@.xml$@', $import_xml) )
  4. {
  5.  echo 'Pik musi być xml';
  6.  return false;
  7. }
  8. ?>


Ten post edytował CconradD 23.04.2008, 22:17:42
Go to the top of the page
+Quote Post
marcio
post
Post #16





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie uzywaj starych tablic po co uzywaj tylko $_POST/$_GET potem nie wiem czy preg_match masz dobry bo nie znam wyrazen regularnych ale lepiej rozbij nazwe pliku za pomoca explode() lub klasa @Nospor'a i sprawdzaj jakie ma rozszerzenie chyba ze plik uploadujesz czy co tam robisz za pomoca input'a

P.S o gory nie widze zadnej deklaracji funkcji wiec return jest tam chyba zbedne jak cos to daj exit; albo die(); chyba ze to tylko kawalek kodu

Ten post edytował marcio 23.04.2008, 22:08:27
Go to the top of the page
+Quote Post
CconradD
post
Post #17





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 7.04.2007

Ostrzeżenie: (0%)
-----


To jest fragment (część z return jest w funkcji). Co do starych tablic to nawet nie wiedziałem że lepiej jest używać $_POST. Preg_match działa więc chyba jest poprawny. Do wczytania nazwy pliku używam inputa. Ale jak oceniasz bezpieczeństwo?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 21:52