Как я могу опубликовать данные в QtCreator?

Вот мой код создателя Qt для отправки данных на сервер PHP и получения ответа.

QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkAccessManager::connect(manager, SIGNAL(finished(QNetworkReply*)),this ,          SLOT(replyFinished(QNetworkReply*)));
QNetworkRequest *request = new   QNetworkRequest(QUrl("http://68.169.55.41/fss/verifylogindetails.php"));
QByteArray postData =" {\"estate_id\":\"hsr\",\"emp_pin\":1234,\"emp_id\":\"santhosh\"}";
request->setRawHeader( "User-Agent" , "Mozilla Firefox" );
request->setRawHeader( "charset", "utf-8" );
request->setRawHeader( "Connection", "keep-alive" );
manager->post(*request, postData );
}

void MainWindow::replyFinished(QNetworkReply *reply)
{
 QString data = reply->readAll().trimmed();
 qDebug() << data;
} 

А вот мой php-код для получения данных для входа и сравнения со значениями базы данных и отправки ответа.

<?php
include 'config.php'; 
$data = json_decode($_SERVER['HTTP_JSON']);
$con = mysql_connect($host, $user_name, $password);
if (!$con)
{
die('Could not connect: '.mysql_error());
}
mysql_select_db($db_name, $con);
$result = mysql_query("SELECT * FROM login_data_table");
while($row = mysql_fetch_array($result))
{
if((strcasecmp( $row['Emp_Id'], $data->emp_id) == 0) && ($row['Emp_Pin'] == $data- >emp_pin) && (strcasecmp( $row['Estate_Id'], $data->estate_id) == 0))
{
echo "SUCCESS"; 
}
else
{
echo "FAIL";
}
}
mysql_close($con);
?>

Моя проблема ..... Всегда я получаю сообщение FAIL от сервера. Даже я отправляю правильные данные для входа. пожалуйста, помогите мне, где я ошибаюсь в своем коде.


person sachi    schedule 10.11.2011    source источник
comment
Ваш PHP-код очень неэффективен. Я бы изменил цикл while с условием WHERE SQL. Еще один совет: используйте PDO, а не функции mysql_*.   -  person Witold Sosnowski    schedule 10.11.2011
comment
спасибо за ответ. У меня есть только одна запись в моей БД. поэтому я использовал цикл while вместо WHERE   -  person sachi    schedule 10.11.2011
comment
Что ж, тогда вы можете просто пропустить часть while и просто один раз вызвать mysql_fetch_array :).   -  person Witold Sosnowski    schedule 10.11.2011


Ответы (1)


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

void MainWindow::sendPost(url)
{
    QUrl params;
    params.addQueryItem("usrname", login);
    params.addQueryItem("passwrd", password);

    QByteArray data;
    data.append(params.toString());
    data.remove(0,1);

    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    QNetworkReply *reply = manager->post(QNetworkRequest(url), data);
    CONNECT(reply, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
}

void MainWindow::replyFinished(QNetworkReply *reply)
{
 QString data = reply->readAll().trimmed();
 qDebug() << data;
} 

PHP-код будет получать значения из программы, используя массив $_POST ($_POST['usrname'] и $_POST['password'] содержат оба значения, отправленные из программы), а не $_SERVER. Я понятия не имею, почему вы использовали $_SERVER.

person Witold Sosnowski    schedule 10.11.2011
comment
Большое спасибо. Ваше решение решило мою проблему. г-н Витольд Сосновский - person sachi; 10.11.2011