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 :

[AJAX] fonction php dans ajax


Sujet :

AJAX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut [AJAX] fonction php dans ajax
    Bonjour, j'ai un problème pour faire fonctionner une fonction php dans ajax.
    Je voudrais que lorsque je ferme ma page web, un script s'exécute coté serveur pour supprimer des fichiers temporaires.

    J'ai intégré dans mon body de ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script type="text/javascript" src="js/recherche.js" charset="iso_8859-1"></script>
    <body onbeforeunload="delTmpFile();">
    dans mon recherche.js j'ai :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    function creerRequete()
    {
    	var requete = null;
     
        try
        {
            /* On tente de créer un objet XmlHTTPRequest */
            requete = new XMLHttpRequest();
        }
        catch (microsoft)
        {
            /* Microsoft utilisant une autre technique, on essays de créer un objet ActiveX */
            try
            {
                requete = new ActiveXObject('Msxml2.XMLHTTP');
            }
            catch(autremicrosoft)
            {
                /* La première méthode a échoué, on en teste une seconde */
                try
                {
                    requete = new ActiveXObject('Microsoft.XMLHTTP');
                }
                catch(echec)
                {
                    /* À ce stade, aucune méthode ne fonctionne... mettez donc votre navigateur à jour ;) */
                    requete = null;
                }
            }
        }
        if(requete == null)
        {
            alert('Impossible de créer l\'objet requête,\nVotre navigateur ne semble pas supporter les object XMLHttpRequest.');
        }
     
    	return requete;
    }
     
    function delTmpFile()
    {
        /* On crée l'objet XHR */
        var requete = creerRequete();
        if (requete == null)
        {
            return;
        }
     
        /* Définition du fichier de traitement */
        var fonction = 'supression.inc';
     
        /* Envoi de la requête à la page de traitement */
        requete.open('GET', fonction, true);
     
        requete.send(null);
    }

    et dans ma page suppression.inc

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    function delTmpFiles($numSession)
    {
        $numSession = sprintf("%'03.u", $numSession);
            $dir = "tmp/$numSession";
            // ajout du slash a la fin du chemin s'il n'y est pas
            if ( !preg_match( "/^.*\/$/", $dir ) )
            {
                    $dir .= '/';
            }
     
            // Ouverture du repertoire demande
            $handle = @opendir( $dir );
            
            // si pas d'erreur d'ouverture du dossier on lance le scan
            if( $handle != false )
            {
                    // Parcours du repertoire
                    while( $item = readdir($handle) )
                    {
                            if (($item != ".") && ($item != ".."))
                            {
                                    if ( is_dir( $dir.$item ) )
                                    {
                                            delTmpFiles( $dir.$item );
                                    }
                                    else
                                    {
                                            unlink( $dir.$item );
                                    }
                            }
                    }
                    // Fermeture du repertoire
                    closedir($handle);
            
            // suppression du repertoire
            $res = rmdir( $dir );
            }
            else
            {
                    $res = false;
            }       
            return $res;
    }
     
     
    ?>
    Désolé, je suis débutant en ajax (je sais que ma question doit être stupide...)
    Vous avez une idée de mon erreur ?

    Merci pour vos réponses.
    Cordialement.

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    C'est quoi l'erreur ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    au départ il me disait object attendu,
    donc j'ai modifié dans mon body, ma fonction, j'ai mis : delTmpFile($numSession);

    Maintenant il me dit : $numSession indéfini.
    Il faudrait que je lui passe la valeur de $numSession du php au js (mais je ne sais pas comment faire.)

  4. #4
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Ce numéro de session, il correspond a quoi?

    Tu ne peux pas tout simplement aller le chercher dans ton php via le tableau $_SESSION ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    ce numéro correspond à un dossier temporaire que je créé.
    j'ai besoin de le récupérer ce numéro pour définir un chemin.

    En fait, quand l'utilisateur va fermer la page, je veux supprimer le dossier et tout son contenu généré lors du passage de l'utilisateur.

    Ma fonction php delTmpFiles supprime le dossier et son contenu. Seulement le nom du dossier varie, d'ou cette variable à récupérer.
    S'il existe une autre solution, je suis preneur

  6. #6
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Essaie de procéder comme suit:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <body onbeforeunload="delTmpFile(<?php echo $tonNumeroDeSession ?>);">

    Et ensuite, dans ta requete ajax, tu transmets ce numéro
    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
    function delTmpFile(sessionId)
    {
        /* On crée l'objet XHR */
        var requete = creerRequete();
        if (requete == null)
        {
            return;
        }
     
        /* Définition du fichier de traitement */
        var fonction = 'supression.inc?sessionId=' + sessionId;
     
        /* Envoi de la requête à la page de traitement */
        requete.open('GET', fonction, true);
     
        requete.send(null);
    }

    Et coté php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    delTmpFiles($_GET["sessionId"])

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    ça ne marche pas.
    Si je laisse dans body, il ne fait rien.

    j'ai du créer sur la page html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script language="JavaScript">
    window.onbeforeunload = "delTmpFile(<?php echo $numSession ?>);"
    </script>
    mais j'ai deux problèmes, la page n'a pas fini de charger qu'il rentre déjà de rentrer dans delTmpFile et $numSession est null.

  8. #8
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Si je laisse dans body, il ne fait rien.
    Est-ce que la requete ajax est envoyée ou pas? Est-ce que tu rentres au moins dans la fonction javascript?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script language="JavaScript">
    window.onbeforeunload = "delTmpFile(<?php echo $numSession ?>);"
    </script>
    La syntaxe correcte serait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    window.onbeforeunload = function()
    {
       delTmpFile(<?php echo $numSession ?>);
    }

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Est-ce que la requete ajax est envoyée ou pas? Est-ce que tu rentres au moins dans la fonction javascript?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script language="JavaScript">
    window.onbeforeunload = "delTmpFile(<?php echo $numSession ?>);"
    </script>
    La syntaxe correcte serait plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    window.onbeforeunload = function()
    {
       delTmpFile(<?php echo $numSession ?>);
    }

    Je ne l'y vois pas entrer dedans au debugguer non.

  10. #10
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Essaie de mettre un alert dedans, ou de retourner false parce que sinon, ta page se ferme peut être avant que tu n'aies le temps de voir la requete passer dans ton debugger.

    Quand tu regardes le code source de ta page, tu as bien ton numéro de session correctement ajouté en paramètre de la fonction?

  11. #11
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Tu n'appelles pas ta fonction "Del.." dans ta page de traitement php (suppression.inc) donc elle ne risque pas d'être executée.

    En fait, tu n'en as pas besoin en tant que fonction. La page de traitement php est en quelque sorte une fonction avec en entrée les données transmises par ajax (à récupérer par un $_GET comme précisé dans un post precedent).

Discussions similaires

  1. appel de fonction php dans une commande ajax
    Par thor76160 dans le forum jQuery
    Réponses: 8
    Dernier message: 26/03/2021, 14h36
  2. Réponses: 10
    Dernier message: 14/03/2009, 13h36
  3. [AJAX] requete php dans JavaScript
    Par juliens9 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/11/2007, 13h28
  4. [AJAX] [php] appel de fonction php dans evenement
    Par nicerico dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 20/11/2006, 12h01

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