PHP & cURL - странный вывод - PullRequest
       5

PHP & cURL - странный вывод

0 голосов
/ 04 марта 2019

Я в основном играю с PHP и cURL (код включает в себя также несколько AJAX и HTML).

Архитектура:

Фронт <-> Средний<-> Назад <-> MySQL

Описание:

  1. В моей передней части я создаю объект AJAX и выполняю запрос POST снекоторые данные (в формате JSON) получают из формы в HTML.
  2. Данные отправляются на мой промежуточный сервер (файл PHP).Этот файл получает его и json_decodes его.Определяет использование регистра переключателя и отправляет его на задний сервер с помощью cURL.
  3. Обратный сервер (файл PHP) получает данные из запроса POST и json_decodes-данные.Затем он приступает к созданию проверки соединения MySQL, если пароли совпадают.Если пароли совпадают, выводится строка с надписью «GRATNED».
  4. Данные передаются обратно на средний сервер, а затем в переднюю часть, где AJAX получает их и отображает строку.

Итак ...

Все это прекрасно работает.Однако по некоторым причинам мои данные содержат 1 в конце.который портит мое регулярное выражение в моем файле JS.

Ребята, пожалуйста, дайте мне знать, какой вариант сделать cURL (если это так), я должен изменить или что это такоечто я делаю, что я получаю это (1) и как его удалить.

Спасибо, ребята.

Прикреплен мой код и изображения вывода ...

Фронт

function whenSubmitt()
{
  //Get the data that I want to pass
  //JS Object
  var parameters = {"case":"login",
  "username":document.getElementById("username").value,
  "password":document.getElementById("password").value
  };

  //Make into JSON object
  parameters = JSON.stringify(parameters);

  //Create AJAX object
  var xobj = new XMLHttpRequest();
  var method = "POST";
  var url = "./front.php";

  //Open Connection
  xobj.open(method,url,true);
  xobj.setRequestHeader("content-type", "application/x-www-form-urlencoded");

  //When Submit button is pressed
  xobj.onreadystatechange = function()
  {
    if (xobj.readyState == 4 && xobj.status == 200)
    {
      var respuestas = xobj.responseText;
      document.getElementById("msrv_answer").innerHTML = respuestas;
      //window.location.replace(respuestas[0]); //REDIRECTS TO NEW PAGE
    }
  };


  xobj.send(parameters);
}

Фронт PHP

<?php

function contact_middle_man($parameters)
{
 $url = "https://myurl/middle/middle.php";

 $obj = curl_init();
 curl_setopt($obj, CURLOPT_URL, $url);
 curl_setopt($obj, CURLOPT_POST, strlen($parameters));
 curl_setopt($obj, CURLOPT_POSTFIELDS, $parameters);
 curl_setopt($obj, CURLOPT_RETURNTRANSFER, true); //ALLOWS TO GET ANSWER BACK IN STRING FORMAT, AND DOES NOT OUTPUT ANSWER DIRECTLY.

 $ans = curl_exec($obj);

 curl_close($obj);

 return $ans;
}


/*RECEIVE DATA FROM WEB INTERFACE, USER*/
$indata = file_get_contents("php://input");

/*CONTACT MIDDLE MAN, USE CURL*/
$middle_answ = contact_middle_man($indata);

echo $middle_answ;
?>

Средний PHP

<?php

function http_post_back_server($url, $data)
{
    $obj = curl_init();

    curl_setopt($obj, CURLOPT_URL, $url);
    curl_setopt($obj, CURLOPT_POST, strlen($data));
    curl_setopt($obj, CURLOPT_POSTFIELDS, $data);

    $ans = curl_exec($obj);

    curl_close($obj);

    return $ans;
}

/*URL TO BACK SERVER*/
$url_myserver = "https://myurl/loginquery_v2_.php";

/*GLOBAL VARS*/
$back_ans ="";

/*RECEIVE DATA FROM POST REQUEST*/
$indata = file_get_contents("php://input");
$data = json_decode($indata, true);


/*MAKE REQUEST TO SERVERS*/
switch($data["case"]){
    case "login":
        $back_ans = http_post_back_server($url_myserver,$indata);
        break;
    default:
        $back_ans="NADA";
        break;
}

/*ANSWER BACK TO FRON END*/
echo $back_ans;

?>

Назад PHP

<?php

/*RECEIVING DATA FROM POST REQUEST */
$indata = file_get_contents("php://input");

/*DATA TO JSON OBJ*/
$indata = json_decode($indata, true);


/*CONNECTION TO DATABASE */
$conn=mysqli_connect(myusername, mypassword);

/*CHECKING DATABASE CONNECTIVITY */

if(mysqli_connect_error())
{ echo "Connection Error: ".mysqli_connect_error; }

/*GOOD CONNECTION ... CONTINUE */

$uname = $indata["username"];

$query="SELECT * FROM alpha WHERE username ='".$indata["username"]."'";

$db_output = mysqli_query($conn,$query);

/* CHECK QUERY RESULT */
if($db_output)
{

 /* FETCH RESULTS */
 while($result = mysqli_fetch_assoc($db_output))
 {

  /* COMPARE STORE PWD VS RECEIVED PWD */
  if($result["password"] == $indata["password"])
  {
    /*JSON OBJECT*/
    echo "ACCESS GRANTED";
  }

  /* PASSWORDS DOES NOT MATCH */
  else
  {
    /*JSON OBJECT*/
    echo "ACCESS DENY";
  }

 }
}

/*CLOSE DATABASE CONNECITON */

mysqli_close($conn);

?>

СТРАНИЦА С ВЫХОДОМ

enter image description here

Спасибо, ребята.

1 Ответ

0 голосов
/ 04 марта 2019

Это происходит потому, что в вашем Middle PHP вам не хватает опции CURLOPT_RETURNTRANSFER в вызове curl.В результате, $ans присваивается значение true (поскольку вызов curl выполнен успешно), и результат вызова curl (ACCESS GRANTED) отображается в выводе Middle PHP , сопровождаемый $back_ans, который, будучи истинным, когда он отражен, производит 1 в выводе.Таким образом, строка, возвращаемая Front PHP , равна ACCESS GRANTED1.Вы можете исправить это, добавив это в Средний PHP :

curl_setopt($obj, CURLOPT_RETURNTRANSFER, true);

Тогда $ans будет присвоено значение ACCESS GRANTED вместо true, и ваш вывод будет таким, как ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...