OkHttp
Fermé
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
-
5 avril 2017 à 15:54
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 7 avril 2017 à 13:11
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 7 avril 2017 à 13:11
4 réponses
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
7 avril 2017 à 01:02
7 avril 2017 à 01:02
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
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
5 avril 2017 à 16:26
5 avril 2017 à 16:26
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);
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
5 avril 2017 à 16:39
5 avril 2017 à 16:39
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.
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
5 avril 2017 à 16:53
5 avril 2017 à 16:53
donc il manque l'insertion de l'URL de destination du script
Pourtant :
.url(url)
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
5 avril 2017 à 17:15
5 avril 2017 à 17:15
Ah désolé. ^^
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
4 650
>
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
Modifié le 5 avril 2017 à 19:27
Modifié le 5 avril 2017 à 19:27
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,
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
jordane45
Messages postés
38144
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
21 avril 2024
6 avril 2017 à 23:25
6 avril 2017 à 23:25
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));
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
6 avril 2017 à 23:28
6 avril 2017 à 23:28
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 ?
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
7 avril 2017 à 13:11
7 avril 2017 à 13:11
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 ?