php - HttpPost 在 Android 中不工作

标签 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

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

最佳答案

您正在执行一个 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");

关于php - HttpPost 在 Android 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538534/

相关文章:

javascript - 单击值时,一页中的多个 ajax 搜索在两个输入字段上获得相同的值

Android Studio 互联网权限

java - Android 按钮调用 www 地址

php - 有没有一种干净的方法可以使用 PHP 的 `list()` *跳过* 数组索引?

php - 使用 jQuery 显示返回的 JSON 对象

android - 使用 gradlew assembleRelease 从 native react 创建发布 apk 时出错

即使使用 utf8mb4,MySql 字符串值也不正确

mysql - 选择 Mysql 数据类型

mysql - 复杂查询中的语法错误

php - 在 WooCommerce 中显示不包括产品类别的订单项目名称