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

jQuery Discussion :

L'impossible avec $_POST


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut L'impossible avec $_POST
    Bonjour,

    J'ai vraiment besoin d'aide à propos de ce code ajax, puis PHP :

    Code javascript : 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
    function changePassword(){
    	if($('#pass1').val() != $('#pass2').val()){
    		$("#resultat").empty();
    		$("#resultat").append("<p style='color: red;'>Erreur : Le mot de passe ou le pseudo est faux</p>");
    	}else{
    		$.ajax({
    			type: 'POST',
    			url: '/authentif/passwordChange.php',
    			data: {"id" : $('#id').val()
    				 "password" : $('#pass1').val()
    			},
    			dataType:'JSON',
    			complete: function(a,b){
    				window.location.reload();
    			}
    		});
    	}
    }

    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
    <?php
    try{
            $bdd = new PDO('mysql:host=172.16.1.39;dbname=nagiosplus;charset=utf8', 'nagiosplus', '#######"');
    }
    catch (Exception $e){
            die('Erreur : ' . $e->getMessage());
    }
    print_r($_POST);
    $id= json_decode($_POST['id'], true);
    $password= json_decode($_POST['password'], true);
    // $id= json_decode($_POST['user_id'], true);
    echo $id;
    $salt = openssl_random_pseudo_bytes(22);
    $salt = '$2a$%13$' . strtr(base64_encode($salt), array('_' => '.', '~' => '/'));
    $password_hash = crypt($password, $salt); // Cryptage du mot de passe à enregistrer
    $lenght_hash = crypt(strlen($password), $salt); // Cryptage du mot de passe à enregistrer
    echo $password."<br />";
    echo $password_hash."<br />";
    echo strlen($password)."<br />";
    echo $lenght_hash."<br />";
    // $req = $bdd->prepare('Update User set passHashed = ?, passLenght = ?, authChang = 0 where id = ?');
    // $req->bindParam(1, $password_hash);
    // $req->bindParam(2, $lenght_hash);
    // $req->bindParam(3, $id);
    // $req->execute();
    ?>
    Normalement, le code PHP doit crypter le mot de passe et l'enregistrer en base de donnée, puis interdire une prochaines modifications. LE problème, c'est que quand je lance l'appel ajax, j'ai aucune réponse d'après le débugger Chrome, mais j'ai pourtant des paramètre $_POST qui s'envoit :

    Nom : debug chromre.png
Affichages : 143
Taille : 213,7 Ko

    /!\ Sur le screen, considérer qu'il n'y a ps deproblème avec les $_POST, au niveau de la variable affichée user_id au lieu de id /!\

    Et le plus louche, c'est que le même script PHP fonctionne, il prend en compte les post comme il faut, mais pour une autre action.

    Quel est le problème ?

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id= json_decode($_POST['id'], true);
    $password= json_decode($_POST['password'], true);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Tu comprends pas pourquoi j'ai mis ça ?

    Dans la logique, j'avais pas mis de json decode, mais dans le script fonctionnant, même avec une seule variable, j'avais ceçi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id= json_decode($_POST['user_id'], true);
    donc, j'ai voulu essayé. ^^

    J'aurais dû faire autrement ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A quoi ressemble ton formulaire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Le formulaire se crée en ajax, voiçi ce qui est appelé lorsque la requête de verification de mot de passe a réussi :
    Code js : 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
    success: function(data) {
    	console.log(data);
    	if(data != false){ //si le mot de passe est bon
    		var arr = $.map(data, function(el) { return el; });
    		if(arr[0] == true){ //si le mot de passe est à changer
    			console.log(arr);
    			$('#login-form').remove();
    			$('.container').append(' <div id="mdpChange" class="form-signin" style="width:300px; margin : auto;"></div>');
    			$('#mdpChange').append('<h2 class="form-signin-heading">Password Change</h2>')
    			$('#mdpChange').append('<input type="hidden" id="id" value="'+arr[1]+'" />')
    			$('#mdpChange').append('<label for="pass1" class="sr-only">New password</label>')
    			$('#mdpChange').append('<input type="password" id="pass1" class="form-control" placeholder="New password" required="" autofocus="">')
    			$('#mdpChange').append('<label for="pass2" class="sr-only">Password Confirmation</label>')
    			$('#mdpChange').append('<input type="password" id="pass2" class="form-control" placeholder="Retype the password" required="">')
    			$('#mdpChange').append('<button  id="submit" onclick="changePassword()" class="btn btn-lg btn-primary btn-block" type="submit">Change it</button>')
    			$('#mdpChange').append('<div id="resultat"></div>')
    		}						
    	}else{ // si le mot de passe est à changer
    		$("#resultat").empty();
    		if (data == false){
    			$("#resultat").append("<p style='color: red;'>Erreur : Le mot de passe ou le pseudo est faux</p>");
    		}else{
    			window.location.reload();
    		}
    	}
    }
    });

    Ce qui peut donner :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <div id="mdpChange" class="form-signin" style="width:300px; margin : auto;">
        <h2 class="form-signin-heading">Password Change</h2>
        <input type="hidden" id="id" value="2">
        <label for="pass1" class="sr-only">New password</label>
        <input type="password" id="pass1" class="form-control" placeholder="New password" required="" autofocus="">
        <label for="pass2" class="sr-only">Password Confirmation</label>
        <input type="password" id="pass2" class="form-control" placeholder="Retype the password" required="">
        <button id="submit" onclick="changePassword()" class="btn btn-lg btn-primary btn-block" type="submit">Change it</button>
        <div id="resultat"></div>
    </div>

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Une chose est sure c'est que "user_id" n'est pas généré spontanément, il est quelque part dans ton code.

    Concernant le Json, il n'y a en nul part dans ton code donc je ne vois pas ce qu'il vient faire là.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    En fait le user_id est un défaut du screen, j'ai pris le screen trop tôt avant modifications, donc maintenant, c'est id ^^

    Je vais essayer en enlevant le json

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    En fait, même le simple var_dump de $_POST ne fonctionne pas. Pourtant, l'entête de chrome indique qu'il y en a, des variables post...

    Je vais bouillir.

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon, déjà tu peux virer ces json_decode, pasque le seul endroit où tu devrais avoir du json c'est en sortie de ton script PHP (c'est que le dataType:'JSON', de ton envoi signifie).
    Ensuite, où regardes-tu le résultat du var_dump ? var_dump écrit toujours quelque chose, ne serait-ce que NULL.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var arr = $.map(data, function(el) { return el; });
    Tu ne peux pas faire ça... Regarde ce que renvoie ton script PHP, ça n'a rien à voir avec un tableau ou un objet.
    Ensuite, pour voir ce que reçois ton script, c'est dans l'onglet "Response" qu'il faut regarder.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    J'ai enlevé les json_encode.

    Je regarde le résultat du var_dump dans la petite fenêtre du débugueur, ça avait toujours marché auparavant. sauf que là j'ai ce résultat :

    Nom : debug chromre.png
Affichages : 116
Taille : 146,3 Ko

  12. #12
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Celira
    c'est que le dataType:'JSON', de ton envoi signifie
    Pas vraiment en fait, parce que la syntaxe est fausse !
    C'est dataType:'json', la bonne syntaxe.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Je pense que tu mélange Bovino. Il y a un premier appel ajax qui lui fonctionne et qui renvoit 3 type de résultat :
    - soit false donc le mot de passe qui a été entrée est mauvais (ou le login)
    - soit un couple nom d'utilisateur / Boolean (pour dire s'il est admin) qui indiquerait que des variables de sessions ont été initialisé
    - soit un couple booléen à true (le mot de passe doit être changé) / Id du compte. Ce couple se déclenche uniquement si le mot de passe temporaire qui a été au préalable généré est correct.

    Le $.map servait à transformer les couples JSON en tableau javascript. C'est pas la méthode la plus adaptée, peut être mais maitrisant très mal JSON, c'est le mieux que j'ai trouvé
    Par la suite, si on est dans le cas 3, un nouveau formulaire est chargé via Javascript, permettant l'insertion du nouveau mot de passe (avec sa confirmation). Et c'est à cette validation là que ça bloque. J'envoie comme paramètre un id et le mot de passe, et ça galère à récupérer ces paramètres là.

    EDIT : Désolé pour les fautes, je m'en étais pas rendu compte ^^

  14. #14
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    C'est pas exactement ce que je vois dans le code fourni au 1er message :
    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
    <?php
    try{
            $bdd = new PDO('mysql:host=172.16.1.39;dbname=nagiosplus;charset=utf8', 'nagiosplus', '#######"');
    }
    catch (Exception $e){
            die('Erreur : ' . $e->getMessage());
    }
    print_r($_POST);
    $id= json_decode($_POST['id'], true);
    $password= json_decode($_POST['password'], true);
    // $id= json_decode($_POST['user_id'], true);
    echo $id;
    $salt = openssl_random_pseudo_bytes(22);
    $salt = '$2a$%13$' . strtr(base64_encode($salt), array('_' => '.', '~' => '/'));
    $password_hash = crypt($password, $salt); // Cryptage du mot de passe à enregistrer
    $lenght_hash = crypt(strlen($password), $salt); // Cryptage du mot de passe à enregistrer
    echo $password."<br />";
    echo $password_hash."<br />";
    echo strlen($password)."<br />";
    echo $lenght_hash."<br />";
    // $req = $bdd->prepare('Update User set passHashed = ?, passLenght = ?, authChang = 0 where id = ?');
    // $req->bindParam(1, $password_hash);
    // $req->bindParam(2, $lenght_hash);
    // $req->bindParam(3, $id);
    // $req->execute();
    ?>
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Novembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    Ok j'ai trouvé la réponse à mon problème. C'était tout con, et vous pouviez pas trouvé en vérité.

    Voiçi l'appel Ajax que je faisais :

    Code js : 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
    function changePassword(){
    			if($('#pass1').val() != $('#pass2').val()){
    				$("#resultat").empty();
    				$("#resultat").append("<p style='color: red;'>Erreur : Le mot de passe ou le pseudo est faux</p>");
    			}else{
    				$.ajax({
    				type: 'POST',
    				url: '/authentif/passwordChange.php',
    				data: {"id" : $('#id').val(),
    							"password" : $('#pass1').val()
    						},
    				dataType:'JSON',
    				complete:
    					function(a,b){
    						window.location.reload();
    					}
    				});
    			}
    		}

    Le problème, c'est le windows.location.reload() au complete. Visiblement (et je ne le savais pas), complete s'execute avant success (alors que je pensais qu'il s'exécutait toujours après). La page ne chargeait pas, et je ne voyais pas de résultats de var_dump.

    Désolé de la perte de temps. Au moins, si vous saviez pas, vous saurez pourquoi

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [EJB] Remote call impossible avec WEBSPHERE
    Par nighma dans le forum Websphere
    Réponses: 1
    Dernier message: 19/06/2006, 16h18
  2. isset() toujours vrai avec $_POST
    Par mrttlemonde dans le forum Langage
    Réponses: 6
    Dernier message: 16/03/2006, 10h33
  3. Réponses: 6
    Dernier message: 28/11/2005, 12h03
  4. [D2005]Compilation impossible avec version Personnal
    Par fab56 dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 16/08/2005, 19h10
  5. [Requête] Difficile (impossible ?) avec des dates
    Par starch dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/04/2004, 11h26

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