Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&

dry.gif

Ten post edytował My4tic 25.09.2005, 11:33:31


--------------------
Załóż konto na dropbox.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
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.


--------------------
Nie lubię jednorożców.
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 sadsmiley02.gif


--------------------
Załóż konto na dropbox.
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


--------------------
Załóż konto na dropbox.
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 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 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 aarambo.gif

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


Nie mam pojecia co to znaczy winksmiley.jpg ale uwierze na słowo ze tak bedzie lepiej :-)

Dzięki za pomoc.


--------------------
Załóż konto na dropbox.
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


--------------------
Załóż konto na dropbox.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 17:27