У меня есть приложение C# Windows Form, отправляющее переменные в веб-службу PHP.
Протестировано отдельно:
1) Веб-сервис PHP работает и возвращает результат.
2) Приложение C# Windows Form для отображения переменных в URL-адресе с помощью WebRequest, переменные отображаются правильно в URL-адресе.
3) Когда я отображаю возвращаемую переменную на C# с помощью MessageBox.Show, отображается правильная переменная (Разрешить)
Но когда я использую возвращаемую переменную в операторе if, он не выполняет код внутри оператора if.
Вот мой веб-сервис PHP:
<?php
// Database Structure
require_once('connect.php');
//Get password from the database for the user
$stmtus = $conn->prepare("SELECT password from `Users` where `email` = :Username");
$stmtus->bindParam(':Username', $username);
$username= $_GET['username'];;
$stmtus -> execute();
$password = $stmtus->fetch();
$un = $_GET['username'];
$pw = $_GET['password'];
$ust = $_GET['Token'];
if (password_verify($pw, $password[0])){
$stmt = $conn->prepare("SELECT
COUNT(Token) AS cnt FROM `SoftwareToken`
LEFT JOIN User ON iduser = SoftwareToken.Consultant
WHERE Token = :Token
AND username = :Username");
$stmt->bindValue(':Username', $un);
$stmt->bindValue(':Token', $ust);
$stmt->execute();
$result= array();
while ($result = $stmt->fetch(PDO::FETCH_ASSOC)){
$cnt = $result['cnt'];
if ($cnt == 1){
echo "Allow";
}else{
echo "NO";
}
?>
Вот мой код приложения Windows Form на C#:
private void btnlogin_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(txtusername.Text))
{
MessageBox.Show("Please insert username");
}
if (String.IsNullOrEmpty(txtpassword.Text))
{
MessageBox.Show("Please insert password");
}
var Token = "PYPYY 46355 R8T2Q2";
var username = txtusername.Text;
var password = txtpassword.Text;
var url = "https://mydomain.com.au/LoginVerification.php?";
var var = "username = " + username + "&password = " + password + "&Token = " + Token;
var URL = url + var;
// MessageBox.Show(URL);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);
// Read the content.
string responseFromServer = reader.ReadToEnd();
//MessageBox.Show(responseFromServer);
// Display the content.
if (responseFromServer == "Allow")
{
//Form1 identykidzform = new Form1();
//identykidzform.Show();
MessageBox.Show(responseFromServer);
}
else if (responseFromServer == "NO")
{
MessageBox.Show("No");
//Application.Exit();
}
else
{
MessageBox.Show("Test failed");
//Application.Exit();
}
}
Вы можете попробовать лучше изучить переменную responseFromServer. Если это не удается, это потому, что ответ ни «Разрешить», ни «НЕТ»
Вы используете службу с конечной точкой HTTPS. Убедитесь, что вы получили правильный ответ без ошибок.
if - false. Отлаживайте и наблюдайте за точными значениями ваших переменных. Они такие, какими вы их ожидаете? Есть ли в строке ошибочные пробелы или что-то еще, что могло бы привести к тому, что это не будет точно, с чем вы его сравниваете?
Я не знаю php, но может ли $result['cnt'] выдать исключение?
@Nilesh, только если в ассоциативном массиве $ result нет индекса с именем "cnt". Но есть должен, потому что это псевдоним столбца, используемый в запросе SQL.





Что такое
responseFromServer, когда он выходит из строя? И вам не хватает двух закрывающих скобок в файле PHP.