<textarea> w $_POST

boboo

Avatar: boboo

2015-12-06 17:31

co trzeba włączyć na serwerze (apache), aby pusty textarea pojawiał się $_POST?
Tu nie działa:
http://kimla.de/qcresptest/
wrzucić coś do koszyka, wypełnić formularz zamówienia, NIC NIE WPISYWAĆ w komentarz, zamówić.
Pojawi się array $aFields i $aForm. I właśnie przy pustym textarea nie ma w $aForm pola sComment.

a tu jest:
http://www.jsb-diabolos.de/test/

Skrypty idealnie jednakowe!

» Quick.Cart v6.x

boboo :-)

openzibi

Avatar: openzibi

2015-12-06 19:13

Bogdan, zamiast bawić się w Mikołaja to zagadki nam dajesz :)

Zrobiłem sobie test na czystej wersji QCart v6.6 (dodałem tylko wyświetlanie zawartości POST)
sComment z pustą zawartością wyświetla się:

https://www.studiostrona.pl/files/comment_pusty.png

U Ciebie, przy pustym komentarzu, nie ma sComment.
Zastanawia mnie że u Ciebie na http://kimla.de/qcresptest/ przy pustym komentarzu mamy ulubiony komunikat: Please fill in all required fields

To musi być jakiś drobiazg.
W tym momencie poddaję się ale jak coś znajdę to Mikołaja wyślę z informacją :)

StudioStrona.pl

boboo

Avatar: boboo

2015-12-06 20:43

Właśnie dlatego jest Fill in required fields, bo nie ma pola sComment w $POST.
Zerknij w trash.php na funkcję checkRequiredFields.
returns false jeśli nie ma tego pola.
Trochę internetu już obszukałem, ale na razie nic nie znalazłem.
Sprawę można bezboleśnie obejść "if nie ma pola w $post, to zrób chociaż puste".
Ale mi chodzi o principium.
Oba serwery u jednego Providera na apache. I jedynym wytłumaczeniem dla mnie jest to, że delikatnie się różnią jakimś ustawieniem.
Pytanie - jakim?

boboo :-)

openzibi

Avatar: openzibi

2015-12-06 21:30

Pobrałem ponownie bezpłatną wersje Quick.Cart v6.6 (projekty robię tylko na EXT)
Nie widzę funkcji o tej nazwie: checkRequiredFields. Może wprowadziłeś jakąś własną funkcję.

StudioStrona.pl

boboo

Avatar: boboo

2015-12-06 22:00

Sorry, miało być checkFormFields.
Pisałem z pamięci bez dostępu do kodu

boboo :-)

openzibi

Avatar: openzibi

2015-12-06 22:54

Dzisiaj mija 10 lat od nawiązania mojej oficjalnej współpracy z OpenSolution.
W ciągu tych 10 lat nie spotkałem opisanego przez Ciebie problemu.

Z ciekawości złożyłem testowe zamówienie z pustym komentarzem na http://kimla.de/
Poszło. Dostałem nawet podziękowanie :)

W podkatalogu qcresptest takie coś nie przeszło: http://kimla.de/qcresptest/
W takich przypadkach to zaczynam od sprawdzenia czy wersja startowa, domyślna, działa prawidłowo a następnie szukam dale ale w miejscach nieprzewidywalnych.

StudioStrona.pl

boboo

Avatar: boboo

2015-12-07 06:33

Widzisz Zbyszku,
zamówienie zrobiłeś na qc wersji 4.0 :-)
Tam funkcja checkFields nie sprawdza pola sComment.

Twierdzę, że problem NIE leży w skrypcie OS, tylko w ustawieniach Apacza.
Jakiś "pstryczek", który wkłada albo nie, pustą textare'ę do $_POST.

Oba skrypty z podanych adresów, to świeżo ściągnięty QC6.6 z dołożonym "Webmaster responsive".
ŻADNYCH innych zmian. OK, włożony print_r($aForm) i $aFields aby pokazać przekazywane zmienne.
Binarny upload tego samego katalogu na server kimla i na server jsb.
Na JSB w $_POST ($aForm) jest pusta textarea (sComment), na KIMLA jej nie ma.

Dlatego pytałem na początku, czy ktoś wie, gdzie się to w Apaczu ustawia.
Bo zanim zadałem tu to pytanie, to na sprawdzaniu i szukaniu w skrypcie pół niedzieli mi minęło.
Z jednoznacznym wynikiem: na serverze "kimla" pusta textarea nie jest wkładana do $_POST.

boboo :-)

boboo

Avatar: boboo

2015-12-07 06:49

zrobiłem przed chwilą mały dirty skrypcik:


<?php 
if(isset($_POST))
    
print_r($_POST);
echo 
'<br/>';
echo 
'inputfield mit dem namen: testinput';
echo 
'<br/>';
?>
<form method="post" action="">
<input type="text" name="testinput"/>
<?php 
echo '<br/>';
echo 
'textarea mit dem namen: testarea';
echo 
'<br/>';
?>
<textarea name="testarea"></textarea>
<?php 
echo '<br/>';
echo 
'beim klicken wird der inhalt des $_POST angezeigt';
echo 
'<br/>';
?>
<input type="submit" name="submit"/>
</form>



włożyłem na:
www.kimla.de/testarea/index.php
i na:
www-jsb-diabolos.de/testarea/index.php

po kliknięciu na button pojawia się zawartość $_POST

i co?
ano na kimla ani input ani textarea nie są przekazywane do POST'u jeśli są puste!

Czyli jeszcze raz: to NIE skrypt, to ustawienia servera.
Że powtórzę pytanie: jakie i gdzie?
:-)

boboo :-)

boboo

Avatar: boboo

2015-12-07 07:19

Na razie różnica jest:
na "błędnym" serverze jest PHP Version 5.6.1
ba "dobrym" serverze jest: PHP Version 5.4.20

boboo :-)

openzibi

Avatar: openzibi

2015-12-07 08:54

U siebie sprawdziłem na PHP 5.6.10 i jest ok. Ty masz starszą wersję 5.6.1. Może tu jest przyczyna.

StudioStrona.pl

boboo

Avatar: boboo

2015-12-07 09:02

Też przypuszczam, że tu jest przyczyna.
Napisałem do providera, ciekaw jestem jego odpowiedzi.
Oczywiście nie omieszkam się podzielić uzyskaną informacją.

boboo :-)

boboo

Avatar: boboo

2015-12-07 15:14

na tej 5.6.10 wersji, jakie masz ustawienie
suhosin.simulation=
(na razie provider włączył to na "On" i działa, ale to chyba nie o to chodzi)

boboo :-)

openzibi

Avatar: openzibi

2015-12-07 15:28

OFF

StudioStrona.pl

boboo

Avatar: boboo

2015-12-07 15:44

no właśnie. na tym "dobrym" serverze też mam na OFF i działa.

boboo :-)

openzibi

Avatar: openzibi

2015-12-07 16:02

Porównaj ustawienia modułu Suhosin (a jest ich ponad 100) na obu stronach.
Suhosin to moduł bezpieczeństwa. Nie jestem jego znawcą ale tryb symulacji powinien być ON raczej tylko na etapie testów.

StudioStrona.pl

boboo

Avatar: boboo

2015-12-08 08:30

Na tę chwilę problem został "scedowany" na providera.
To ma działać z włączonym suhosinem, a nie z jego symulacją.
Oczywiście poprosiłem o podanie przyczyny, gdy tylko zostanie znaleziona.
Naturalnie podzielę się tu tą wiedzą.
Być może problem istnieje u wielu, jednak nie jest w ogóle widoczny, dopóki w pewnym momencie skrypt (jakikolwiek) nie zacznie "domagać się" pól w $_POST, nawet jeśli są one puste.

Gdzieś w historii updade'ów i upgrade'ów PHP przeczytałem o oszczędności pamięci przy przekazywaniu POST'a. Może tu jest przyczyna?
"Reduced POST data memory usage by 200-300%."
(http://php.net/ChangeLog-5.php)

Na chwilę obecną w przypadku braku tego pola, QC6x reaguje w dwóch funkcjach w trash.php przy składaniu zamówienia:
1. wspomniana checkFormFields
2. changeMassTxt (gdy wystrychnę na dudka :-) checkFormFields, wtedy ta funkcja daje notice o braku indexu)

Póki co, obszedłem problem dodając pole w przypadku jego braku.
W pliku order-step-3 NAD linijką:

if( $oOrder->checkEmptyBasket( ) === false && isset( $_POST['sOrderSend'] ) && $oOrder->checkFields$_POST ) === true ){


dodałem:

if(!isset($_POST['sComment']))
 
$_POST['sComment']='';


Pusty string '', bo z "null" też wyrzucał notice.

Ale to jest rozwiązanie doraźne i mnie nie satysfakcjonujące. Podłubię w tuch funkcjach i postaram się je uodpornić na brak pól.
Bo kto wie, może to jest trend w PHP - oszczędność pamięci.
W jakiś sposób przyznaję developerom PHP rację: po co przekazywać (i "zaśmiecać" environment) puste pola?
Przecież na przykład checkBoxy - jeśli nie są zakliknięte - w $_POST nie istnieją.

boboo :-)

Do góry
o nas | kontakt