HttpPost无法在Android中运行

时间:2015-05-29 20:30:49

标签: php android mysql http-post

我正在尝试将HttpPost从我的应用程序转换为php脚本,然后将数据插入远程数据库。我没有收到任何运行时错误,但数据永远不会插入到我的远程数据库中。 代码:

public class InsertResult extends AsyncTask<String, String, String>
    {
        @Override
        protected String doInBackground(String... arg0)
        {
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://www.<myDomain>.co.za/insertTeamResultwithCode.php");

            try
            {
                ArrayList<NameValuePair> nameValues = new ArrayList<NameValuePair>(10);
                nameValues.add(new BasicNameValuePair("Code", password));
                nameValues.add(new BasicNameValuePair("Section", section));
                nameValues.add(new BasicNameValuePair("Gender", gender));
                nameValues.add(new BasicNameValuePair("WinningTeam", newResult.getWinningTeam()));
                nameValues.add(new BasicNameValuePair("LosingTeam", newResult.getLosingTeam()));
                nameValues.add(new BasicNameValuePair("FixtureD", newResult.getDate()));
                nameValues.add(new BasicNameValuePair("FixtureT", newResult.getTime()));
                nameValues.add(new BasicNameValuePair("Venue", newResult.getVenue()));
                nameValues.add(new BasicNameValuePair("Court", newResult.getCourt()));
                nameValues.add(new BasicNameValuePair("Texts", newResult.getText()));

                httppost.setEntity(new UrlEncodedFormEntity(nameValues));

                HttpResponse response = httpclient.execute(httppost);
            }
            catch (ClientProtocolException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result)
        {
            GoToJarvisDashboard();
        }
    }

和PhP脚本:

<?php
//Code verifications
$Code = $_GET['Code'];

//Variables for SQL INSERT
$Section = $_GET['Section'];
$Gender = $_GET['Gender'];
$WinningTeam = $_GET['WinningTeam'];
$LosingTeam = $_GET['LosingTeam'];
$FixtureD = $_GET['FixtureD'];
$FixtureT = $_GET['FixtureT'];
$Venue = $_GET['Venue'];
$Court = $_GET['Court'];
$Texts = $_GET['Texts'];
$SetsWon = $_GET['SetsWon'];
$SetsLost = $_GET['SetsLost'];
$Winner_Score = $_GET['Winner_Score'];
$Loser_Score = $_GET['Loser_Score'];

$dbname = '<dbName>';
$dbuser = '<user>';
$dbpass = '<password>';
$dbhost = '<host>t';
$connect = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname) or die ("Unable to Connect to '$dbhost'");

if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$SQL = "SELECT * FROM squasdlw_db1.validationCodes WHERE Code = '$Code'";
$codeValid = mysqli_query($connect, $SQL) or die (mysqli_error($connect));

$response["no"] = array();

if (mysqli_num_rows($codeValid) > 0) 
{
    echo "Code is valid\n\n";

    //Insert Result
    $query = "INSERT INTO squasdlw_db1.jarvisTeamResults (Section,Gender,WinningTeam,LosingTeam,FixtureD,FixtureT,Venue,Court,Texts,SetsWon,SetsLost,Winner_Score,Loser_Score) VALUES('$Section','$Gender','$WinningTeam','$LosingTeam','$FixtureD','$FixtureT','$Venue','$Court','$Texts','$SetsWon','$SetsLost','$Winner_Score','$Loser_Score')";             
    $result = mysqli_query($connect, $query) or die (mysqli_error($connect));
    echo "Result successfully submitted to Jarvis Remote Database: Table -> jarvisTeamResults\n\n"  ;   

    //Update Winner on jarvisLogs
    $query = "UPDATE squasdlw_db1.jarvisLogs SET Points = Points + '$Winner_Score', Played = Played + 1, Won = Won + 1 WHERE Gender = '$Gender' AND Section = '$Section' AND Team = '$WinningTeam'";    
    $result = mysqli_query($connect, $query) or die (mysqli_error($connect));
    echo "Log update for '$WinningTeam': Table -> jarvisLogs\n\n";

    //Update Winner on jarvisLogs
    $query = "UPDATE squasdlw_db1.jarvisLogs SET Points = Points + '$Loser_Score', Played = Played + 1, Lost = Lost + 1 WHERE Gender = '$Gender' AND Section = '$Section' AND Team = '$LosingTeam'";    
    $result = mysqli_query($connect, $query) or die (mysqli_error($connect));
    echo "Log update for '$LosingTeam': Table -> jarvisLogs\n\n";

    $response["isValid"] = true;
    echo json_encode($response);
}
else
{
    $response["isValid"] = false;
    echo "The code is not valid\n";
    echo json_encode($response);
}

mysqli_close($connect);

?>

甚至更奇怪的是,如果我在网络浏览器中尝试这种方式,它可以正常运行并且数据会被添加到远程数据库中 -

http://www.<myDomain>.co.za/insertTeamResultwithCode.php?Code=<password>&Section=A&Gender=Men&WinningTeam=NW&LosingTeam=KZN&FixtureD=2015-05-25&FixtureT=09:00:00&Venue=Puk&Court=6&Texts=Andrew%20(NW)%20beat%20Kevin%20(WP)%203-1&SetsWon=15&SetsLost=5&Winner_Score=15&Loser_Score=5

请帮忙,我不知道出了什么问题,因为它不会产生运行时错误?我快要疯了......

2 个答案:

答案 0 :(得分:1)

您正在执行HttpPost,因此您应该通过POST而非GET

获取数据
//Code verifications
$Code = $_POST['Code'];

//Variables for SQL INSERT
$Section = $_POST['Section'];
$Gender = $_POST['Gender'];
$WinningTeam = $_POST['WinningTeam'];
$LosingTeam = $_POST['LosingTeam'];
$FixtureD = $_POST['FixtureD'];
$FixtureT = $_POST['FixtureT'];
$Venue = $_POST['Venue'];
$Court = $_POST['Court'];
$Texts = $_POST['Texts'];
$SetsWon = $_POST['SetsWon'];
$SetsLost = $_POST['SetsLost'];
$Winner_Score = $_POST['Winner_Score'];
$Loser_Score = $_POST['Loser_Score'];

或者更改您的Android代码以发出GET个请求:

HttpGet httpget = new HttpGet("http://www.example.com/insertTeamResultwithCode.php");

答案 1 :(得分:0)

你在android中发送POST但你期望php中的GET不一样。

$_GET更改为$_POST,它会有效。

Here a post that will tell you difference between then

Here another with some more details