Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> mysql_escape_string / magic_quotes, Funkcja odwrotna
My4tic
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Jest jakas funkcja odwrotna do mysql_escape_string ?

Wrzucam z CMS'a dane do SQL i pozniej chce wyświetlić tekst ale juz bez znaków unikowych.

Po kilkukrotnym przesłaniu danych mam np takie coś:

Kod
<font face=\"\\&quot;\\\\&quot;\\\\\\\\&quot;\\\\\\\\\\\\\\\\&quot;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&quot;Tahoma\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&

(IMG:http://forum.php.pl/style_emoticons/default/dry.gif)

Ten post edytował My4tic 25.09.2005, 11:33:31
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Nie ma, jest co pradwa strip_slashes ale ono chyba nie dziala identycznie odwrotnie jak mysql_escape_string.

A poza tym masz blad gdzie indziej, bo mysql_escape_string() powinno byc uzywane TYLKO przy wstawianiu stringow do bazy danych, gdy je wyciagasz to dostajesz czysty text, bez zadnych slashy.
Go to the top of the page
+Quote Post
My4tic
post
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


CMS wrzuca to tak:

Kod
<?php
include ("config.php");

$aNaglowek = mysql_escape_string($aNaglowek);

$aDBLink = @mysql_connect( "$SQLhost", "$SQLlogin", "$SQLpass" );
  if ( !empty( $aDBLink ) )
      {
           if ( mysql_select_db( "$db", $aDBLink ) == True )
           {
             $aSQL = "select * from content";
             $aQResult = mysql_query( $aSQL, $aDBLink );
               if ( $aQResult == True )
               {
               // -------------------------------------------------------- //

$aSQL = "UPDATE content SET naglowek='$aNaglowek' WHERE id='$id'";
$aQResult = mysql_query( $aSQL );


Jak w PhpMyAdmin sprawdze co jest w komórkach to widać ze są slashe.

Pozniej wyświetlam zawartość bazy:

Kod
<?php
include ("admin/config.php");

$aDBLink = mysql_connect( "$SQLhost", "$SQLlogin", "$SQLpass" );
  if ( !empty( $aDBLink ) )
      {
           if ( mysql_select_db( "$db", $aDBLink ) == True )
           {
             $aSQL = "select * from content";
             $aQResult = mysql_query( $aSQL, $aDBLink );
               if ( $aQResult == True )
               {
                  $aSQL = "SELECT id, naglowek, wstep FROM content WHERE id=1";
                   $aQResult = mysql_query( $aSQL );
                   $aRow = mysql_fetch_array( $aQResult );
                   $aNaglowek = $aRow["naglowek"];


i pozniej normalnie:

Kod
print($aNaglowek);


Kurcze (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Go to the top of the page
+Quote Post
chmolu
post
Post #4





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


Wyłącz wszystkie magic_quotes w php.ini. Wtedy wystarczy, że uzyjesz mysql_real_escape_string i masz problem z głowy. MySQL nie przechowuje slashów w tabeli, więc absolutnie nie ma potrzeby uzywania strip_slashes().

The magic quotes are the only evil.
Go to the top of the page
+Quote Post
My4tic
post
Post #5





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


No niestety dalej ładuje mi slashe do SQL. Uzywam mysql_escape_string. Moze być ta funkcja zamiast mysql_real_escape_string?

Komórka w SQL wygląda tak:

Kod
<font size=\"2\">Mitsubishi Motors i PSA Peugeot Citro&euml;n podpisują umowę dotyczącą produkcji nowych samochod&oacute;w klasy SUV.</font>


a plik php.ini:

Kod
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off    

; Use Sybase-style magic quotes (escape ' with '' instead of \').
magic_quotes_sybase = Off


Ten post edytował My4tic 23.09.2005, 18:23:18
Go to the top of the page
+Quote Post
chmolu
post
Post #6





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


Hmm... dziwne. Sprawdź jeszcze ten kod (może jednak magic_quotes są włączone):

  1. <?php
  2.  
  3. echo "magic_quotes_runtime: ";
  4. echo ini_get('magic_quotes_runtime') . '<br />';
  5. // i analogicznie do pozostałych
  6.  
  7. ?>



Powinieneś uzyć tu funkcji mysql_real_escape_string. To ona jest zalecana dla mysqla. W zasadzie to ktoś może też powiedzieć (np ja (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ), że używanie natywnych funkcji dostępu do baz danych jest poniekąd złą praktyką. Lepiej użyć do tego jakiejś abstrakcji, lub najlepiej rozszerzenia PDO (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
My4tic
post
Post #7





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Okazało sie ze kolejny restart serwera pomógł :-) Pewnie za pierszym razem czegoś nie uruchomiłem ponownie (IMG:http://forum.php.pl/style_emoticons/default/aarambo.gif)

Cytat
że używanie natywnych funkcji dostępu do baz danych


Nie mam pojecia co to znaczy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale uwierze na słowo ze tak bedzie lepiej :-)

Dzięki za pomoc.
Go to the top of the page
+Quote Post
chmolu
post
Post #8





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


miałem na myśli funkcje typu mysql_*, pg_*, oci*
Go to the top of the page
+Quote Post
My4tic
post
Post #9





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Na localu chodzi wszystko ok ale co jesli na serwerze u providera mam włączone magic_quotes i nie chcą tego wyłączyć? Można rozwiązać to w inny sposób?


----------- Edit --------------

OK. Już sobie poradziłem.



Rozwiązanie:

- plik .htaccess w folderze gdzie uruchamiamy skrypty

Treść .htaccess:
Kod
<IfModule mod_php4.c>
php_flag magic_quotes_gpc off
</IfModule>


Do sprawdzenia czy wszystko działa korzystałem z tego skryptu:

  1. <?php
  2.  
  3. if (get_magic_quotes_gpc()==1) {
  4.  
  5. echo ( "Magic quotes gpc - on" );
  6.  
  7. } else {
  8.  
  9. echo ( "Magic quotes gpc - off" );
  10.  
  11. }
  12.  
  13. ?>

gdyż podany przez Chmolu niestety mi nie działał.

Dzięki wszystkim za pomoc.

Ten post edytował My4tic 25.09.2005, 13:56:13
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: 19.12.2025 - 13:28