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
- Espace cloud google - Guide
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 ?