Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zepsuta tablica $_POST
cyku
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.09.2009

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


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

Ten post edytował cyku 23.09.2009, 22:21:47
Go to the top of the page
+Quote Post
thelaguna
post
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 21.09.2009

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


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...

Ten post edytował thelaguna 23.09.2009, 23:58:46
Go to the top of the page
+Quote Post
cyku
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.09.2009

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


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.
Go to the top of the page
+Quote Post
Zyx
post
Post #4





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ć.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
fander
post
Post #6





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

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


strip_tags(); htmlspecialharacters(); iconv(); a jeśli nie to coś nie jest tak ze skryptem który wysyła ci postem dane
Go to the top of the page
+Quote Post
thelaguna
post
Post #7





Grupa: Zarejestrowani
Postów: 31
Pomógł: 1
Dołączył: 21.09.2009

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


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ż.
Go to the top of the page
+Quote Post
cyku
post
Post #8





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 23.09.2009

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


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.
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: 19.08.2025 - 21:37