Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt "komentarze", nie działa gdy plik ma parametry
majestiq
post
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Znalazłem w siecie taki prosty skrypcik:

  1. <?php
  2. */
  3. if ($message)
  4.    {
  5.    /* uncomment the next two lines to strip out html from input */
  6.    /* $name = strip_tags($name); */
  7.    /* $message = strip_tags($message); */
  8.    $message = ereg_replace("r\nr\n", "\n<P>", $message);
  9.    $date = date("l, F j Y, h:i a");
  10.    $message = "<B>$name </B> -- $date<P> $message <BR><HR>";
  11.    $fp = fopen (basename($PHP_SELF) . ".comment", "a");
  12.    fwrite ($fp, $message);
  13.    fclose ($fp);
  14.    }
  15. @readfile(basename(($PHP_SELF . ".comment")));
  16. ?>
  17. <FORM method="post">
  18. <b>Your name:</b><BR><INPUT name="name" type="text" size="55"><BR>
  19. <b>Your comment:</b><BR><TEXTAREA name="message" rows=10 cols=55 wrap=virtual>
  20. </TEXTAREA><BR>
  21. <INPUT name="submit" type="submit" value="Post your comments">
  22. </FORM>
  23.  
  24. </body>
  25. </html>


Działa on w ten sposób, że kod dokleja się do każdej podstrony na której ma znajdować się możliwość dodania komentarza, i jeżeli komentarz zostanie dodany
to skrypt tworzy spobie plik: nazwa_danej_podstrony.php.comment i na tej podstawie wiadomo, że dany komentarz ma się wyświetlić tylko na danej stronie.
Niestety skrypt nie działa dla stron z parametrami np: nazwa_danej_podstrony?action=file&id=10 bo wtedy utworzy tak jak wyzej poprostu plik nazwa_danej_podstrony.php.comment

Chyba trzeba by tutaj zamiast PHP_SELF użyć REQUEST_URI albo coś w tym stylu.

Czy ktoś mógłby mi pomóc to przerobić ?

Ten post edytował majestiq 16.12.2008, 11:52:37
Go to the top of the page
+Quote Post
thornag
post
Post #2





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Dodaj do funkcji parametr z customowa nazwa pliku i uzyj go pozniej do zapisania go pod odpowiednia nazwa.
Go to the top of the page
+Quote Post
majestiq
post
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Ale nazwa pliku jest już z góry ustalona, więc on sam powinien sobie ją pobrać, tylko tak jak mówie pobiera ale pomija wszystkie dodatkowe parametry po "?".
Go to the top of the page
+Quote Post
misiek172
post
Post #4





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


wydaje mi sie że chodzi tutaj o parametr:

basename

http://pl.php.net/manual/pl/function.basename.php

pobiera on główną nazwe pliku obcinając reszte

Ten post edytował misiek172 16.12.2008, 12:10:39
Go to the top of the page
+Quote Post
majestiq
post
Post #5





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


No chyba tutaj właśnie leży problem, tylko jak to poprawić ?
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
ale pomija wszystkie dodatkowe parametry po "?".

$_SERVER['QUERY_STRING']. I proponowałbym dodatkowo ubezpieczyć ten ciąg, bo ktoś może Ci narobić kuku. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
majestiq
post
Post #7





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Zajebiście, działa (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Co do ubezpieczenia ciągu to chodzi ci np. o htmlspecialchars ?

No i jeszcze jedna sprawa, jakby to przerobić, żeby nie korzystać z plików .txt
tylko z bazy danych.

Do podmiany byłoby tylko to:

  1. <?php
  2. $fp = fopen (basename($_SERVER['QUERY_STRING']) . ".comment", "a");
  3.   fwrite ($fp, $message);
  4.   fclose ($fp);
  5.   }
  6. @readfile(basename(($_SERVER['QUERY_STRING'] . ".comment")));
  7. ?>
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Co do ubezpieczenia ciągu to chodzi ci np. o htmlspecialchars ?

Nie. Rób tak, aby nikt nie mógł nadpisać Ci dowolnego pliku albo zapisywać go gdzie ktoś inny zechce, a nie Ty. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat
No i jeszcze jedna sprawa, jakby to przerobić, żeby nie korzystać z plików .txt
tylko z bazy danych.

To już wtedy przerób cały skrypt, bo w takiej strukturze będzie on po prostu mało efektywny. Jak? Skryptów komentarzy masz sporo, właściwie, to wystarczy Ci parę podstawowych zapytań, które są opisane w pierwszym lepszym kursie MySQL. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
majestiq
post
Post #9





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Cytat(erix @ 17.12.2008, 09:59:55 ) *
Nie. Rób tak, aby nikt nie mógł nadpisać Ci dowolnego pliku albo zapisywać go gdzie ktoś inny zechce, a nie Ty. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Łatwo powiedziec (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Cytat
To już wtedy przerób cały skrypt, bo w takiej strukturze będzie on po prostu mało efektywny. Jak? Skryptów komentarzy masz sporo, właściwie, to wystarczy Ci parę podstawowych zapytań, które są opisane w pierwszym lepszym kursie MySQL. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


Wlasnie specjalnie szukalem jak najmniej skomplikowanego skryptu, zeby latwo bylo go przerobic na wersje bazodanową.
Czemu myslisz, ze zamiana tej czesci kodu, ktora podalem bedzie malo efektywna ?
Narazie chyba jednak bede musial pozostac przy tej wersji.

Poprostu chcialbym w jakiejs kolumnie zapisac nazwe pliku (tak jak nazwa pliku w wersji textowej)
i do niej przyporzadkowac tresc komentarza, autora i date.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Łatwo powiedziec

Jeśli zaglądało się do manuala i odrobinę myśli, to łatwo.

Cytat
Czemu myslisz, ze zamiana tej czesci kodu, ktora podalem bedzie malo efektywna ?

Skoro zapisujesz nazwy plików, to efektywniej będzie zapisywać komentarze bezpośrednio do bazy, a nie taką hybrydę. Po to są bazy danych, aby z nich korzystać. (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
majestiq
post
Post #11





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


Cytat(erix @ 17.12.2008, 15:33:34 ) *
Jeśli zaglądało się do manuala i odrobinę myśli, to łatwo.

A jak np. ktos moze mi nadpisac ten plik lub zapisać go gdzieś indziej (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

NIe wiele już brakuje.
Tylko nie mogę wyświetlić tego co chce za pomocą SELECTa :/

  1. <?php
  2. Header('Content-type: text/html; charset=utf8');
  3.  
  4.  
  5. $conn = mysql_connect('localhost, 'mp', 'pass');
  6. mysql_select_db ("mp4") or die ("Nie mozna wybrac bazy danych");
  7.  
  8. $q = 'USE mp4';
  9.  
  10.  
  11.  
  12. $ans = mysql_query($q, $conn);
  13. if (!$ans) print mysql_error($conn);
  14.  
  15.  
  16.    $strona = $_SERVER['QUERY_STRING'];
  17.   $nick = $_POST['nick'];
  18.   $message = $_POST['message'];
  19.   $message = strip_tags($message);
  20.   $message = ereg_replace("r\nr\n", "\n<P>", $message);
  21.   $date = date("l, F j Y, h:i a");
  22.  
  23. if ($message)
  24.  
  25.  
  26.  
  27.   {
  28.   $qrry = "INSERT INTO komentarze (query_string, nick, tresc, data) VALUES ('$strona', '$nick', '$message', '$data');";
  29.    $ans = mysql_query($qrry, $conn);
  30.   if (!$ans) print mysql_error($conn);
  31. }
  32.  
  33.  
  34. $wypisz = "SELECT * FROM komentarze WHERE query_string='$strona'";
  35. $answ = mysql_query($wypisz, $conn);
  36.  
  37. // wyświetlany wyniki zapytania
  38.    while($rek = mysql_fetch_array($answ)) {
  39.        echo $rek['nick]."<br />";
  40.              }
  41.  
  42. ?>
  43.  
  44.  
  45. <FORM method="post">
  46. <p style="font-size:10px; color:#000; font-family:arial;">Nick:</p><BR><INPUT name="nick" type="text" size="55"><BR>
  47. <p style="font-size:10px; color:#000; font-family:arial;">Komentarz:</p><BR><TEXTAREA name="message" rows=10 cols=55 wrap=virtual>
  48. </TEXTAREA><BR>
  49. <INPUT name="submit" type="submit" value="Dodaj komentarz">
  50. </FORM>


Ten post edytował majestiq 18.12.2008, 15:21:10
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
A jak np. ktos moze mi nadpisac ten plik lub zapisać go gdzieś indziej

Będę sobie wpisywał nazwy plików w QUERY_STRING. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ale widzę, że poprawiłeś basename" title="Zobacz w manualu PHP" target="_manualm.

Cytat
Tylko nie mogę wyświetlić tego co chce za pomocą SELECTa :/

Sprawdź składnię kodu.
Go to the top of the page
+Quote Post
majestiq
post
Post #13





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


No wlasnie sprawdzalem juz chyba ze 100 razy i probowalem na rozne sposoby ale SELECT mi dalej nie działa :/
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jak ma zadziałać, jak masz niepoprawnie skonstruowane zapytania...?

Masz funkcję mysql_error" title="Zobacz w manualu PHP" target="_manual i kursy MySQL. Korzystaj.
Go to the top of the page
+Quote Post
majestiq
post
Post #15





Grupa: Zarejestrowani
Postów: 235
Pomógł: 0
Dołączył: 26.10.2006

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


E tam niepoprawnie, było bylo dobrze tylko jakos zle to testowalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
W kazdym razie dzieki za pomoc !
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: 18.09.2025 - 04:28