2017-02-23 9 views
0

Это мой PHP-файл.Есть ли способ получить результаты от php и использовать его на C#? Как для входа?

require "conn.php"; 
$user_name = $_POST["user_name"]; 
$user_pass = $_POST["password"]; 
$mysql_qry = "select * from companies where company_username like '$user_name' and company_password like '$user_pass'"; 


if(mysqli_num_rows($result) > 0) 
{ 
echo "Company Login Successful"; 
} 
else{ 
echo "Login Error! Please try again"; 
} 

Должен ли я использовать WebClient? Извините, я просто новичок, спасибо :)

+2

** Никогда не храните пароли в ясном тексте! **. Храните только хэши паролей! Используйте PHP '' password_hash() '] (http://php.net/manual/en/function.password-hash.php) и [' password_verify() '] (http://php.net/manual/en /function.password-verify.php). Если вы используете PHP-версию ниже 5.5 (что, надеюсь, у вас нет), вы можете использовать библиотеку [password_compat library] (https://github.com/ircmaxell/password_compat), чтобы получить такую ​​же функциональность. –

+1

** Вы широко открыты для [SQL Injections] (http://php.net/manual/en/security.database.sql-injection.php) ** и должны действительно использовать ** [Подготовленные утверждения] (http: //php.net/manual/en/mysqli.quickstart.prepared-statements.php)** вместо того, чтобы объединять ваши запросы. Специально, поскольку вы вообще не избегаете пользовательских входов! –

+0

, пожалуйста, проверьте это http://stackoverflow.com/a/24859910/1849024 – imsome1

ответ

1

Есть довольно много возможностей. Я представлю одно, но это далеко не единственное.

Прежде всего, я бы не использовал стандартный тип контента (скорее всего, text/html, но я его не проверял). Вы можете использовать JSON или XML как тип содержимого, я буду использовать JSON здесь

header("Content-Type: application/json"); 

Это не является необходимым, мы могли бы разобрать JSON пренебрег заголовка Content-Type, но чище, что путь.

Далее мы будем генерировать выходной сигнал

$arr = array('Status' => 1, 'Message' => 'Company Login Successful'); //or otherwise, depending on if the login *was* successful 
echo json_encode($arr); 

на стороне C# вы можете использовать HttpClient класс, чтобы принести результат.

HttpClient httpClient = new HttpClient(); 
var httpResponseMessage = await httpClient.PostAsync($"http://www.yourserver.net/login.php", loginHttpContent); 
var stream = await httpResponseMessage.ReadAsStreamAsync(); 
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(LoginResult)); 
var loginResult = serializer.ReadObject(stream) as LoginResult; 

LoginResult класс:

[DataContract] 
class LoginResult 
{ 
    [DataMember] 
    public int Status { get; set; } 
    [DataMember] 
    public string Message { get; set; } 
} 

Обратите внимание: код предоставляется в только эскиз и вовсе не готовый к производству. Например, вы не должны создавать HttpClient или DataContractJsonSerializer на данный момент, правильно распоряжаться ресурсами, обработки исключений и т.д.

0

Я искал решения, и я видел простой способ получить результаты из PHP ...

private void SubmitData() 
{ 
try 
{ 
    string user = tbUsername.Text; 
    string pass = tbPassword.Text; 
    string url = "--my_php_url--"; 

    WebClient webclient = new WebClient(); 
    NameValueCollection formData = new NameValueCollection(); 
    formData["user_name"] = user; 
    formData["password"] = pass; 

    byte[] responseBytes = webclient.UploadValues(url, "POST", formData); 
    string responsefromserver = Encoding.UTF8.GetString(responseBytes); 
    MessageBox.Show(responsefromserver); 
    webclient.Dispose(); 
} 
catch (Exception e) 
{ 
MessageBox.Show("Error :" + e.Message); 
} 

Спасибо за помощь! :)