Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z dodaniem zmiennej zawierającej znak \
Wojtek_kra
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.06.2008

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


Jak w temacie.
Co zrobić, by wpisać do bazy zmienną zawierającą znak '\' np. 'zmienna\25'.
Tu jak widze się wpisało, więc musi być jakiś sposób.
Podejrzewam, że to dla Was żaden problem, a mnie już zajął kilka godzin. sad.gif

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


\ to znak sugerujący że nadchodzi znak specjalny taki jak: \n, \t, ... . Musisz od niego usiec.
Czyli zapisać do bazy nie zmienna\25 a zmienna\\25

Masz do tego mysql-real-escape-string()
Jest też kombinacja addslashes() i stripslashes()

Ten post edytował mike 18.06.2008, 14:55:06
Go to the top of the page
+Quote Post
Wojtek_kra
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 18.06.2008

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


Nie wiem czy to dobrze, ale działa.
Napisałem coś takiego:

$tekst = 'SEG_M1';
$tekst = str_replace('\\', '\\\\', $tekst);
mysql_query("insert into proba (tekst) values ('$tekst')");

Może to niezbyt ładne, ale daje efekt smile.gif

Dziękuję za zainteresowanie i pozdrawiam.

Ten post edytował Wojtek_kra 18.06.2008, 15:36:09
Go to the top of the page
+Quote Post
cojack
post
Post #4





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


  1. <?php
  2. $tekst = addslashes($tekst);
  3. ?>

później wrzucasz tekst do bazy, a przy wypisywaniu tekstu na ekran stosujesz:
  1. <?php
  2. $tekst = stripslashes($tekst);
  3. echo "$tekst"
  4. ?>


napisałem w sumie to samo co mike, tylko że z przykładem zastosowania tongue.gif


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
osiris
post
Post #5





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


Cytat(cojack @ 20.06.2008, 08:27:04 ) *
  1. <?php
  2. $tekst = stripslashes($tekst);
  3. echo "$tekst"
  4. ?>

jesli $tekst pobrales z bazy danych to nie powinno sie uzywac stripslashes. jest to niepotrzebne a czasami moze Cie przyprawic o niemaly problem.

przyklad:
do bazy wstawiasz tekst "\\localhost\\bla", przed wstawieniem do bazy musisz to przepuscic przez addslashes, wtedy zapytanie wysylane do bazy danych bedzie wygladalo np:
  1. INSERT INTO tabela VALUES(1, '\\\\localhost\\\\bla');


teraz jesli to odczytasz np za pomoca:
  1. <?php
  2. $result = mysql_query('SELECT sciezka FROM tabela WHERE id = 1');
  3. $row = mysql_fetch_assoc($result);
  4. $sciezka = $row['sciezka'];
  5. ?>

to $sciezka bedzie rowna = '\\localhost\\bla', a nie '\\\\localhost\\\\bla' exclamation.gif
jesli teraz przepuscilbys zmienna $sciezka przez stripslashes to otrzymalbys: '\localhost\bla' - a tego na pewno nie chcemy
Go to the top of the page
+Quote Post
tommy4
post
Post #6





Grupa: Zarejestrowani
Postów: 288
Pomógł: 12
Dołączył: 2.12.2005

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


Muszę tu panów poprawić.

Z addslashes (bądź też escape_string) korzystaj tylko wtedy, gdy upewnisz się, że na serwerze opcja magic quotes jest wylaczona.

  1. <?php
  2. function addslashesx($text)
  3. {
  4. {
  5. return addslashes($text);
  6. }
  7. return $text;
  8. }
  9. ?>


Pozwoli to migrować pomiędzy serwerami bez problemów.

Jeśli będziesz filtrował wszystkie dane do bazy przez tę funkcję, nie będzie potrzebne używanie stripslashes po wyciągnięciu danych z bazy (co jest wymogiem po błędnym wstawieniu danych do bazy).

Jeśli już za późno na filtrowanie przez tę funkcję, możesz użyć alternatywy:

  1. <?php
  2. {
  3. foreach($_GET as $key => $value)
  4. {
  5. $_GET[$key] = stripslashes($value);
  6. }
  7. foreach($_POST as $key => $value)
  8. {
  9. $_POST[$key] = stripslashes($value);
  10. }
  11. ?>


Pozdrawiam.
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: 22.08.2025 - 02:09