2011-11-10 6 views
0

다음은 PHP 서버로 데이터를 보내고 응답을받는 Qt 작성자의 코드입니다.어떻게 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 코드는 매우 비효율적입니다. 나는 "WHERE"SQL 조건으로 while 루프를 변경합니다. 또 다른 조언 : mysql_ * 함수가 아닌 PDO를 사용하십시오. –

+0

답장을 보내 주셔서 감사합니다. DB에 레코드가 하나뿐입니다. 그래서 while 루프를 while 대신에 사용했습니다. – 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

대단히 고마워요. 귀하의 솔루션으로 제 문제가 해결되었습니다. Mr.Witold Sosnowski – sachi

관련 문제