OkHttp
YameFAZE
Messages postés
204
Statut
Membre
-
YameFAZE Messages postés 204 Statut Membre -
YameFAZE Messages postés 204 Statut Membre -
Bonjour,
Encore moi. J'ai lu la documentation sur
Donc j'ai bien compris que je devais utiliser ce code là pour faire ma requête :
Je ne demande pas un code tout fait bien sûr. Juste que l'on m'explique ce code pour que je puisse le comprendre et l'adapter à mon projet.
P.S. : Si j'ai bien compris ce code est à insérer dans une classe séparée pour éviter de polluer l'activité principale ? Dans ce cas comment faire pour lier le clique du bouton dans l'activité principale au script de requête de la classe secondaire ? Et également comment lier les variables du script PHP situé sur mon serveur aux champs de formulaire (pseudo et mot de passe) de mon appli ?
Encore moi. J'ai lu la documentation sur
OkHttp: https://square.github.io/okhttp/ J'avoue ne pas trop comprendre comment adapter cette librairie à ce que je souhaite faire. Une page de login sur mon appli, l'utilisateur renseigne son pseudo et son mot de passe, clique sur le bouton de connexion et ensuite c'est là que je devrais normalement utiliser
OkHttppour que au clique du bouton, mon appli communique avec le fichier PHP. Hors je ne sais pas comment faire. Pour l'instant j'ai une base de données externe ainsi qu'un script PHP permettant d'interroger la base de données.
Donc j'ai bien compris que je devais utiliser ce code là pour faire ma requête :
OkHttpClient client = new OkHttpClient();
String run(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
Je ne demande pas un code tout fait bien sûr. Juste que l'on m'explique ce code pour que je puisse le comprendre et l'adapter à mon projet.
P.S. : Si j'ai bien compris ce code est à insérer dans une classe séparée pour éviter de polluer l'activité principale ? Dans ce cas comment faire pour lier le clique du bouton dans l'activité principale au script de requête de la classe secondaire ? Et également comment lier les variables du script PHP situé sur mon serveur aux champs de formulaire (pseudo et mot de passe) de mon appli ?
A voir également:
- Square okhttp cloud c'est quoi
- Cloud gratuit 1to - Télécharger - Stockage
- Driver cloud - Télécharger - Pilotes & Matériel
- Kaspersky security cloud free - Télécharger - Antivirus & Antimalwares
- Netflix cloud gaming - Accueil - Jeu vidéo
- Luna cloud gaming france - Accueil - Jeu vidéo
4 réponses
Ce qui serait pas mal c'est :
1- sortir le code de connexion à ta bdd et le mettre dans un fichier à part.
Comme ça... si tu ajoutes des "pages" à ton "site" il suffira juste d'inclure le script de connexion au lieu de le réécrire à chaque fois.
( pour "inclure" .. il suffit d'utiliser les instructions INCLUDE , REQUIRE ... )
2 - ajoute la gestion des erreurs PDO à ton code
Regarde ici comment faire :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
3 - Tu dois retourner un FETCH de ta requête ....
https://www.php.net/manual/fr/pdostatement.fetch.php
1- sortir le code de connexion à ta bdd et le mettre dans un fichier à part.
Comme ça... si tu ajoutes des "pages" à ton "site" il suffira juste d'inclure le script de connexion au lieu de le réécrire à chaque fois.
( pour "inclure" .. il suffit d'utiliser les instructions INCLUDE , REQUIRE ... )
2 - ajoute la gestion des erreurs PDO à ton code
Regarde ici comment faire :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
3 - Tu dois retourner un FETCH de ta requête ....
https://www.php.net/manual/fr/pdostatement.fetch.php
Bonjour,
Sans être très expérimenté en dev Android ... je dirais que :
côté php, les variables seront reçues en POST
Sans être très expérimenté en dev Android ... je dirais que :
RequestBody formBody = new FormBody.Builder()
.add("login", "lavaleurdetonchamplogin")
.add("password", "lavaleurdetonchamppassword")
.build();
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
return response.body().string();
côté php, les variables seront reçues en POST
<?php
//récupération des variables
$login = !empty($_POST['login']) ? $_POST['login'] : NULL;
$password= !empty($_POST['password']) ? $_POST['password'] : NULL;
//Traitement des variables
if($login && $password){
//ici tu code le traitement avec une interrogation de ta bdd
// puis tu remplis la variable $result;
$result = true;
}else{
$result = false;
}
//ici tu renvois le résultat
// par exemple en format JSON
echo json_encode($result);
Merci. Mais l'appli doit communiquer à distance avec le script PHP donc il manque l'insertion de l'URL de destination du script. Côté PHP j'avais fait ce premier jet qui bien sûr est à améliorer :
Je vais me baser sur ton code pour ré-écrire.
<?php
try // Connection à la base de données.
{
$bdd = new PDO('mysql:host=localhost;dbname=', '', '');
}
catch (Exception $erreur) // En cas d'erreur de connexion à la base de données.
{
die('Erreur de connection à la base de données. Merci de bien vouloir ré-essayer.' . $erreur->getMessage());
}
// Vérification de l'existence du pseudo et du mot de passe.
$requete = $bdd->prepare('SELECT COUNT(*) AS existence FROM utilisateurs WHERE pseudo = :pseudo AND password = :password');
$requete->bindValue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$requete->bindValue(':password', $_POST['password'], PDO::PARAM_STR);
$data = $requete->execute();
$requete->closeCursor();
$output = $requete;
echo(json_encode($output));
?>
Je vais me baser sur ton code pour ré-écrire.
Au passage ..
... évite d'utiliser directement les variables POST ( mais c'est pareil avec les GET / SESSION / COOKIE .....)
mais utilises plutôt la récupération "propre" que je t'ai proposé dans mon code
puis dans ton code :
$requete->bindValue(':pseudo', $_POST['pseudo'], PDO::PARAM_STR);
$requete->bindValue(':password', $_POST['password'],
... évite d'utiliser directement les variables POST ( mais c'est pareil avec les GET / SESSION / COOKIE .....)
mais utilises plutôt la récupération "propre" que je t'ai proposé dans mon code
//récupération des variables $pseudo= !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL; $password= !empty($_POST['password']) ? $_POST['password'] : NULL;
puis dans ton code :
$requete->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$requete->bindValue(':password', $password,
Bonsoir,
Alors voici donc le nouveau code :
Est-ce que cela te paraît correcte ? Donc si je résume, 1 = récupération des variables transmises par l'appli, 2 = connexion à la base de données, 3 = on vérifie l'existence des variables dans la base de données, 4 = on renvoie une réponse.
Question. Plutôt que de faire :
On ne pourrait pas raccourcir en écrivant :
Alors voici donc le nouveau code :
<?php
// Récupération des variables.
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$password = !empty($_POST['password']) ? $_POST['password'] : NULL;
try // Connexion à la base de données.
{
$bdd = new PDO('mysql:host=localhost;dbname=', '', '');
}
catch (Exception $erreur) // En cas d'erreur de connexion à la base de données.
{
die('Erreur de connexion à la base de données. Merci de bien vouloir ré-essayer.' . $erreur->getMessage());
}
// Vérification de l'existence du pseudo et du mot de passe.
$requete = $bdd->prepare('SELECT COUNT(*) AS existence FROM utilisateurs WHERE pseudo = :pseudo AND password = :password');
$requete->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$requete->bindValue(':password', $password);
$data = $requete->execute();
$requete->closeCursor();
$output = $requete;
echo(json_encode($output));
?>
Est-ce que cela te paraît correcte ? Donc si je résume, 1 = récupération des variables transmises par l'appli, 2 = connexion à la base de données, 3 = on vérifie l'existence des variables dans la base de données, 4 = on renvoie une réponse.
Question. Plutôt que de faire :
$output = $requete; echo(json_encode($output));
On ne pourrait pas raccourcir en écrivant :
echo(json_encode($requete));
D'ailleurs... on pourrait tout simplement écrire :
Non ?
$requete = $bdd->prepare('SELECT COUNT(*) AS existence FROM utilisateurs WHERE pseudo = :pseudo AND password = :password');
$requete->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$requete->bindValue(':password', $password);
$requete->execute();
$requete->closeCursor();
echo(json_encode($requete));
Non ?
Pour la séparation de la connexion je verrai cela après lorsque j'aurai terminé l'intégralité du code. Après avoir potassé voici ce à quoi je suis arrivé :
On est d'accord qu'avec ce code je vérifie bien l'existence du pseudo et du mot de passe dans la base de données et que je retourne une réponse en format Json ?
Peux-tu m'expliquer ce que signifie
Si le code est bon concrètement il me reste à instaurer des conditions si la paire pseudo / mot de passe existe ou non. Ce qu'il doit se passer si elle existe et ce qu'il doit se passer si elle n'existe pas. Cela se passe aussi côté serveur dans le script PHP ou je dois introduire les conditions plutôt côté client ?
<?php
// Récupération des variables.
$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
$password = !empty($_POST['password']) ? $_POST['password'] : NULL;
try
{
// Création d'une variable contenant le chemin d'accès au serveur puis à la base de données.
$connexion = 'mysql:host=localhost;dbname=';
// Création d'une variable contenant la commande d'utilisation de l'UTF-8.
$parametres = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
// Connexion à la base de données en utilisant les variables prédéfinies.
$bdd = new PDO($connexion, '', '', $parametres);
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $erreur)
{
// Affichage d'un message en cas d'erreur de connexion à la base de données.
$message = 'Erreur de connexion à la base de données. Merci de bien vouloir ré-essayer.' . $erreur->getMessage();
die($message);
}
// Vérification de l'existence du pseudo et du mot de passe grâce à une requête.
$requete = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = :pseudo AND password = :password');
$requete->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
$requete->bindValue(':password', $password);
$requete->execute();
$reponse = $requete->fetchAll();
// Fermeture de la requête.
$requete->closeCursor();
$requete = NULL;
// Retour de la réponse en format Json.
echo(json_encode($reponse));
?>
On est d'accord qu'avec ce code je vérifie bien l'existence du pseudo et du mot de passe dans la base de données et que je retourne une réponse en format Json ?
Peux-tu m'expliquer ce que signifie
PDO::PARAM_STRstp ? Ainsi que
!empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;?
Si le code est bon concrètement il me reste à instaurer des conditions si la paire pseudo / mot de passe existe ou non. Ce qu'il doit se passer si elle existe et ce qu'il doit se passer si elle n'existe pas. Cela se passe aussi côté serveur dans le script PHP ou je dois introduire les conditions plutôt côté client ?