2017-07-30 1 views
2

私はxamarinとphpを並べて学習しています。私はPHPから正しい応答を受け取ることができず、エラーがあることを知っています。意図的にクエリのスペルを間違えてしまいました。XamarinクラスからHttpClientが常にステータスコード200を返します

私はXAMPPおよびVisual Studio 2017を使用している、PHPの私のコードは次のようになります。

<?php 
require_once('logger.php'); 
include('userobj.php'); 
$log = new Log("errors.log"); 


if($_SERVER['REQUEST_METHOD'] === 'POST') 
{ 
    $log->{'Write'}('Received a POST Request'); 
    try 
    { 

     $data = json_decode(file_get_contents('php://input'), true); 

     foreach($data as $key =>$value) 
     { 
      $log->{'Write'}("array key: " . $key . " array value: " . $value); 
     } 

     $user = new User($data); 
     $log->{'Write'}("after createad: "); 
     $user->{'CreateNewUser'}(); 

    } 
    catch (Exception $e) 
    { 
     http_response_code("400"); 
     $log->{'Write'}("Error message\n"+$e->getMessage()); 
    } 

} 
else 
{  
    $log->{'Write'}("REQUEST NOT A POST"); 
} 


?> 

私は、PHP内のtry/catchを使用してみましたが、私は、私はだから、それがエラーを取得しています知っています

public function CreateNewUser() 
    { 
     try 
     { 
      global $log, $config; 
      $log->{'Write'}("Creating Connection"); 
      $connection = mysqli_connect($config->db_host,$config->db_username,$config->db_pwd,$config->db_dbname); 

      if($connection) 
      { 
       $log->{'Write'}("Creating new user");  
       $query = "INSERT INTOS users (name, lastname, policynumber, phone, email) "; 
       $query .= "VALUES ('$this->name', '$this->lastname', '$this->policynumber', '$this->phone', '$this->email');"; 
       $result = mysqli_query($connection, $query); 
       if(!$result) 
       { 
        $log->{'Write'}('Query Failed on Create New User: '); 
        $log->{'Write'}(mysqli_error($connection)); 
        die('Query Failed' . mysqli_error($connection)); 
       } 
      } 
      else 
      { 
       $log->{'Write'}("Connection Failed"); 
       die('Connection Failed'); 
      } 
     } 
     catch(Exception $e) 
     { 
      http_response_code("400"); 
      throw $e; 
     } 


    } 

私が述べたように、私はエラーを強制するクエリをスペルミス...そして最終的にはXamarinのC#のルックスから、私の呼び出しています、私のログに私はこのような外観を呼んでいる方法を、それを書くことができこのように:

public static async Task CreateUser(User user) 
     { 
      try 
      { 

       HttpClient _client = new HttpClient(); 
       var content = JsonConvert.SerializeObject(user); 
       var response = await _client.PostAsync(url, new StringContent(content)); 
       string error = response.ToString(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

このコードをデバッグし、変数 "response"の値を見ると常にステータスコード200が表示されますが、私は同様の問題を抱えていますが、すべて "GET"を使用しています。問題は、私は、クエリの結果を保存していたことが

if($connection) 
      { 
       $log->{'Write'}("Creating new user");  
       $query = "INSERT INTOS users (name, lastname, policynumber, phone, email) "; 
       $query .= "VALUES ('$this->name', '$this->lastname', '$this->policynumber', '$this->phone', '$this->email');"; 
       $result = mysqli_query($connection, $query); 
       if(!$result) 
       { 
        $log->{'Write'}('Query Failed on Create New User: '); 
        $log->{'Write'}(mysqli_error($connection)); 
        die('Query Failed' . mysqli_error($connection)); 
       } 
      } 

:コメントが問題を見るために私を助けにジェイソンにより示唆されるように郵便配達を使用して

+1

サービスを郵便配達または同様のユーティリティでテストしましたか? – Jason

+0

私はpostmanを試してみましたが、ステータス200はOKですが、ソフトウェアのテキスト領域にエラーが表示されます。エラーは私が書いたメッセージです: "クエリに失敗しました.SQL構文にエラーがあります。マニュアル..... "実際に私が問題を解決するのに実際に役立った、問題は私が変数にクエリの結果を格納し、ifステートメントでそれを使用していたことでした。 ) –

答えて

0

は、問題は、コードのこの部分であります変数$結果と呼ばれ、その後if文私はそれを使用しているので、私はこれにコードを更新しました:

if(!$result) 
       { 
        $log->{'Write'}('Query Failed on Create New User: '); 
        $log->{'Write'}(mysqli_error($connection)); 
        http_response_code(500); //This line returns the response code 500 
        die('Query Failed ' . mysqli_error($connection)); 
       } 

私は使用して '、モバイルデバイスからの通話中に、この動作を確認することができませんでした郵便配達員は非常に便利でした。

関連する問題