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

AJAX Discussion :

Collecter les données d'une base de données


Sujet :

AJAX

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 244
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 244
    Par défaut Collecter les données d'une base de données
    Bonjour,

    J'ai un formulaire HTML
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div id="search-box" class="search-box map search-box-wrapper">
    		    	<form id="form-login" methof="POST" class="form-map form-search">
    		        	<h2>Login</h2>
    		           	<div class="form-group">
    		            	<input type="text" name="email" class="field" value="" placeholder="email" />
    		         	</div><!-- /.form-group -->
    		         	<div class="form-group">
    		            	<input type="password" name="pwd" class="field" value="" placeholder="password" />
    		         	</div><!-- /.form-group -->
    		       		<div class="form-group">
    		        		<button type="submit" class="btn btn-default">login</button>
    		       		</div><!-- /.form-group -->
    		    	</form><!-- /#form-map -->
    		 	</div><!-- /.search-box.map -->

    Je souhaiterais récupérer les valeurs de 'email' et 'pwd'

    Dans mon fochier script.js, j'ai fait ceci
    Code JQUERY : 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
    // Login user
        $( "#form-login" ).on("submit", function(e){
            e.preventDefault();
     
            var $forme = $(this);
            console.log($forme.serialize());
     
            var $form = $( this ),
            email = $form.find( "input[name='email']" ).val(),
            pwd = $form.find( "input[name='pwd']" ).val();
     
            console.log(email, pwd)
     
            getUser($forme);
            getUser(email, pwd);
        });

    mon console.log() affiche bien les valaurs que j'ai saisi dans mon formulaire

    Puis j'ai choisi de récupéerer les valeur de $forme, pour les serialiser dans ma fonction getUser().
    Vu que cela ne fonctionne pas, j'ai ajouté data:{email:"demo@email.ch", pwd:"password"},

    my fonction getUser est comme ceci
    Code JQUERY : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    function getUser(form){
        console.log(form);
     
        return $.ajax({
            url: 'https://api.domaine.ch/dashboard/getUser.inc.php', 
            type: 'POST',
            //data: param, 
            //data: form.serialize(),
            data:{email:"demo@email.ch", pwd:"password"},
            cache: false,
            dataType: 'json',
            // xhr For testing
            xhr: function () {
                var xhr = $.ajaxSettings.xhr();
                xhr.onprogress = function e() {
                    // For downloads
                    if (e.lengthComputable) {
                        console.log("Onprogress ", e.loaded / e.total);
                    }
                };
                xhr.upload.onprogress = function (e) {
                    // For uploads
                    if (e.lengthComputable) {
                        console.log("Upload onprogress ", e.loaded / e.total);
                    }
                };
                return xhr;
            },
     
            error: function (request, error) {
                   console.log("Error while getting user authentification");
                   console.log("ERROR:" , request.responseText);     
            },
            success: function (data) {   
                //console.log("data:",data);
     
                if(data.length <= 0)
                {
                }
                else
                {  
                    console.log("data success: ",data);
                }
     
            }
        });
    }

    Ce que je en comprends pas, c'est que si je saisi l'api (j'ai modifié le nom de domaine

    https://api.domaine.ch/dashboard/get...h&pwd=password

    Cela fonctionne très bien. Je ne comprends donc pas pourquoi, quand je saisi ces valeurs en dur, cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data:{email:"demo@email.ch", pwd:"password"},
    Cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    error: function (request, error) {
                   console.log("Error while getting user authentification");
                   console.log("ERROR:" , request.responseText);     
            },
    me retourne le message d'erreur
    Upload onprogress 1 script.js:61:29
    Error while getting user authentification script.js:68:24
    ERROR: <br />
    <b>Warning</b>: Trying to access array offset on value of type null in <b>/home/clients/ee3f943e731fc0a12d3400116692186f/sites/api.domaine.ch/dashboard/getUser.inc.php</b> on line <b>28</b><br />
    <br />
    <b>Warning</b>: Trying to access array offset on value of type null in <b>/home/clients/ee3f943e731fc0a12d3400116692186f/sites/api.domaine.ch/dashboard/getUser.inc.php</b> on line <b>29</b><br />
    {"id_user":0,"user_role":0,"user_email":null,"user_fields":[],"message":"Your e-mail or your password is not valid","code":-1,"method":"POST"}
    On voit, dans la dernière ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"id_user":0,"user_role":0,"user_email":null,"user_fields":[],"message":"Your e-mail or your password is not valid","code":-1,"method":"POST"}
    que mon script PHP, me retourne bien quelque chose, mais il semble qu'il ne reçoit pas les paramètres.

    Pourtant, depuis mon application IOS/Android, mon API fonctionne très bien, et je peux m'authentifier.

    Mistère

    Dans le message d'erreur, le message fait référence à la ligne 28 et 29.
    A ces ligne, j'ai ceci, et je me demande si ce n'est pas là que ca bug
    Code PHP : 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
     switch ($method) {
        	case 'POST':
        		# Get POST the data
    		    $encodedData = file_get_contents('php://input');  // take data from react native fetch API
    			$decodedData = json_decode($encodedData, true);
     
    			$email = $decodedData['email'];
    			$pwd = $decodedData['pwd']; 
     
    			$continue = true;
     
        		break;
        	default:
        		$continue = false;
        		break;
        }
    En fait, je suis presque sûre que c'est ici que ca bug. Mais pourant dans mon script.js, je fais bien une requête https?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url: 'https://api.domaine.ch/dashboard/getUser.inc.php',
    Ou pensez-vous que ça bug???

    Merci beaucoup pour vos lumières

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 499
    Par défaut
    Bonjour,

    The data option can contain either a query string of the form key1=value1&key2=value2, or an object of the form {key1: 'value1', key2: 'value2'}. If the latter form is used, the data is converted into a query string using jQuery.param() before it is sent.
    https://api.jquery.com/jQuery.ajax/#...data-to-server

    Les data envoyées via la requête ajax ne sont pas au format json (tu peux le vérifier dans l'onglet Réseau des outils de dev de ton navigateur), il ne faut donc pas utiliser json_decode() coté PHP.
    Tu devrais pouvoir récupérer les data en PHP via la superglobale $_POST.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 244
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 244
    Par défaut
    Hello, merci pour ta réponse.

    Le problème est que mon App que j'ai développé pour mon smartphone, utilise cet API pour authentifier un utilisateur et ca fonctionne.
    Je ne peux donc pas modifier ceci:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $encodedData = file_get_contents('php://input');  // take data from react native fetch API
    $decodedData = json_decode($encodedData, true);
    $email = $decodedData['email'];
    $pwd = $decodedData['pwd'];
    si non ça ne fonctionnera pas avec mon code ReactNative.

    Aussi, il me semble que mes données envoyé sont en JSON, si je regarde ce que j'ai saisi en dure

    data:{email:'demo@email.ch', pwd:'password'},
    Code JQUERY : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function getUser(form){
     
        return $.ajax({
            url: 'https://api.iot-charts.ch/dashboard/getUser.inc.php', 
            type: 'POST',
            //data: param, 
            //data: form.serialize(),
            data:{email:'demo@email.ch', pwd:'password'},
            cache: false,
            dataType: 'json',
            // xhr For testing
            xhr: function () {
                var xhr = $.ajaxSettings.xhr();
                xhr.onprogress = function e() {
                    // For downloads
                    if (e.lengthComputable) {
                        console.log("Onprogress ", e.loaded / e.total);
                    }
                };
                xhr.upload.onprogress = function (e) {
                    // For uploads
                    if (e.lengthComputable) {
                        console.log("Upload onprogress ", e.loaded / e.total);
                    }
                };
                return xhr;
            },
     
            error: function (request, error) {
                   console.log("Error while getting user authentification");
                   console.log("ERROR:" , request.responseText);     
            },
            success: function (data) {   
                //console.log("data:",data);
     
                if(data.length <= 0)
                {
                }
                else
                {  
                    console.log("data success: ",data);
                }
     
            }
        });
    }

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 244
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 244
    Par défaut
    It look like this works as well with my smartphone app

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    /*$encodedData = file_get_contents('php://input');  // take data from react native fetch API
    			$decodedData = json_decode($encodedData, true);
     
    			$email = $decodedData['email'];
    			$pwd = $decodedData['pwd']; 
    */
    			$email = $_POST['email'];
    			$pwd = $_POST['pwd'];

Discussions similaires

  1. Comment faire déconnecter les utilisateurs d'une base
    Par ENIT-Info dans le forum Access
    Réponses: 23
    Dernier message: 28/02/2017, 14h57
  2. Réponses: 3
    Dernier message: 15/10/2012, 15h19
  3. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  4. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 10h40
  5. Sélection de toute les tables d'une base
    Par lord_paco dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 21/07/2003, 14h56

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