2012-05-08 2 views
2

J'ai une application qui lit les données JSON de phpmyadmin à travers un script PHP et affichée dans une activité de liste. Une fois qu'un nom de magasin est cliqué, +1 est ajouté au nombre de votes pour ce magasin et est censé être renvoyé au serveur php pour stocker le nouveau nombre de votes dans phpmyadmin. Après la sélection, je vérifie la valeur du nombre de votes db et elle n'est pas mise à jour. Bien que je reçoive HTTP/1.1 200 ok dans logcat, je ne pense pas que les données soient transmises ou prises correctement. Est-ce que quelqu'un peut aider, je suis coincé et n'ai aucune direction.Les données ne sont pas transmises correctement au serveur php

code Android:

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()); 
     } 
} 

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

?> 
+0

vous avez '==' au lieu de '=' dans votre requête de mise à jour, aussi injection SQL –

+0

Je l'ai là parce que où le quand le storeId == getStoreId, cela signifie que c'est le même enregistrement, donc procéder à la mise à jour. – Skip

+0

[Retour à l'école] (http://www.w3schools.com/sql/sql_where.asp) '' = égalité –

Répondre

0

Je vous suggère de commencer le débogage à partir de la fin du serveur et commencer à travailler votre chemin en arrière.

Tout d'abord, commencer à vous connecter le texte de réponse de votre HttpResponse.

Echo le texte de la requête mysql dans votre fichier php, et assurez-vous qu'il regarde la façon dont vous vous attendez à.

Si cela vous semble correct, vérifiez la structure de votre base de données.

Sinon, essayez de faire un var_dump($_POST), et vérifiez si vos paramètres sont envoyés correctement.

Si vous exécutez ces étapes, vous devriez avoir une meilleure idée de l'endroit où le problème.

+0

Merci pour votre contribution, mais j'ai finalement réussi à travailler. Je vais utiliser cela sur mon prochain numéro. – Skip

0

Cela pourrait ne pas être le problème, mais:

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

Ce devrait être mysql_query.

+0

Merci Dan! Votre réponse combinée à celle de Lawrence a finalement permis à mon programme de fonctionner! Merci pour votre contribution. – Skip

0

essayer ici ce, en utilisant AOP:

<?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; 
?> 
+0

Encore une fois Lawrence, merci! – Skip

0

Essayez d'utiliser or die après chaque commande PHP. Également utiliser try catch bloque dans Android Cela permettra de réduire les erreurs dans le code.

Questions connexes