2011-11-10 65 views
0

这里是我的Qt创建器的代码,将数据发送到PHP服务器并获得响应。我如何在QtCreator中发布数据?

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); 
?> 

我的问题是.....总是我从服务器收到失败消息。即使我发送正确的登录信息。请帮我解决我在代码中错误的地方。

+0

您的PHP代码效率很低。我会改变while循环与“WHERE”SQL条件。另一个建议:使用PDO,而不是mysql_ *函数。 –

+0

感谢您的回复。我的数据库中只有一条记录。所以,我用循环而不是WHERE – sachi

+0

那么,你可以跳过while部分,只需调用mysql_fetch_array一次:)。 –

回答

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 [ '密码']保存从程序发送两个值),而不是$ _服务器。我不知道你为什么使用$ _SERVER。

+0

非常感谢。你的解决方案解决了我的问题沃特尔德索斯诺夫斯基先生 – sachi