2

我有一个应用程序通过 php 脚本从 phpmyadmin 读取 Json 数据并显示在列表活动中。单击商店名称后,+1 会添加到该商店的投票计数中,并且应该被发送回 php 服务器以将新的投票计数存储在 phpmyadmin 中。选择后,我检查了 db vote count 值,它没有更新。虽然我在 logcat 中得到 HTTP/1.1 200 ok,但我认为数据没有被正确传递或接收。有人可以帮忙吗,我被卡住了,没有方向。

安卓代码:

public void writeJSON() {
    String convertedID;
    String convertedVote;

    //convert int to string value to passed
    convertedID = new Integer(selectedID).toString();
    convertedVote = new Integer(selectedVote).toString();

    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://10.0.2.2/kcstores.php");

    try {

       //writes the output to be stored in creolefashions.com/test2.php
       ArrayList <NameValuePair> nvps = new ArrayList <NameValuePair>(2);
            nvps.add(new BasicNameValuePair("storeUpdate", "update"));
        nvps.add(new BasicNameValuePair("storeID", convertedID));
        nvps.add(new BasicNameValuePair("storeVote", convertedVote));

        httppost.setEntity(new UrlEncodedFormEntity(nvps));
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();
        Log.i("writeJSON", response.getStatusLine().toString());

        } catch(Exception e) {
            Log.e("log_tag", "Error in http connection"+e.toString()); 
        } 
}

PHP代码:

<?php
    $link = mysql_connect("localhost", "root", "") or die (mysql_error());
    mysql_select_db("king_cake_stores")or die (mysql_error());

    $query = "SELECT * FROM storeInfo";
    $result = mysql_query($query);
    $getUpdate = "noupdate";

    if (isset($_POST['storeUpdate'])) {
      echo "receiving data from app";
      $getUpdate = $_POST['storeUpdate'];
      $getStoreID = $_POST['storeID'];
      $getStoreVote = $_POST['storeVote'];
    }

    // If command == getStoreID, it updates the table storeVote value
    // with the android storeVote value based upon correct storeID 
    if ($getUpdate == "update") {
       mysql_select_db("UPDATE storeInfo SET storeVote = $getStoreVote
          WHERE storeID == $getStoreID");
    } else {
    // stores the data in an array to be sent to android application
    while ($line = mysql_fetch_assoc($result)) $output[]=$line;
        print(json_encode($output));
    }
     mysql_close($link);

?>
4

4 回答 4

0

I suggest you start debugging from the server end and start working your way backwards.

First, start logging the response text from your HttpResponse.

Echo the mysql query text in your php file, and make sure it looks the way you're expecting it to.

If it looks correct, check your database structure.

If not, try doing a var_dump($_POST), and check to see if your parameters are being sent correctly.

If you run through these steps, you should have a better idea of where the problem is.

于 2012-05-08T23:56:29.423 回答
0

这可能不是全部问题,但是:

mysql_select_db("UPDATE storeInfo SET storeVote = $getStoreVote
      WHERE storeID == $getStoreID");

那应该是mysql_query

于 2012-05-09T00:03:33.243 回答
0

在这里尝试一下,使用 PDO:

<?php 
//Db Connection Class
Class db{
    private static $instance = NULL;
    private function __construct() {}

    public static function getInstance($DBUSER,$DBPASS) {
        if (!self::$instance){
            try {
                self::$instance = new PDO("mysql:host=localhost;dbname=king_cake_stores", $DBUSER, $DBPASS);
                self::$instance->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            }catch (Exception $e){
                die('Cannot connect to mySQL server.');
            }
        }
        return self::$instance;
    }
    private function __clone(){}
}

//Connect to PDO
$db = db::getInstance('username','password');

//Inser Update
if (isset($_POST['storeUpdate'])) {

    try {
        /*** UPDATE data ***/
        $query = $db->prepare("UPDATE storeInfo
                               SET storeVote = :storeVote
                               WHERE storeID = :storeID");

        $query->bindParam(':storeVote', $_POST['storeVote'], PDO::PARAM_STR);
        $query->bindParam(':storeID',   $_POST['storeID'], PDO::PARAM_INT);

        /*** execute the prepared statement ***/
        $query->execute();

    }catch(PDOException $e){
        echo $e->getMessage();
    }

//Output Current
}else{
    $result = $db->query('SELECT * FROM storeInfo')->fetchAll(PDO::FETCH_ASSOC);
    echo json_encode($result);
}
/*** close the database connection ***/
$db = null;
?>
于 2012-05-09T00:39:06.290 回答
0

尝试or die在每个 PHP 命令之后使用。在 Android 中也使用 try catch 块这将减少代码中的错误。

于 2017-04-19T13:45:25.473 回答