IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Impossible de mettre à jour un champ de base de données avec un fichier PHP


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Impossible de mettre à jour un champ de base de données avec un fichier PHP
    Bonjour,

    Je débute en programmation Android et je travaille actuellement sur une application. Mon problème peut paraitre simple mais j'ai cherché sur internet des tutoriels et aucun résultat..

    Le principe est simple: L'utilisateur se connecte avec son identifiant et son mot de passe, il accède à une page avec différentes informations qui proviennent d'une base de donnée (jusqu'ici tout fonctionne).

    Nom : Capture1.PNG
Affichages : 121
Taille : 27,4 Ko

    Mais maintenant, je veux que lorsque l'utilisateur appuie sur ACCEPTER, l'application fasse un UPDATE en base de données (qui est externe je précise).

    Donc j'utilise un fichier PHP avec une connexion à la base de donnée et la requête UPDATE:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    $servername = "localhost";
    $username = "root";
    $password = "MDP";
    $dbname = "DATABASE";
     
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
     
    $sql = "UPDATE patient SET IDAMBULANCE = 5 WHERE IDPATIENT = 91491";
     
    if ($conn->query($sql) === TRUE) {
        echo "Record updated successfully";
    } else {
        echo "Error updating record: " . $conn->error;
    }
     
    $conn->close();
    ?>
    Voici la partie où je déclare le bouton "accepter" et j'ajoute la procédure qui va se dérouler quand l’utilisateur cliquera dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
                       final Button button_accepter = (Button) findViewById(R.id.buttonAccepte);
                       button_accepter.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                String result = null;
                                InputStream is = null;
                                JSONObject json_data=null;
                                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                                ArrayList<String> donnees = new ArrayList<String>();
     
                                try{
                                    //commandes httpClient
                                    HttpClient httpclient = new DefaultHttpClient();
                                    HttpPost httppost = new HttpPost("ADRESSE DE MON FICHIER PHP");
                                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                    HttpResponse response = httpclient.execute(httppost);
                                    HttpEntity entity = response.getEntity();
                                    is = entity.getContent();
                                }
                                catch(Exception e){
                                    Log.i("taghttppost", "" + e.toString());
                                    Toast.makeText(getBaseContext(),e.toString() , Toast.LENGTH_LONG).show();
                                }
                            }
                        });
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Voir messages récurent sur le log des exceptions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("taghttppost", "erreur de transmission",e);
    (d'ou vient ce code ? y a encore un tuto pourri qui traine sur internet ?)


    Et hop, miracle, s'affichera la raison du pourquoi:
    NetworkOnMainThreadException

    On ne fait pas de réseau dans un appel UI (comme onClick).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'ai suivi ton conseil et j'ai changé de méthode, je fais l'appel du réseau en arrière plan. J'appelle tout d'abord une autre classe dans le main:
    Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                      button_accepter.setOnClickListener(new View.OnClickListener() {
                          @Override
                          public void onClick(View v) {
                              startActivityForResult(new Intent(Main.this, AccepterMission.class), RESULT_Main);
                          }
                      });
    AccepterMission
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    package com.example.fabien.tourderole;
     
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Looper;
    import android.view.View;
    import android.widget.Button;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.HttpConnectionParams;
    import org.apache.http.protocol.HTTP;
     
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
     
    /**
     * Created by Fabien on 11/02/2015.
     */
    public class AccepterMission extends Activity {
     
        //ADRESSE DU FICHIER PHP
        private static final String    UPDATE_URL    = "ADRESSE DU FICHIER PHP";
        public ProgressDialog progressDialog;
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.page_accepter_mission);
     
            // initialisation d'une progress bar
            progressDialog = new ProgressDialog(this);
            progressDialog.setMessage("Connexion au serveur...");
            progressDialog.setIndeterminate(true);
            progressDialog.setCancelable(false);
     
            Button button = (Button) findViewById(R.id.button_2_accepter);
     
            // Définition du listener du bouton
            button.setOnClickListener(new View.OnClickListener() {
     
                public void onClick(View v) {
                    progressDialog.show();
                    acceptMissions("5","91491");
                }
            });
        }
     
        private void createDialog(String title, String text)
        {
            // Création d'une popup affichant un message
            AlertDialog ad = new AlertDialog.Builder(this)
                    .setPositiveButton("Ok", null).setTitle(title).setMessage(text)
                    .create();
            ad.show();
        }
     
        private void acceptMissions(final String idAmb, final String idPat)
        {
            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("IDAMBULANCE", idAmb));
     
                        nvps.add(new BasicNameValuePair("IDPATIENT", idPat));
     
                        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();
     
                        if (entity != null)
                            entity.consumeContent();
                    }
                    catch (Exception e)
                    {
                        progressDialog.dismiss();
                        createDialog("Error", "Impossible d'établir une connexion au serveur");
                    }
     
                    Looper.loop();
                }
            };
        }
    }
    Mais quand je clique sur le bouton rien ne se passe, aucune erreur est signalée mais le résultat n'est pas là...

    Pourquoi est-ce qu'une connexion PHP avec Android est si complexe ?

Discussions similaires

  1. Mettre à jour une base de données avec un fichier excel
    Par antoine.courtois dans le forum Langage SQL
    Réponses: 1
    Dernier message: 29/11/2011, 14h05
  2. Création base de données avec des fichiers .csv
    Par gwen43 dans le forum Débuter
    Réponses: 4
    Dernier message: 21/09/2009, 09h01
  3. Générer Base de données avec le fichier de mapping
    Par vain_mich dans le forum Hibernate
    Réponses: 1
    Dernier message: 10/05/2007, 16h07
  4. adresser une base de données avec un fichier vbscript
    Par boss_gama dans le forum VBScript
    Réponses: 8
    Dernier message: 16/08/2006, 19h19
  5. Impossible de mettre à jour un champs
    Par _developpeur_ dans le forum Access
    Réponses: 4
    Dernier message: 23/01/2006, 13h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo