0

我创建了一个使用服务器上的 PHP 文件与 MySQL 数据库交互的 Android 应用程序。我创建了一个final string EXTRA_SOLDE意图发送到其他活动以显示结果。

一切都很好,但在另一个活动中,它TextView是空白的,好像什么都没发送一样。请帮忙。

这是我的 PHP 文件:

<?php
unset($_GET);

if( isset($_POST['username'])) {

    echo '<?xml version="1.0"?>'."\n";
    echo "<login>\n";

    // host doit être remplacé par le serveur de la base de données.
    // user représente le nom d'utilisateur de la base de données.
    // pass est le mot de passe pour accéder à cette base de données avec cette 
// utilisateur.
    $con = mysql_connect("mysql6.000webhost.com","","");
    if (!$con)
    {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("a1287023_auth",$con);

    if(get_magic_quotes_gpc()) {
        $login = stripslashes($_POST['username']);
    } else {
        $login = $_POST['username'];
    }

    unset($_POST);

    $kid = login($login);
    if($kid == -1) { 
        error(3); 
    } else {
        printf('    <user id="%d"/>'."\n",$kid);
    }

    echo "</login>";
}

function error($ec) {
    printf('    <error value="%d"/>'."\n".'</login>',$ec);
    die();
}

function login($login) {
   $select = "
        SELECT epargne
        FROM auth_table
        WHERE user_id = '$login' 
        ";
    $fixedlogin = mysql_real_escape_string($login);
    $query = sprintf($select, $fixedlogin);
    $result = mysql_query($query);
    if(mysql_num_rows($result) != 1) { return -1; }    
    $row = mysql_fetch_row($result);
    return $row[0];
    return $row[1];
}

?>

这是我调用服务器上设置的 PHP 文件的活动。

public void onClick(View v){ 
    Intent intent = getIntent();

    if (intent != null) {
        String valeur=intent.getStringExtra(EXTRA_USER);
        doLogin(valeur);
    }
    }
});}       

private void doLogin(final String login) {
    // Création d'un thread
    Thread t = new Thread()
    {
        public void run()
        {
            Looper.prepare();
            // On se connecte au serveur afin de communiquer avec le PHP
            DefaultHttpClient client = new DefaultHttpClient();
            HttpConnectionParams.setConnectionTimeout(client.getParams(), 15000);

            HttpResponse response;
            HttpEntity entity;

            try
            {
                // On établit un lien avec le script PHP
                HttpPost post = new HttpPost(UPDATE_URL);

                List<NameValuePair> nvps = new ArrayList<NameValuePair>();

                nvps.add(new BasicNameValuePair("username", login));

                post.setHeader("Content-Type", "application/x-www-form-urlencoded");
                // On passe les paramètres login et password qui vont être récupérés
                // par le script PHP en post
                post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
                // On récupère le résultat du script
                response = client.execute(post);

                entity = response.getEntity();

                InputStream is = entity.getContent();
                // On appelle une fonction définie plus bas pour traduire la réponse
                read(is);
                is.close();

                if (entity != null)
                    entity.consumeContent();
            }
            catch (Exception e)
            {
                progressDialog.dismiss();
                createDialog("Error", "Connexion Impossible");
            }
            Looper.loop();
        }
    };
    t.start();
}

private void read(InputStream in)
{
    // On traduit le résultat d'un flux
    SAXParserFactory spf = SAXParserFactory.newInstance();

    SAXParser sp;

    try
    {
        sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();
        // Cette classe est définie plus bas
        LoginContentHandler uch = new LoginContentHandler();

        xr.setContentHandler(uch);

        xr.parse(new InputSource(in));

    }
    catch (ParserConfigurationException e)
    {

    }
    catch (SAXException e)
    {

    }
    catch (IOException e)
    {
    }

}

class LoginContentHandler extends DefaultHandler
{
    // Classe traitant le message de retour du script PHP
    private boolean in_loginTag = false;
    private int userID;
    private String money ; 
    private boolean error_occured   = false;

    public void startElement(String n, String l, String q, Attributes a)

    throws SAXException
    {
        if (l == "login")
            in_loginTag = true;
        if (l == "error")
        {
            progressDialog.dismiss();
            switch (Integer.parseInt(a.getValue("value")))
            {
                case 1:
                    createDialog("Error", "Couldn't connect to Database");
                    break;
                case 2:
                    createDialog("Error", "Error in Database: Table missing");
                    break;
                case 3:
                    createDialog("Error", "Invalid username and/or password");
                    break;
            }
            error_occured = true;
        }

        if (l == "user" && in_loginTag && a.getValue("id") != "")
            // Dans le cas où tout se passe bien on récupère l'ID de l'utilisateur
            userID = Integer.parseInt(a.getValue("id"));
        money = String.valueOf(userID) ;

    }

    public void endElement(String n, String l, String q) throws SAXException
    { 
        // on renvoie l'id si tout est ok
        if (l == "login")
        {
            in_loginTag = false;

            if (!error_occured)
            {
                progressDialog.dismiss();
                Intent i = new Intent(Budget.this,Epargne.class);
                i.putExtra(EXTRA_SOLDE,money);

                startActivity(i);

            }
        }
    }

    public void characters(char ch[], int start, int length)
    {
    }

    public void startDocument() throws SAXException
    {
    }

    public void endDocument() throws SAXException
    {
    }

}

}
4

1 回答 1

0

对于初学者来说,使用用户作为 Root 并且没有密码很简单!在你的 PHP 文件中不要使用密码!并将您的 PhpmyAdmin 设置设置为 root!

PHP 文件 *define('DB_SERVER', "localhost"); // db server define('DB_USER', "root"); // db user define('DB_PASSWORD', ""); // db password (mention your db password here) define('DB_DATABASE', "diplom"); // database name*

于 2013-03-19T23:49:17.057 回答