2016-08-26 6 views
-4

私は最近、LAMPサーバーでパラメータを送受信するC#アプリケーションを作成する方法を学んできましたが、壁に当たったようです。ここで間違っていたことを理解する助けが必要です。このコードを正しく動作させるにはどうすればよいですか?

これは、2つのパラメータ(ログインとパスワード)をPHPファイルに送信し、パラメータが正しいかどうかに応じて応答を受け取る単純なテストアプリケーションです。すべてが正しいようだと私は実際に私のPHPファイルからの応答を取得することができますが

private void btEntrar_Click(object sender, EventArgs e) 
    { 
     String login, senha, postData, requestMethod = "POST", contentType = "application/x-www-form-urlencoded", responseFromServer = null; 
     String urlLogin = "http://192.168.1.107/knowledgems/accounts/login.php"; 

     login = tbLogin.Text; 
     senha = tbSenha.Text; 
     postData = "param1=" + login + "&param2=" + senha; 
     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     WebRequest request = WebRequest.Create(urlLogin); 
     WebResponse response; 
     Stream dataStream; 
     StreamReader reader; 

     //Send request 
     request.Method = requestMethod; 
     request.ContentType = contentType; 
     request.ContentLength = byteArray.Length; 
     dataStream = request.GetRequestStream(); 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     dataStream.Close(); 

     //Get response 
     response = request.GetResponse(); 
     dataStream = response.GetResponseStream(); 
     reader = new StreamReader(dataStream); 
     responseFromServer = reader.ReadToEnd(); 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

     if (responseFromServer.Equals("SUCCESS")) 
      MessageBox.Show("Login efetuado."); 
     else 
      MessageBox.Show("Login não efetuado." + responseFromServer); 
    } //btEntrar 

は、私が

(if (responseFromServer.Equals("SUCCESS"))) 

応答を示すにもかかわらず、最後に検証関数を通過することはできませんよ正確には文字列 "SUCCESS"です。私はresponseFromServer文字列を "SUCCESS"と比較してログインするのが大丈夫かどうかをチェックできないようですので、代わりにelse条件を読み終えます。

次も私のPHPファイルを投稿しています。

<?php 
require_once 'connection.php'; 
header('Content-Type: application/form-data'); 

class User { 
    private $db; 
    private $connection; 

    function __construct(){ 
     $this->db = new DB_Connection(); 
     $this->connection = $this->db->get_connection();    
    } //__construct 

    public function does_user_exist($username,$password){ 
     $query = "SELECT * FROM users WHERE user_username = '$username' AND user_password = '$password'"; 
     $result = mysqli_query($this->connection,$query); 
     if(mysqli_num_rows($result) > 0){ 
      echo "SUCCESS";  
     } //if 
     else { 
      echo "ERRO&101";    
     } //else    
     mysqli_close($this->connection); 
    } //does_user_exist  

} //class 

$user = new User(); 
if (isset($_POST['param1'],$_POST['param2'])){ 
    $username = $_POST['param1']; 
    $password = $_POST['param2']; 
    if(!empty($username) && !empty($password)){ 
     //$encrypted_password = md5($password); 
     $user -> does_user_exist($username,$password); 
    } 
    else { 
     echo "ERRO&100"; 
    } //else 
} //if 
?> 

お時間をいただきありがとうございます。

Edit1:私の推測では、この形式はcontentTypeには適していないと思いますが、正しい方法は何か分かりません。

+4

応答に改行などがある場合はどうなりますか?これはうまくいきます: 'responseFromServer.Trim()。Equals(" SUCCESS ")'? –

+0

@EdPlunkett私はこの単純な問題を解決した何かを信じることができません。私には恥ずべきがあります。 – MuriloRM

+0

これは16進数のデータ(文字列など)を調べる理由です。 – zaph

答えて

2

"SUCCESS"の最後に改行がありますか?これが動作するかどうかを確認してください:

if (responseFromServer.Trim().Equals("SUCCESS")) 
{ 
関連する問題