1 (edited by sibprogsistem 2019-06-22 18:42:23)

Topic: пропадает +

в общем проблема такая при передаче параметров  в php пропадает плюс, не зависимо где в тексте он находится все символы присутствуют а плюса нет...

  datainout.open('POST', url, True);
  datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  datainout.send('password=PiBqzRAUwG$m8oFe0'+
  '&login='+Tlogin.ReadString('online','login','')+'&pass='+Tlogin.ReadString('online','password','')+
  '&sservice='+Tlogin.ReadString('online','IDService','')+'&idapp='+list[i]+
  '&firstnameapp='+sqlexecute('SELECT firstNameClient FROM servise WHERE id='+list[i])+
  '&lastnameapp='+sqlexecute('SELECT lastNameClient FROM servise WHERE id='+list[i])+
  '&telephonapp='+sqlexecute('SELECT telephonClient FROM servise WHERE id='+list[i])+
  '&dateapp='+sqlexecute('SELECT dateApplcation FROM servise WHERE id='+list[i])+
  '&timeapp='+sqlexecute('SELECT timeApplication FROM servise WHERE id='+list[i])+
  '&descriptionapp='+sqlexecute('SELECT descriptionATCsWords FROM servise WHERE id='+list[i])+'');

грешу на скрипт.. так как проверил несколько раз php, он уже принимает текст без символа +

2 (edited by sibprogsistem 2019-06-23 10:43:40)

Re: пропадает +

в общем в данном запросе + из текста пропадает

procedure datainapp;
var
i,c,a:integer;
d:integer = 20000;
list:TStringList;
url: string = 'https://service-vv.ru/rest_api/data_in.php';
Tlogin:TIniFile;
begin
 a := GetTickCount;
 Tlogin:=TIniFile.Create(ExtractFilePath (ParamStr (0))+'setting\online.ini');
 list:=TStringList.Create;
 list.Text:= SQLExecute( 'SELECT group_concat(id, char(13) || char(10)) FROM servise WHERE appUpdate=1' );
 c:=list.Count-1;
 datainout:=createoleobject('WinHttp.WinHttpRequest.5.1');
 timerDataInout:=TTimer.Create(frmLogin);
 timerDataInout.Enabled:=True;
 timerDataInout.Interval:=1000;
 timerDataInout.OnTimer:=@SDataApp;
 for i:=0 to c do
  begin
  datainout.open('POST', url, True);
  datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  datainout.send('password='+
  '&login='+Tlogin.ReadString('online','login','')+'&pass='+Tlogin.ReadString('online','password','')+
  '&sservice='+Tlogin.ReadString('online','IDService','')+'&idapp='+list[i]+
  '&firstnameapp='+sqlexecute('SELECT firstNameClient FROM servise WHERE id='+list[i])+
  '&lastnameapp='+sqlexecute('SELECT lastNameClient FROM servise WHERE id='+list[i])+
  '&telephonapp='+sqlexecute('SELECT telephonClient FROM servise WHERE id='+list[i])+
  '&dateapp='+sqlexecute('SELECT dateApplcation FROM servise WHERE id='+list[i])+
  '&timeapp='+sqlexecute('SELECT timeApplication FROM servise WHERE id='+list[i])+
  '&descriptionapp='+sqlexecute('SELECT descriptionATCsWords FROM servise WHERE id='+list[i])+'');
repeat
     Application.ProcessMessages;
     if SDataApp(list[i])then begin
      SQLExecute('UPDATE servise SET appUpdate="0" WHERE id = '+list[i]);
     break;
     end;
   until (GetTickCount - a) >= d;
  end;
  timerDataInout.Enabled:=False;
  dataoutapp;
end;

а в этом запросе плюс остается

procedure frmEditUser_bEditUser_OnClick (Sender: TObject; var Cancel: boolean);
var
slParam: TStringList;
idusers:integer;
begin
if  frmAdmin.tgUserApp.SelectedRow >-1   then begin
     idusers:= frmAdmin.tgUserApp.SelectedRow;
     try
      slParam := TStringList.Create;
      slParam.Add('password=;
      slParam.Add('idusers='+frmAdmin.tgUserApp.Cells[0,idusers]);
      slParam.Add('login='+frmEditUser.eLogin.Text);
      slParam.Add('pass='+frmEditUser.ePassword.Text);
      slParam.Add('firstname='+frmEditUser.eFirstName.Text);
      slParam.Add('lastname='+frmEditUser.eLastName.Text);

      slParam.text:= HTTPPost('https://service-vv.ru/rest_api/edit_user.php',slParam);

       if Pos('0', slParam.text) > 0  then Showmessage('Ошибка обработки запроса!')else
       if Pos('-2',  slParam.text) > 0  then Showmessage('Ошибка передачи даных!')else
       if Pos('-1',  slParam.text) > 0  then Showmessage('Ошибка редактирования!')else
       if Pos('1',  slParam.text) > 0  then begin

       userall;
       Showmessage('Данные пользователя изминены');
       frmEditUser.Close;
       end;
      except
   end;
    end else
  Showmessage('Запись не выбрана!');
end;

Re: пропадает +

Т.е. вопрос решен?

Dmitry.

4 (edited by sibprogsistem 2019-06-23 18:10:56)

Re: пропадает +

DriveSoft wrote:

Т.е. вопрос решен?

нет не решен... мне нужен решить вопрос с запросом в котором изчезает +

Re: пропадает +

В вашем примере написано, что используется метод передачи параметров POST, но в тоже время вы формируете параметры для запроса GET (когда параметры передаются непосредственно через URL), что выглядит странно.



При использовании GET параметров, присутствуют зарезирвированные символы, которые должны быть заменены, например символ плюс на %2B


Данные символы можно найти здесь
http://www.blooberry.com/indexdot/html/ … coding.htm


Попробуйте так

    
  s := 'password='+
  '&login='+Tlogin.ReadString('online','login','')+'&pass='+Tlogin.ReadString('online','password','')+
  '&sservice='+Tlogin.ReadString('online','IDService','')+'&idapp='+list[i]+
  '&firstnameapp='+sqlexecute('SELECT firstNameClient FROM servise WHERE id='+list[i])+
  '&lastnameapp='+sqlexecute('SELECT lastNameClient FROM servise WHERE id='+list[i])+
  '&telephonapp='+sqlexecute('SELECT telephonClient FROM servise WHERE id='+list[i])+
  '&dateapp='+sqlexecute('SELECT dateApplcation FROM servise WHERE id='+list[i])+
  '&timeapp='+sqlexecute('SELECT timeApplication FROM servise WHERE id='+list[i])+
  '&descriptionapp='+sqlexecute('SELECT descriptionATCsWords FROM servise WHERE id='+list[i])+'';

   s := ReplaceStr(s, '+', '%2B');
   datainout.send(s);
Dmitry.

6 (edited by sibprogsistem 2019-06-24 14:56:32)

Re: пропадает +

странно но  GET вообще не хочет работать а POST работает без проблем

Но все равно спасибо , ваш вариант мне помог, плюс теперь присутствует...
 
поробую отдельно проект сделать с GET запросом, посмотрю, что и как..
но насколько я понимаю
GET - это чтобы получить определенную страницу в определенном виде ( сортировка, текущая страница в блоге, строка поиска и т.п. ).
POST - для оправки данных которые не влияют на отображение страницы, в том плане что эти данные влияют только на результат выполнения скрипта ( логины, пароли, номера кредиток, сообщения и т.п. ).

Re: пропадает +

vovka3003 wrote:

А вот это:

'&firstnameapp='+sqlexecute('SELECT firstNameClient FROM servise WHERE id='+list[i])+
  '&lastnameapp='+sqlexecute('SELECT lastNameClient FROM servise WHERE id='+list[i])+
  '&telephonapp='+sqlexecute('SELECT telephonClient FROM servise WHERE id='+list[i])+
vovka3003 wrote:

Это еще так себе (тип объявлен в Content-Type)

application/x-www-form-urlencoded: значения кодируются в кортежах с ключом, разделенных символом '&', с '=' между ключом и значением..

просто передаю значения сразу как мне нужно.. не думаю, что это как-то плохо..


vovka3003 wrote:

Если комп живет в аптайме без перезагрузки (спячка, ждущий режим), то после прыжка через порог в 49,7 дней цикл прекратится через еще 49,7 дней и одну миллисекунду (или через убийство процесса в диспетчере задач wink ).
MilliSecondsBetween в помощь.

Можно этот момент по подробнее? просто уже не раз запускал на пк и ни какой нагрузки не ощущал с учетом того, что пк уже две недели не выключается..

Re: пропадает +

спасибо!
с кадированием разобрался, получилось так

http.send('password='+HttpEncode(p)+'&login='+HttpEncode(frmAdmin.eloginst.Text)+'&pass='+HttpEncode(frmAdmin.ePass.Text)+'&sservice='+HttpEncode(frmAdmin.eIdService.Text)+'');

тоесть кадирается не вся строка запроса а только данные..

9 (edited by sibprogsistem 2019-06-25 23:33:18)

Re: пропадает +

я сталкнулся с проблемой шифрования,  кириллические символы записываются как ?????

Re: пропадает +

vovka3003 wrote:

Куда записываются?

в общем вернул запрос на зад в программу - там пусто , а в базу записывается как ????????

Re: пропадает +

vovka3003 wrote:

Ну так может просто не указана кодировка..?

datainout.SetRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');

Re: пропадает +

разобрался кадирует... это php проблему создает