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 :

Récupération des données $_POST [AJAX]


Sujet :

jQuery

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Récupération des données $_POST
    Bonjour à tous !
    J'ai voulu rendre mon plugin Wordpress de messagerie interne plus fluide en intégrant AJAX. Sur Wordpress, Ajax fonctionne avec jQuery, mon problème est lorsque l'on envoie un e-mail (depuis mon plugin), on fait appel à une fonction javascript qui va faire un appel à un appel ajax qui va envoyer le message... Mais le problème est que la fonction d'envoie du mail vérifie si les données ont bien été transmises... Et en l'occurence, et bien isset($_POST['desti']) ou isset($_REQUEST['desti']) ne marche pas ! Voici mon code :

    Script :

    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
     jQuery('#send_mail').submit(function (e) {
         e.preventDefault(); // Le navigateur ne peut pas envoyer le formulaire
     
        var donnees = jQuery(this).serialize(); // On créer une variable content le formulaire sérialisé
     
        alert(donnees.substring(8));
        console.log('hello');
        jQuery.ajax({
            url : ajaxurl,
            type : 'POST',
            cache: false,
            data : '?action=send_mail&' + donnees,
     
              success : function(code_html, statut){
              alert(code_html);
               jQuery(code_html).appendTo("#composition"); // On passe code_html à jQuery() qui va nous créer l'arbre DOM !
           },
     
     
     
        });
    });
    PHP du plugin :

    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
    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    add_action('wp_enqueue_scripts', 'ajax_test_enqueue_scripts');
    add_action('wp_ajax_send_mail', 'send_mail' );
    function send_mail()
    {
    echo '<script>alert(\'hello\');</script>';
     
    if (isset($_REQUEST['desti']))
        {
        ?>
        <?php
        echo '<script>alert(\'script correct\');</script>';
        global $wpdb;
     
                if (empty($_POST['obj']))
                {
                        $obj = 'No Subject';
                }
                else
                {
                        $obj = $_POST['obj'];
                }
                $test = $wpdb->get_var($wpdb->prepare('SELECT can_mail FROM wp_users WHERE id = %d', get_current_user_id()));
             if (isset($_POST['envoie']))
                {
                        $folder = 'inbox';
                        if ( $test == 0 && $_POST['desti'] != 1)
                        {
                     $folder = 'draft';
                        echo '<script>alert(\'Vous n\\\'êtes pas autorisé à envoyer des messages, votre mail va être sauvegardé dans les brouillons.\n Merci de contacter votre administrateur par e-mail : admin.\');</script>';
                        }
                }
                else
                {
                        $folder = 'draft';
     
                }
     
     
     
                if (isset($_POST['id_mess']) && isset($_POST['brouillon']))
                {
     
                        $wpdb->update('wp_messagerie', array('receiver' => $_POST['desti'], 'objet' => $obj, 'message' => $_POST['mess']), array('id' => $_POST['id_mess']), array('%d', '%s', '%s'), array('%d', '%s', '%s'));
                        $wpdb->query('UPDATE wp_messagerie SET date_envoi = NOW() WHERE id = ' . $_POST['id_mess']);
                }
                else
                {
                        $response = $wpdb->query($wpdb->prepare('INSERT INTO wp_messagerie(sender, receiver, unread, objet, message, date_envoi, dossier) VALUES (%d, %d, 1, %s, %s, NOW(), %s);', get_current_user_id(), $_POST['desti'], $obj, $_POST['mess'], $folder));
     
                        if (isset($_POST['id_mess']) && isset($_POST['envoie']))
                        {
                                $wpdb->query($wpdb->prepare('DELETE FROM wp_messagerie WHERE id = %d', $_POST['id_mess']));
                        }
                }
     
            echo '?page=messagerie&action=inbox';
                die();
        }
        wp_die();
        }
     
     
    function ajax_test_enqueue_scripts() {
     
        wp_enqueue_script( 'script_send', plugins_url( '/script_send.js', __FILE__ ), array('jquery'), '1.0', true );
     
        wp_localize_script( 'script_send', 'script', array(
            'ajax_url' => admin_url( 'admin-ajax.php' )
        ));
     
    }
    Voilà, j'espère que vous pourrez m'aider ! Parce que lorsque que je regarde dans la requête POST effectué, les données sont bien transmises...

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Je résume : PHP dit que la variable 'desti' n'existe pas. JS collecte les valeurs du formulaire par serialize(). Donc on peut penser qu'il n'y a pas d'input ayant name="desti" dans le formulaire. Impossible de le confirmer puisque le code HTML est aux abonnés absents.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Peut-être me suis-je mal exprimé mais j'ai bien précisé que les données étaient transmises dans la requête... Mais voici tout de même le code HTML du formulaire :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <form method="post" action="">
    		<table id="compose">
    			<tr><td><?php _e('From :', 'messagerie'); ?></td><td><?php echo wp_get_current_user()->display_name; ?></td></tr>
    			<tr><td><label for="desti"><?php _e('To :', 'messagerie');?></label></td><td><select name="desti">
    			<?php 
    			$users = get_users(array('fields' => array('id', 'display_name' )));
     
    			if ($_GET['action'] == answer || $_GET['action'] == 'forward' || $_GET['action'] == 'continue')
    			{
    					$mess = $wpdb->get_row($wpdb->prepare('SELECT * FROM wp_messagerie WHERE id = %d', $_GET['mail']));
    			}
     
    			foreach($users as $user)
    			{
    					if (isset($mess) && $user->id == $mess->sender )
    					{
    							$select = 'selected';
    					}
    					else { $select = ''; }
     
    					echo '<option ' . $select . ' value="' . $user->id . '">' . $user->display_name . '</option>';
    			}
    			?>
    			</select></td></tr>
    			<tr><td><label for="obj"><?php _e('Object :', 'messagerie');?></label></td><td><input name="obj" type="text" maxlength="255" <?php if (isset($mess) && $_GET['action'] == 'answer') { echo 'value="RE: '. $mess->objet . '"'; } elseif ($_GET['action'] == 'forward') { echo 'value="FW: '. $mess->objet . '"'; } elseif ($_GET['action'] == 'continue') { echo 'value="' . $mess->objet . '"'; }?>/></td></tr>
    			<tr><td><label for="mess"><?php _e('Mail :', 'messagerie');?></label></td><td><textarea rows="10" cols="25" name="mess" id="txt-aref"><?php if (isset($mess) && $_GET['action'] != 'continue') { echo html_entity_decode('<br/><hr/><span>De : ' . get_user_by('id', $mess->sender)->display_name . '</span><br/><span>A : ' . get_user_by('id', $mess->receiver)->display_name . '</span><br/><span>Objet : </span>' . $mess->objet . '</span><br/><span>Date : ' . $mess->date_envoi . '</span><br/><br/> ' . $mess->message); } elseif (isset($mess) && $_GET['action'] == 'continue') { echo $mess->message; }?></textarea></td></tr>
    			<tr><td colspan="2"><input type="submit" name="envoie" value="<?php _e('Submit', 'messagerie'); ?>"/><input type="submit" name="brouillon" value="<?php _e('Save Draft', 'messagerie');?>"/><?php if(isset($mess) && $_GET['action'] == 'continue') { echo '<input type="hidden" name="id_mess" value="' . $mess->id . '"/>';}?></td></tr>
    		</table>
    	</form>

    Et je tiens à dire que avant que j'essaye de passer en jQuery, mon code fonctionnait parfaitement...

    EDIT : Après plusieurs autres tests, il semblerait que le problème vienne de la requête vers la base de données, la requête ne s'effectuerait pas (même en donnant des paramètres autres que les données transmises)...

  4. #4
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonjour

    J'ai réagi par rapport à :
    Et en l'occurence, et bien isset($_POST['desti']) ou isset($_REQUEST['desti']) ne marche pas !
    .

    Pour le PHP ou la base de données, il y a d'autres forums.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  5. #5
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je suis tout à fait d'accord, d'ailleurs à sa création, mon post se situait dans PHP -> Script -> Blog -> Wordpress, et il a été déplacé deux fois par les administrateurs.

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut
    Bonjour,
    j'ai parcouru tout le code que tu fournies, pas trop cherché la succession/logique, mais je ne trouve nulle part un élément ayant pour id="#send_mail" id="send_mail" alors que tu fais un jQuery('#send_mail').

    [EDIT] correction suite à commentaire danielhagnoul

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    [...] je ne trouve nulle part un élément ayant pour id="send_mail" [...]
    Petite erreur de copier-coller, pas de # dans l'ID.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 121
    Points
    44 121
    Par défaut
    Mais tout à fait Thierry euh ! daniel.

  9. #9
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    En fait, le id="send_mail" était un div qui entourait le formulaire... Mais en cherchant et en retournant le problème de tous les côtés j'ai vu que la fonction PHP attribuée n'était pas exécutée et donc j'ai remplacé le script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     data : '?action=send_mail&' + donnees,
    par
    et en incluant un champ dans le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="action" value="send_mail"/>
    Et maintenant, tout marche ! Merci à tous pour vos réponses !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2015, 15h33
  2. Réponses: 3
    Dernier message: 22/11/2010, 09h18
  3. Récupération des Données sous struts 2 et le theme ajax
    Par Younes_001 dans le forum Struts 2
    Réponses: 1
    Dernier message: 22/01/2010, 12h24
  4. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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