Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z cudzysłowiem
Forum PHP.pl > Forum > Przedszkole
Randallmaster
zapisuje do bazy danych przez addslashes a wczytuje poprzez stripslashes

natomiast gdy wczytuje to w inpucie to cudzysłowie znika jest to tylko przed nim

$d['test'] to np. idę na "spacer"

w inpucie wyświetla mi: idę na

  1. <input name="test" type="text" value="<?= stripslashes($d['test']); ?>" />
nospor
<?= htmlspiecialchars($d['test']); ?>
I zapomnij o stripslashes.

Zapomnij też o addslashes. Do wkładania do bazy uzywa sie mysql_real_escape_string()
Randallmaster
<?= htmlspiecialchars($d['test']); ?>

pokazuje mi tutaj \"test\" nie usuneło \\
nospor
Widać do bazy wkładasz podwójne \\....
ALbo podwóje slashujesz przez addslashes i mysql_real_escape_string
Albo masz w php.ini ustawione automatyczne slashowanie + twoje reczne slashowanie, dlatego masz podwójnie wszystko.

Popraw to
Randallmaster
Do bazy zapisało mi w postaci: dajemy cudzyslowie \'test\'
sprawdziłlem


wczytuje tak: <?= htmlspecialchars($d['test']); ?>
nospor
No właśnie. Do bazy ci sie źle zapisało. Do bazy ma się zapisać tak:
dajemy cudzyslowie 'test'

Już ci napisałem gdzie problem. Popraw to.
Randallmaster
Usunąłem mysql_real_escape_string()

serwer mam na home.pl dobrze przeczytałem że rozróżnia znaki poprzeczne?

https://pomoc.home.pl/bazawiedzy/zagadnienia/215

i dodało mi do bazy tak: sprawdzanie dwa "test"

teraz w inpucie dobrze wczytuje
nospor
Cytat
Usunąłem mysql_real_escape_string()
Ale nadal masz addslashes? Jak tak, to wywal addslashes a zostaw mysql_real_escape_string()
Jak nie, to znaczy ze masz na serwerze włączone automatyczne slashowanie. Pisałem ci też o tym. Masz to wywalić. To jest bardzo zła opcja. masz zostawić mysql_real_escape_string() a wywalić to automatyczne slashowanie. Opcja ta się nazywa magic_quotes - ustaw to na 0
Randallmaster
Nie mam addslashes ani nie mam mysql_real_escape_string(),

slashuje mi serwer

Rozumiem że uważasz że lepiej samemu slashować niż ma to robić serwer?

dobrze utworze plik php.ini

i dodam mysql_real_escape_string()
!*!
Cytat(Randallmaster @ 6.03.2013, 10:07:00 ) *
i dodam mysql_real_escape_string()


Przejdź na PDO zapomnij o funkcjach mysql_* i zapomnij że musisz coś z danymi robić przy zapisie do bazy (poza walidacją).
nospor
@!*! Nawet jak przejdzie na PDO to i tak będzie musiał wywalić automatyczne slashowanie - nie ma bata smile.gif

Cytat
dobrze utworze plik php.ini

i dodam mysql_real_escape_string()
Tak, tak właśnie należy zrobić. Ewentualnie po wywaleniu automatycznego slashowania przejdź na PDO jak już wspomniano
Randallmaster
mój plik php.ini:
znajduje sie w katalogu na ktore jest przekierowanie /test

  1. error_log = /plik_logow.log
  2. error_reporting = E_ALL & ~E_NOTICE
  3. log_errors = 1
  4. display_errors = off
  5. magic_quotes_gpc = 0


zapisuje do bazy:
$_POST['test'] = mysql_real_escape_string($_POST['test']);

wynik w bazie: tutaj "test"

teraz jest ok??

jak powinien wyglądać zapis w bazie danych?
nospor
Tak, teraz jest ok.

No może poza:
error_reporting = E_ALL & ~E_NOTICE
tak ma byc:
error_reporting = E_ALL

Masz widziesz wszyskie błędy w swojej aplikacji i na bieżąco je poprawiać.
Randallmaster
Wielkie Dzięki smile.gif

pierwszy raz mam styczność z php.ini

mogę gdzieś poczytać o tych wszystkich funkcjach np error_reporting? po polsku?
nospor
W linku który sam podałęś, masz je opisane po polsku....
https://pomoc.home.pl/bazawiedzy/zagadnienia/215

display_errors = off
Z racji, że wyłączyłeś wyświetlanie błędów w przeglądarce, to zaglądaj do pliku z logami i pooprawiaj błędy, które tam będą. W przeciwnym wypadku z czasem będziesz miał problem.

A najlepiej teraz, kiedy zapewne działasz testowo to zrób tak:
display_errors = On
By widziec wszystkie błędy na bieżąco na ekranie.
Randallmaster
Sorry przecież ustaliłem error_log = /plik_logow.log. Jeszcze raz dzięki za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.