Как отправить данные в PHP-скрипт и немедленно получить данные из того же скрипта

4

У меня есть аналогичный вопрос здесь, но он был ориентирован на сторону PHP. Похоже, PHP может получить пакет данных и сразу (в том же сеансе) отправить и ответить. Мой вопрос: может ли Delphi это сделать? Из того, что я знаю, ответ - большой НЕТ. Мне нужно сделать это в два этапа (две процедуры). Дело в том, что сессия, вероятно, будет закрыта, когда закончится первая процедура. Могу ли я держать сеанс открытым между двумя вызовами процедур.

  • 0
    Я не понимаю, почему Delphi будет бороться с этим. Это просто звучит как простое получение HTTP. Ваш вопрос выиграет, если вы потратите время на то, чтобы точно объяснить, что происходит.
  • 1
    Зачем? Это настоящий стиль PHP - делайте все в одном вялом скрипте. Вы, вероятно, хотите POST, но я не хочу догадываться. Предоставьте более подробную информацию о том, что вы делаете.
Показать ещё 1 комментарий
Теги:

1 ответ

11
Лучший ответ

Я дам вам пример кода для PHP и Delphi. Мы будем использовать метод запроса GET, потому что это намного проще и достаточно, если вам не нужно отправлять слишком много данных. Я начну с PHP script, потому что он может быть протестирован один, без приложения Delphi (мы проверим его с помощью браузера).

Здесь PHP script:

<?php
  $a=$_GET['a'];
  $b=$_GET['b'];
  echo intval($a)*intval($b);
?>

Эти сценарии ожидают, что два значения будут отправлены в URL (a и b), умножится на значения и вернет ответ. Предполагая, что вы играете на компьютере, на котором работает LAMP, и вы назвали этот script script.php, если вы переходите к этому в своем браузере:

http://localhost/script.php?a=2&b=3

Вы увидите это в своем браузере:

6

Чтобы разбить URL-адрес, который мы пишем в браузере: мы запрашиваем страницу /script.php с сервера localhost, и мы передаем эту строку запроса в script: a=2&b=3. Материал, который идет после ? в URL-адрес, представляет собой строку запроса; Символ & разделяет две отдельные пары параметров = значение: a=2 и b=3. На стороне PHP вы используете $a=$_GET['a'], чтобы получить значение параметра a. Это просто!

Код Delphi

Теперь, когда мы знаем, что PHP script запущен и работает, мы можем перейти к части Delphi. Здесь процедура, которая умножает два значения, используя наиболее неэффективный метод, который можно вообразить:

function MultiplyTwoNumbers(a,b:Integer):Integer;
var url: string;
    H: TIdHttp;
    SS: TStringStream;
begin
  // Prepare the URL
  url := 'http://fisiere.sediu.ro/script.php?a=' + IntToStr(a) + '&b=' + IntToStr(b);
  H := TIdHttp.Create(nil);
  try
    SS := TStringStream.Create;
    try
      H.Get(url, SS);
      Result := StrToInt(SS.DataString);
    finally SS.Free;
    end;
  finally H.Free;
  end;
end;

Я намеренно оставил там свой правильный рабочий URL, поэтому вы можете фактически протестировать мою известную работу script.

Здесь вы можете назвать эту процедуру:

procedure TForm8.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(MultiplyTwoNumbers(3,4)));
end;

Резюме

  • HTTP не имеет гражданства, люди идут на множество проблем, чтобы поддерживать какое-то состояние. Ваша идея Delphi app makes two calls, first to SendID then a second to GetDataBack не работает, потому что вещь, работающая на сервере, когда вы вызываете (фактически GET) GetDataBack, понятия не имеет, что кто-то когда-нибудь вызывал (GET снова) SendID.
  • К счастью, когда GET -удаление данных с HTTP-сервера мы можем использовать строку запроса, чтобы легко отправить некоторую информацию. Если нам нужно отправить много информации, мы будем использовать запросы POST.
  • 0
    +1 действительно хорошая работа
  • 0
    Большое спасибо, Космин. Кажется, это то, что мне нужно. Я проверю это прямо сейчас. +1
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню