Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z cudzysłowami przy podawaniu zmiennej postem
Forum PHP.pl > Forum > Przedszkole
elon
Problem objawia się w ciekawy sposób, ale od początku.

Tak dodaję wpis:
CODE
$query = "SET CHARSET latin2_bin";
mysql_query($query);
$query="INSERT INTO `$nazwa_tabeli` (`ideuro`, `tresc`) VALUES ('','".addslashes($_POST['trescf'])."')";
mysql_query($query);


Następnie wyświetlam go:
CODE
print('<div id="wpis'.$wiersz[ideuro].'">'.stripslashes($wiersz[tresc]).'</div>');


Daję też możliwość kliknięcia przycisku edytuj:
CODE
<form action="'.$nazwa_skryptu.'" method="post">
<input type="hidden" name="do_edycji" value="'.$wiersz[ideuro].'">
<input type="hidden" name="do_edycji_tresc" value="'.$wiersz[tresc].'">
</form>


I wrzucam wartości wybrane do formularza:

CODE

<form name="edytuj" id="form_edytuj" action="'.$nazwa_skryptu.'" method="post">
<input type="hidden" name="co_aktualizowac" value="'.$_POST['do_edycji'].'">
<textarea class="tresc" name="trescf" >'.stripslashes($_POST['do_edycji_tresc']).'</textarea>
</form>


Problem pojawia się w ostatniej fazie. Jeżeli tylko w treści był jakiś cudzysłów zastępuje go dwa slashe a resztę stringa obcina.
Probowałem wielu kombinacji - nie wiem gdzie jest błąd.

Dodatkowe info:
ze stripslashes() zwraca np. początek tekstu \\
bez stripslashes() zwraca np. początek tekstu \
ten sam efekt przy skorzystaniu z echo

Właczyłem wyświtlanie wszystkich błędów - nic nie wypisuje.
Kodowanie zadeklarowane w html charset=iso-8859-2
Na serwerze magic_quotes_gpc ON

Bez stosowania addslashes działa dokłądnie do tego samego momentu tylko efekt końcowy jest nieco inny.

ps. moda prosze o zrobienie czegoś z tymi cytatami codów nie wiem czemu sie tak rozlazły..
dadexix
chybanie masz używać stripslashes tylko mysql_real_escape_string" title="Zobacz w manualu PHP" target="_manual lub [manula]mysql_escape_string[/manual]
elon
Nie, nie. Zupełnie nie to. Tutaj nie potrzebuję zabezpieczyć formularza, bo on jest częścią już systemu zabezpieczonego o ograniczonym dostępie. Kwestia jest taka, że mam problem z wczytaniem zawartości bazy do pól typu input i textarea. Bo wrzucone do html'a w innych miejscach działa poprawnie.

Mogę prosić w takim wypadku moda o przeniesienie tematu z przedszkola do działu PHP?
JaRoPHP
Cytat(elon @ 9.01.2008, 01:08:06 ) *
Na serwerze magic_quotes_gpc ON
I wszystko jasne smile.gif - skoro na serwerze włączone jest magic_quotes i Ty również stosujesz addslashes" title="Zobacz w manualu PHP" target="_manual to podwójnie "zabezpieczasz" dane.

  1. <?php
  2.  $txt = $_POST['trescf'];
  3. } else {
  4.  $txt = addslashes($_POST['trescf']);
  5. }
  6. $query="INSERT INTO `$nazwa_tabeli` (`ideuro`, `tresc`) VALUES ('','".$txt."')";
  7. ?>
elon
Bład pojawiał się nadal. Bo nie w tym tkwił problem.

Wszystko wywalało się tutaj:
CODE
<form action="'.$nazwa_skryptu.'" method="post">
<input type="hidden" name="do_edycji" value="'.$wiersz[ideuro].'">
<input type="hidden" name="do_edycji_tresc" value="'.$wiersz[tresc].'">
</form>

bo nie ważne czy były slashe czy nie html nie był odporny na podanie mu czegośw stylu:
<input type="hidden" name="do_edycji_tresc" value="sfsdfsf \"sdfsdf\" sdfsdfsdf">
i tutaj gubił stringa podając postem wszystko do pierwszego wystąpienia cudzysłowa

Całość załatwia taka operacja. Przy dodawaniu:
CODE
if(get_magic_quotes_gpc()) {
$_POST['trescf'] = urlencode($_POST['trescf']);
} else {
$_POST['trescf'] = urlencode(addslashes($_POST['trescf']));
}


Przy przycisku edytuj nic nie robić i podawać zakodowany string. W ten sposób przechodzi, bo cudzysłowy i inne znaki specjalne są zakodowane np.
asdasdas "asdasdasd" asdsadasd = asdasdasd+%5C%22asdasdasd%5C%22+adasdasdas

I tylko jeszcze zmiana aby poprawnie się wyświetlało w formularzu edycyjnym (analogicznie przy wyświetlaniu wpisu)

CODE


<form name="edytuj" id="form_edytuj" action="'.$nazwa_skryptu.'" method="post">
<input type="hidden" name="co_aktualizowac" value="'.$_POST['do_edycji'].'">
<textarea class="tresc" name="trescf" >'.stripslashes(urldecode($_POST['do_edycji_tresc'])).'</textarea>
</form>
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.