Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zepsuta tablica $_POST
Forum PHP.pl > Forum > PHP
cyku
Witam,

Piszę skrypt importujący dane z innej strony. Ogólnie dziala to tak, że zewnętrzna witryna wywołuje mój skrypt wysyłając dane w $_POST, ktore ja przetwarzam i integruje w swoim portalu. Problem jednak jest taki, że logując w bazie
  1. print_r($_POST, true)

tablica wydaje się być ucięta:
  1. POST Array
  2. (
  3. [ip] => 77.181.31.93
  4. [adverttype] => bieten
  5. [datum] => 1253734554
  6. [privgesch] => privat
  7. [katid] => 1043
  8. [unterkatid] => 1407
  9. [advertid] => 58612
  10. [image] => 1253734554-smile16.gif
  11. [kategorie] => Stellenmarkt
  12. [unterkategorie] => Ferien- & Nebenjobs
  13. [privat] => nein
  14. [versandpreis] => 0.00
  15. [versandtext] =>
  16. [anzahl] => 1
  17. [anzart] => anzeige
  18. [preis] => 0.00
  19. [beschreibung] => Soziale Berufe werden viel zu h

Tablica nie jest ucinana za każdym razem, lecz jeśli już jest to na tym samym polu [beschreibung]. Nie wiem czy jest tam wysyłany jakiś znak, który php interpretuje jako koniec tablicy. Również kiedy podstawię wartość pola pod zmienną np
  1. $opis = $_POST['beschreibung'];

i pozniej chce wstawic wiersz do tabeli, łańcuch z zapytaniem ulega niespodziewanemu zakończeniu, tak jakby w zmiennej $opis siedziało coś co go ucina:
  1. INSERT INTO ogloszenia VALUES (NULL, 2018,'Zusatzeinkommen Heilpraktiker!','Soziale Berufe werden viel zu h

w skrypcie próbowałem dać
  1. utf_encode($_POST['beschreibung'])

ponieważ bazę danych mam w utf8, jednak nic nie pomogło. Problem musi leżeć gdzieś głębiej. Może ktoś się spotkał z podobnym problemem i/lub ma pomysł co może być jego przyczyną smile.gif

dodam jeszcze moze że używaną wersją php jest 5.2.6, serwer apache 2.2.3

Pozdrawiam
thelaguna
Wielkim specem to nie jestem, więc wiele nie pomogę ale...
Gdybym robił coś takiego to zapisywałbym i odczytywałbym dane z jednej, wspólnej bazy.

Cytat
lecz jeśli już jest to na tym samym polu [beschreibung]

Możesz się upewnić czy to właśnie to pole jest "wadliwe" przesyłając je jako pierwsze/jedno z pierwszych :\
Cytat
Note: However, there is an 8 Mb max size for the POST method, by default (can be changed by setting the post_max_size in the php.ini file).

Może masz zmniejszony ten maksymalny rozmiar i Ci tą końcówkę ucina...
cyku
problem w tym, że to nie ja wysyłam te dane tylko zewnętrzny portal, w którym jedyne co mogę zrobić to podać link do mojego skryptu.

Jutro jeszcze zobaczę jak się sprawy mają na innym serwerze..

niemniej jednak dzięki.
Zyx
Stawiam raczej, że jest tam jakiś znak, który sprawia, że print_r kończy wyświetlanie w tym miejscu (albo przeglądarka przestaje wyświetlać - sprawdź podgląd źródła strony), a nie że $_POST jest ucinany. Możesz sobie nawet spróbować porównać funkcją strlen() rozmiar tego ciągu oraz sizeof() rozmiar całego $_POST z tym, co na ekranie jest drukowane.
thek
Jako że strona, jak widać dla mnie, jest związana z językiem niemieckim to sądzę, że problemem są znaki. Być może sypie się na umlautach. Poza tym z tego co widzę, to kompletnie zapominasz o znakach ucieczki. Puszczasz tablicę do wyświetlenia bez jakiegokolwiek sprawdzania zawartości pod kątem znaków specjalnych, które mogą wspomniany przez Ciebie problem także wywołać.
fander
strip_tags(); htmlspecialharacters(); iconv(); a jeśli nie to coś nie jest tak ze skryptem który wysyła ci postem dane
thelaguna
Koledzy wyżej mogą mieć rację, czytając to i owo trafiłem na cytat z manuala, co prawda jest on o move_uploaded_file(); ale zobacz sam:
Cytat
When using PHP on Windows and trying to use move_uploaded_file() on a file with special non-ascii characters like german umlauts they get converted bytewise thus destroying them resulting in a wrong CP1251 Windows filename.

Skoro w tej funkcji niemieckie znaki powodują błędy w skrypcie to w innych funkcjach pewnie też.
cyku
Cytat
Jako że strona, jak widać dla mnie, jest związana z językiem niemieckim to sądzę, że problemem są znaki. Być może sypie się na umlautach.

Rzeczywiście to umlauty przerywają stringa.
Sprawdziłem jakie kodowanie mają przysyłane dane, wyszło że UTF-8
  1. echo mb_detect_encoding($_POST['beschreibung']);
więc chyba nie musze dodatkowo konwertować tego pola na utf-8 (bo takie mam kodowanie ustawione w bazie danych)?
Próbowałem jednak wielu kombinacji i nic nie pomogło
  1. $opis = mysql_real_escape_string(iconv('ASCII', 'UTF-8', $_POST['beschreibung']));
  2. $opis = mysql_real_escape_string($_POST['beschreibung']);
  3. $opis = mysql_real_escape_string(utf_encode($_POST['beschreibung']));
więc chyba coś nie tak ze skryptem wysyłającym.

Cytat
strip_tags(); htmlspecialharacters();

HTMLowe znaczki raczej tu nie przeszkadzają, bo wszystko wyświetlane jest w komponentach falshowych.

Pogadam w takim razie z administratorem tamtego serwisu,

dzięki za pomoc i pozdrawiam.
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.