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

JavaScript Discussion :

Comment lancer des traitements php avec du Javascript?


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut Comment lancer des traitements php avec du Javascript?
    Bonjour,
    Je ne savais pas trop ou poser mon probleme donc, je le fais ici. Dites moi s'il n'est pas a sa place.

    Donc, voila, j'ai des fonctions/procédures en php dans des fichiers sur le serveur.
    Et j'aurai aimé savoir s'il était possible de les lancer directement depuis une fonction javascript sur une de mes pages web.

    Dans certains cas, je souhaiterai juste que le javascript lance un traitement (effectuer en php - insertion en BD -) et dans un autre cas, j'aurai besoin de récupérer la valeur retourner par la fonction (boolean).

    Est-il possible de faire ce genre de chose avec du javascript?

    Merci pour vos réponses.

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Tu peux utiliser l'objet XMLHttpRequest pour obtenir une page php,mais c'est tout ce que tu peux faire...
    Javascript tourne sur le navigateur (côté client) tandis que php est interprété par le serveur pour ressortir une page HTML...
    Donc tu ne peux pas appeler de fonction php depuis javascript.
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Membre expérimenté
    Avatar de jbrasselet
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2006
    Messages
    1 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 022
    Points : 1 413
    Points
    1 413
    Par défaut
    Il y a plein de tutos ajax ^^
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Merci pour vos conseils.
    J'ai essayé d'utiliser Ajax du coup, mais j'ai une erreur.
    En fait, ca ne crée pas d'erreur mais, disons que ca ne fonctionne pas.
    Voici le code de mes fonctions Ajax :
    function ajax_LookUpAcceptedCustomer(ClientEmail)
    {
    var xhr=null;
    var myUrl = "http://localhost/LookUpAcceptedCustomer.php?ClientEmail=";
    myUrl = myUrl + ClientEmail;

    if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xhr.onreadystatechange = function() { LookUpAcceptedCustomer_Result(xhr); };

    xhr.open("GET", myUrl, true);
    xhr.send(null);
    }

    function LookUpAcceptedCustomer_Result(xhr)
    {
    var docXML= xhr.responseXML;
    var items = docXML.getElementsByTagName("RS")
    if ( items.item(0).firstChild.data == 0 )
    {
    return false;
    }
    else
    {
    return true;
    }
    }
    Alors j'ai vérifé avec un "alert" et myUrl possede bien la bonne url avec le bon parametre.
    Suite à ca, voici ma page php :

    <?php
    header('Content-Type: text/xml');
    echo "<?xml version=\"1.0\"?>\n";
    echo "<RESULT>\n";

    $db_conn = new COM("ADODB.Connection");
    $connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("./STC_email.mdb").";";
    $db_conn->open($connstr);

    $rS = $db_conn->execute('SELECT count(*) FROM STC_email WHERE STC = \'accept\' AND Flag = 1 AND email = \'' . $_GET['ClientEmail'] . '\'');

    $f1 = $rS->Fields(0);
    while (!$rS->EOF)
    {
    $EmailExist = $f1->value.
    $rS->MoveNext();
    }
    $rS->Close();

    if ($EmailExist == 0) {
    echo "<RS> 0 </RS>\n";
    }
    else {
    echo "<RS> 1 </RS>\n";
    }

    $db_conn->Close();

    echo "</RESULT>\n";
    ?>

    Seulement cela me donne une erreur.
    ClientEmail semble etre indéfini.
    Si je tape directment l'url en question dans mon navigateur je n'ai pas d'erreur. Mais à travers la fonction ajax, une erreur (ClientEmail non défini) apparait.
    Je ne parviens pas a comprendre.

    Merci pour votre aide.

  5. #5
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben... si l'erreur vient de ClientEmail indéfini, la moindre des choses serait peut-être de nous montrer ce que tu envoies comme variable ClientEmail plutôt que d'incriminer la fonction Ajax qui pour le moment en tout cas n'y est pour rien...
    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

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    J'envoie juste ce que l'utilisateur entre dans le formulaire.
    Donc c'est juste une adresse email.

  7. #7
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rS = $db_conn->execute('SELECT count(*) FROM STC_email WHERE STC = \'accept\' AND Flag = 1 AND email = \'' . $_GET['ClientEmail'] . '\'');
    Oui, tu oublies d'échapper les quotes dans ClientMail...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rS = $db_conn->execute('SELECT count(*) FROM STC_email WHERE STC = \'accept\' AND Flag = 1 AND email = \'' . $_GET[\'ClientEmail\'] . '\'');
    EDIT
    Bon... oublie... dans ton code (comme tu l'as mis en citation et pas en code), les \quote quote ressemblait un peu trop à \doubles quotes...
    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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 59
    Points : 55
    Points
    55
    Par défaut
    je te conseil d'utiliser Firebug (plugin de firefox) pour débugger ton script AJAX, ça te permet de monitorer la réponse de ta requête et les valeurs de tes variables et donc de savoir ce qui ne va pas.

  9. #9
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Kyaan Voir le message
    je te conseil d'utiliser Firebug (plugin de firefox) pour débugger ton script AJAX, ça te permet de monitorer la réponse de ta requête et les valeurs de tes variables et donc de savoir ce qui ne va pas.
    Merci !!!
    On ne le répètera jamais assez...
    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

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Ok, je vais essayer ca parceque la, ca commence a me rendre fou lol.
    Merci pour vos conseils.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Ahh je viens de revérifier avec firebug. Et en faiit mon Ajax fonctionne tres bien...C'était la suite de mon code qui ne fonctionnait pas en fait. lol.
    J'oubliai de aire le return (true ou false selon le cas) avec la fonction d'appel.
    Du coup c'était la suite qui ne tournait pas rond ...
    Désolé et merci pour votre aide.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Finalement...j'ai bien un probleme.
    Mais c'est bizarre car si je le fait en pas a pas avec firebug, la routine fonctionne tres bien.
    Mais lancé par elle meme sans le pas a pas, elle ne fonctionne plus.
    Je ne comprends décidement rien.
    Vous n'auriez pas une petite idée?
    Merci pour votre aide.

  13. #13
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Evenmor Voir le message
    Finalement...j'ai bien un probleme.
    Mais c'est bizarre car si je le fait en pas a pas avec firebug, la routine fonctionne tres bien.
    Mais lancé par elle meme sans le pas a pas, elle ne fonctionne plus.
    Je ne comprends décidement rien.
    Vous n'auriez pas une petite idée?
    Merci pour votre aide.
    Relis ton message et répond à cette question : comment on pourrait avoir une idée ???

    Deuxième question : que s'est-il passé entre 17h09 et 22h44 (heures de tes posts) pour que ce qui fonctionnait ne fonctionne plus... Nous à priori, on en sait rien
    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

  14. #14
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Merci Bovino pour tes remarques.
    Tu peux passer a la suite.
    je ne suis pas en France, les gens dorment ici.

    Bref,
    J'ai comme l'impression que c'est une question de timing.
    En mode pas a pas, cela fonctionne. Peu etre que en mode normal, ca va trop vite, du coup les traitement n'ont pas assez de temps pour etre fait.
    C'est poissible?

  15. #15
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Quels sont les messages d'erreur?
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  16. #16
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Le message d'erreur disait que le fichier XML (issu du flux) était null.
    J'ai donc effectuer un peu de recherche et j'ai vu qu'il fallait attendre le 'readystate' à 4 pour que tout soit charger.
    J'ai donc ajouter cette ligne au code de la fonction lancé par Ajax
    if(xhr.readyState == 4 && xhr.status == 200){
    Du coup, il n'y a plus de message d'erreur.
    Mais ca ne fonctionne toujours pas.

    ---------------------

    Suite à ca, j'ai mis des alerts un peu partout dans mon code, et ...avec les alerts...ca fonctionne mais pas sans...
    Est ce que ca peut etre un probleme de timeout?
    J'y comprend de moins en moins.

    Merci pour l'aide

  17. #17
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(xhr.readyState == 4 && xhr.status == 200)
    Désolé d'être un peu vexant, mais c'est mon style :
    c'était tellement énorme que j'avais même pas fais attention à ça !!!
    Sinon, le readyState 4 correspond à l'envoi des données par le serveur.
    Dans ton cas, il est possible que ton traitement cherche des données qui n'ont pas encore été transmises.
    Essaye de passer en mode synchrone
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhr.open("GET", myUrl, false);
    OU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(xhr.readyState == 5 && xhr.status == 200)
    le 'readystate' à 4 pour que tout soit charger.
    Ben non justement, le readyState 5 attend que tout soit chargé...
    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

  18. #18
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    mmmh, merci. Je ne connaissais pas readystate 5, je ne l'ai jamais vu dans les tutos, c'etait toujours de 0 à 4.

    Sinon voila mon code :
    function ajax_LookUpAcceptedCustomer(Email)
    {
    var resul = false;
    var xhr=null;
    // var myUrl = "http://localhost/LookUpAcceptedCustomer.php?ClientEmail=";
    var myUrl = "http://localhost/LookUpAcceptedCustomer.php?";
    // myUrl = myUrl + Email;

    if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xhr.onreadystatechange = function() {
    if (LookUpAcceptedCustomer_Result(xhr))
    { resul = true;; }
    else
    { resul = false;} };

    xhr.open("POST", myUrl, true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send("ClientEmail="+Email);
    // xhr.send(null);

    alert(resul)
    return resul;

    }

    function LookUpAcceptedCustomer_Result(xhr)
    {
    if(xhr.readyState == 4 && xhr.status == 200){
    var docXML = xhr.responseXML;
    var items = docXML.getElementsByTagName("RS")
    if ( items.item(0).firstChild.data == 0 )
    {
    return false;
    }
    else
    {
    return true;
    }
    }
    }
    Et la...ce qui est VRAIMENT bizarre...c'est que avec le "alert(resul)" ca marche, mais pas sans....
    POURQUOI?? je deviens fou lol.

    PS: j'ai essayer en post et en get, ca me donne le meme résultat, fonctionne avec le alert mais pas sans.

  19. #19
    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 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    readyState 4 -> Les données commencent à être transmises
    readyState 5 -> Les données ont été transmises.

    En général , on ne s'en sert jamais parce que l'intérêt d'Ajax, c'est précisément le côté asynchrone et que si on attend la fin de la transmission des données... ben du coup on passe en synchrone. Mais des fois, ça peut être utile...
    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

  20. #20
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Merci, mais avec le readystate à 5 dans la condition ca ne marche pas du tout.
    Avec ou sans le alert.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Excel] Comment lire des fichiers excel avec php?
    Par dear_rihab dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 02/11/2007, 12h38
  2. [Mail] Comment envoyer des e-mails avec PHP
    Par lauryk dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2007, 17h16
  3. [PHP-JS] Comment faire intéragir du php avec du javascript
    Par Alexlesilex dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/04/2007, 20h42
  4. Réponses: 1
    Dernier message: 11/10/2006, 11h21
  5. Réponses: 4
    Dernier message: 14/12/2005, 12h16

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