Skrypt PHP w połączeniu z Delphi działa tylko raz

0

Próbuję stworzyć coś takiego: po kliknięciu przycisku wysyłam metodą POST dane do skryptu PHP. Skrypt następnie zmienia te dane i odsyła z powrotem. Mam taki kod w Delphi:

Var StreamIn, StreamOut: TStringStream;
begin
  IdHTTP1.Connect;
  StreamIn := TStringStream.Create('');
  StreamOut := TStringStream.Create('');
  StreamIn.WriteString(Format('left=%d', [Button1.Left]));
  IdHTTP1.Post('http://mojastrona/test.php?', StreamIn, StreamOut);
  StreamOut.Position := 0;
  Button1.Left := StrToInt(StreamOut.ReadString(StreamOut.Size));
  StreamIn.Free;
  StreamOut.Free;
  IdHTTP1.Disconnect;
end;

I taki skrypt PHP na serwerze:

<?
  $_POST['left'] = $_POST['left'] + 50;
  echo $_POST['left'];
?>

No i po uruchomieniu i kliknięciu przycisku przesuwa się on ale tylko za pierwszym razem. Pomożecie?

0

spróbuj dać coś takiego po IdHTTP1.Connect i zobacz co się stanie;
IdHTTP1.request.CacheControl:='no-store';

0

Niestety nie pomogło...

0

zrób losowanie wartości w pliku php i w delphi zrób żeby w messagu wyświetliło Ci tą liczbę i zobacz czy dostaniesz dwie różne liczby czy dwie takie same. jeśli takie same oznacza to, że problem jest z cache jeśli różne tzn, że jest tu jakiś błąd, który na pierwszy rzut oka nie jest widoczny.

0

Prosto z manuala PHP:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

Wrzuć na początek swojego skryptu, te nagłówki wymuszą, by klient nie zapamiętywał odpowiedzi.

0

No i po uruchomieniu i kliknięciu przycisku przesuwa się on ale tylko za pierwszym razem. Pomożecie?

A za drugim razem co się dzieje? Anioły grają a świat się kończy?
Masz debugger, sprawdź co wysyła/co odbiera, to nie takie trudne. Jak nie wiesz co to debugger to nawet możesz na głupiego wyświetlanie messageboxów zrobić...

0

No więc pokombinowałem ze skryptem i jeśli możecie to wyjaśnijcie mi, czemu w takiej postaci nie działa:

$_POST['left'] = $_POST['left'] + 50;
echo $_POST['left'];

A w takiej już działa:

$_POST['left'] = rand(10, 500);
echo $_POST['left'];
0

Nie dostarczasz prawidłowo zmiennej $_POST['left'], dla PHP taka wartość tablicy nie istnieje, więc przy wykonywaniu arytmetyki sprawdza to do 0 + 50. Tym samym skrypt zawsze zwraca 50. W drugim przypadku jest czyste losowanie, nie ma niczego, na co wpływ miałyby parametry zapytania.

Zweryfikuj czy prawidłowo korzystasz z IdHTTP wysyłając zapytanie, z tego co widać to niezbyt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1