Je m'arrache les cheveux dessus car il me retourne une erreur org.json.JSONException: Value <br><table of type java.lang.String cannot be converted to JSONObject dans Android studio.
Merci d'avance.
<?php
$db = new PDD("mysql:host=xxxx.com;dbname=xxxx_data","xxxx_user","mdpxxxx");
$results["error"] = false;
$results["message"] = [];
if(isset($_POST)){
if(!empty($_POST['pseudo']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['password2'])){
$pseudo = $_POST['pseudo'];
$email = $_POST['email'];
$password = $_POST['password'];
$pssword2 = $_POST['password2'];
//Vérification du pseudo
if(strlen($pseudo) < 2 || !preg_match("/^[a-zA-Z0-9 _-]+$/", $pseudo) || strlen($pseudo) > 60){
$results['error'] = true;
$results['message']["pseudo"] = "Pseudo invalide";
}else{
$requete = $db->prepare("SELECT id FROM users WHERE pseudo = :pseudo");
$requete->execute([':pseudo' => $pseudo]);
$row = $requete->fetch();
if($row){
$results['error'] = true;
$results['message']["pseudo"] = "Le pseudo est déjà pris";
}
}
//Vérification de l'email
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$results['error'] = true;
$results['message']["email"] = "Email invalide";
}else{
$requete = $db->prepare("SELECT id FROM users WHERE email = :email");
$requete->execute([':email' => $email]);
$row = $requete->fetch();
if($row){
$results['error'] = true;
$results['message']["email"] = "L'email existe déjà";
}
}
// Vérification du password
if($password !== $password2){
$results ['error'] = true;
$results ['message']["password"] = "Les mots de passe doivent être identiques";
}
if($results["error"] === false){
$password = password_hash($password, PASSWORD_BCRYPT);
//Insertion
sql = $db->prepare("INSERT INTO users(pseudo, email, password) VALUES (:pseudo, :email, :password)");
$sql->execute([":pseudo" => $pseudo, ":email" => $email, ":password" => $password]);
if(!$sql){
$results['error'] = true;
$results['message'] = "Erreur lors de l'inscription";
}
}else{
$results['error'] = true;
$results['message'] = "Veuillez remplir tout les champs";
}
echo json_encode($results);
}
}
?>
Essaye d'appeler ta page dans un navigateur avec les mêmes arguments passés par ton appli. A mon avis, PHP ajoute un message d'erreur au début de ta page avant ton JSON.
rolandl : Depuis php 5.4 on peut utiliser les 2 notations. array() ou []. Mais en effet, c'est un problème de version de php.
De même pour password_hash et password_verify, il te faudra la version de php 5.5 minimum. Sachant qu'on en est actuellement à la version 7 ( dont les performances ont grandement été améliorée ), je ne peux que te conseillé de mettre à jour ta version de php
Au passage, la connexion à la base de donnée, c'est new PDO et non PDD.
Je te conseille de rajouter cette ligne juste en dessous de ta connexion pour voir tes erreurs qd tu testes côté php.
Honnêtement j'ai suivi un tuto sur YT donc je ne veux pas dire de bêtise mais j'ai bien l'impression d'utiliser du POST dans la JAVA CLASS qui s'appelle MyRequest.
Héhéhé Effectivement ça marche déjà mieux ! Tout ça pour un petit "2". Faut que j'arrête de bosser la dessus après les heures de boulots, ça aide pas...
En revanche j'ai de nouveau un problème de JSON.
org.json.JSONException: Value Veuillez remplir tout les champs at message of type java.lang.String cannot be converted to JSONObject
Ca vient donc bien du dernier else mal placer mais aucune idée de l'endroit ou je dois le mettre.
EDIT : Effectivement, le else... C'est mieux comme ça
}
else
{
$results['error'] = true;
$results['message'] = "Veuillez remplir tout les champs";
}
}
echo json_encode($results);
?>
EDIT 2 : Il me reste juste un problème à régler avant de pouvoir poster le code complet fonctionnel et de mettre en résolu le sujet.
Lorsque je tape 2 mot de passe différents, je suis censé recevoir le message "Les mots de passe doivent être identiques" d'après ce morceau de code
// Vérification du password
if($password !== $password2)
{
$results ['error'] = true;
$results ['message']['password'] = "Les mots de passe doivent être identiques";
}
Effectivement quand j'essaie de valider mon inscription avec deux MDP différent ça ne marche pas mais je ne reçois pas le message d'erreur.
Salut, en haut de ton fichier php, quand tu récupères les variables, tu as aussi une erreur de syntaxe au niveau du password2 :
$pssword2 = $_POST['password2']; // Rajoute le a manquant et ton égalité devrait mieux fonctionner ;).
Après quand tu codes quelques choses comme ça, utilises Postman pour pouvoir tester facilement, ou alors, avec des parametres en durs pour la phase de test pour être sûr d'avoir la réponse que tu souhaites et du coup passer côté android en sachant que côté serveur ça fonctionne ;).
isset vérifie que la variable $_POST existe ( ce qui sera le cas forcement mais elle sera vide ) alors que !empty($_POST) vérifie carrément que des données ont bien été envoyée ( et que donc $_POST n'est pas un tableau vide ), donc utilise plutot la seconde solution :D.
Par contre ça n'avait pas d'incidence sur les erreurs que tu avais.
Après faut garder à l'esprit que c'est une manière très ( trop ) basique de faire histoire de voir comment l'ensemble fonctionne. Dans une app réelle, il y aura une sécurité supplémentaire avec l'utilisation de token ( JsonWebToken(JWT) par ex ).
Ce token permet ensuite de naviguer dans l'application sans avoir à se reconnecter sans arrêt et permet des requêtes plus sécurisé a ton api par la suite ( on passe le token a chaque requête pour s'assurer que c'est le bon utilisateurs qui la fait ).
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
Mon site - Mon livre sur le XML - Mon blog
par
Mon site - Mon livre sur le XML - Mon blog