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 :

id remplacé par "{" dans fonction Ajax


Sujet :

jQuery

  1. #1
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut id remplacé par "{" dans fonction Ajax
    Bonjour à toutes et tous,

    Alors voilà mon petit soucis :

    Je dois récupérer une ID de php qui est variable puisque dans une boucle. Donc impossible de définir une ID fixe (tableau)

    j'ai tenté de transformer ma variable comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $id = $np['id'];
    $idr = json_encode(array('id' => $id));  
     
    // ensuite je l'insert dans mon bouton 
    echo '<button class="upgrade" id="'.$idr.'"><img src="view/img/up.png" alt=""/></button>';
    ?>

    Ensuite à l'aide de Jquery, j'appelle l'ajax sur le click :

    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
    $(document).ready(function() {
    	$('button.upgrade').click(function(){
    		$('.loading').hide();
    		var id = $(this).attr('id');
    		$.getJSON(
    			'includes/functions/upgrade.php?id='+id,
    			{id:id},
    			'json',
    			function(data){
    				$(".loading").hide();
    				if(data.message){
    					$('.infos').addClass(data.success).html(data.message).fadeIn(600);
    					setTimeout(function(){
    						$('.infos').fadeOut(600);
    						location.reload();
    					}, 4000);
    				}
    			}
    		);
    		return false;
    	});
    });
    mais quand je regarde dans la console lors du click, eh bien il me retourne "id: {"

    Je sais pas d'où il vient celui-là mais il m'agace donc si vous connaissez la solution car j'ai beau chercher partout depuis des heures... je ne trouve rien là-dessus.

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Billets dans le blog
    6
    Par défaut
    ton problème doit venir du fait que tu met du JSON dans un attribut ID qui ne peut recevoir que du a à z, du 0 à 9 et les caractères _ et -

  3. #3
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    Que devrais-je faire alors ? car quoi que j'essaye... rien... pas d'id qui se retourne.

    Pourtant ma variable est un chiffre.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Il faut utiliser l'id en tant que tel (en tant que chiffre), pas passé par le tableau encodé (d'ailleurs je ne vois pas l'intérêt de passer par un tableau dans ton cas étant donné qu'il n'y a qu'une seule information à l'intérieur).

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $id = $np['id'];
     
    // ensuite je l'insert dans mon bouton 
    echo '<button class="upgrade" id="'.$id.'"><img src="view/img/up.png" alt=""/></button>';
    ?>

  5. #5
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    Non en fait j'ai 3 boutons.

    id= upgrade
    id= degrade
    id= delete

    Donc 3 actions différentes à mettre en place.

    Et vu que ces actions sont sur chaque ligne de mon tableau retourné... sinon en effet je n'aurai pas ce soucis là ^^

    Mais en effet, là j'utilise qu'une seule ID

    en mettant l'id en Value dans le bouton, les valeurs s'affichent bien mais les actions ne se font pas elles...

    J'ai donc un peu modifié mon code ^^

    le voici tel quel actuellement :

    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
    <?php
    // On sélectionne tous les membres du parti pour les afficher
    $q=$db->prepare('SELECT * FROM gov_users WHERE parti=:parti');
    $q->bindValue(':parti', $r['parti'], PDO::PARAM_INT);
    $q->execute();
    while($np=$q->fetch()){
        $nomb = $q->rowCount();
        $rq=$db->prepare('SELECT * FROM gov_users WHERE parti=:parti AND id=:id');
        $rq->bindValue(':parti', $r['parti'], PDO::PARAM_INT);
        $rq->bindValue(':id', $_SESSION['id'], PDO::PARAM_INT);
        $rq->execute();
        $ref=$rq->fetch();				
        $id = $np['id'];						
        echo '<div class="bodyListPart">';
        echo '<div class="bodyListPart1">'.$np['pseudo'].'</div>';
        echo '<div class="bodyListPart2">'.$np['parti_rang'].'</div>';
            // Seuls les sécrétaires et Président peuvent voir ces lignes
    	if($ref['parti_rang'] == "Président" || $ref['parti_rang'] == "Secrétaire"){
                echo '<div class="bodyListPart3">';
    	    echo '<form action="includes/functions/gestionParti.php" method="post">
    	        <input type="hidden" name="id" value="'.$id.'"/>
    		<input type="submit" title="Promouvoir" id="upgrade" name="upgrade" class="upgrade" value="" />
    		<input type="submit" title="Rétrograder" id="degrade" name="degrade" class="degrade" value="" />
    		<input type="submit" title="Virer ce membre" id="deleteM" name="deleteM" class="deleteM" value="" />
    	    </form>';
       	    echo '</div>';
    	}
    	echo '</div>';
        }
        echo '<br /><br />Votre parti compte <span class="orange">'.$nomb.'</span> adhérent(s) à ce jour.';
    ?>

    le jQuery (général) :

    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
    $(document).ready(function(){
    // Traitement formulaires
    	$('form').submit (function(e) {
    		$(".loading").hide();	
    		$.ajax({
    			url: $(this).attr('action'),
    			type: $(this).attr('method'),
    			data: $(this).serialize(),
    			dataType: 'json',
    			beforeSend: function(){
    			$('#submit').attr("value", "Traitement en cours...");
    			$(".loading").show();
    			},
    			success:function(data){
    				$(".loading").hide();
    				if(data.message){
    					$('.infos').addClass(data.success).html(data.message).fadeIn(600);
    					setTimeout(function(){
    						$('.infos').fadeOut(600);
    						location.reload();
    					}, 4000);
    					$('#submit').attr("value", "Valider");
    					$(':input[type=text]','form').val('');
    				}
    			}
    		});
    		return false;
    	});
    });
    et enfin le traitement php :

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    <?php
    if($_POST){
    	$success = "error2";
    		require_once '../config/config.php';
    		$q=$db->prepare('SELECT * FROM gov_users WHERE  id = :id');
    		$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    		$q->execute();
    		$u=$q->fetch();
    		if($_POST['id'] == $u['id']){
    			if($u['parti_rang'] != "Président"){
    				if($u['parti_rang'] != "Secrétaire"){
    					if($u['parti_rang'] == "Membre"){
    						$status = "Conseiller";
    					}
    					else $status = "Secrétaire";
    					$success = "agree2";
    					$q=$db->prepare('UPDATE gov_users SET parti_rang = :new WHERE id = :id');
    					$q->bindValue(':new', $status, PDO::PARAM_STR);
    					$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    					$q->execute();
    					$message = "Le membre ".$u['pseudo']." a été promu en tant que ".$status.".";
    				}
    				else
    				$message = "Le secrétaire est le plus haut grade après le président.<br />Il ne peut donc avoir plus de promotion.";
    			}
    			else
    			$message = "Vous êtes le président et ne pouvez pas plus augmenter dans la hiérarchie.";
    		}
    		else
    		$message = "Ce joueur n'existe pas.";
    		echo json_encode([
    		'message' => $message,
    		'success' => $success
    		]);
    	}
    	else if(isset($_POST['degrade'])){
    		$success = "error2";
    		require_once '../config/config.php';
    		$q=$db->prepare('SELECT * FROM gov_users WHERE  id = :id');
    		$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    		$q->execute();
    		$u=$q->fetch();
    		if($_POST['id'] == $u['id']){
    			if($u['parti_rang'] != "Président"){
    				if($u['parti_rang'] != "Secrétaire"){
    					if($u['parti_rang'] == "Secrétaire"){
    						$status = "Conseiller";
    					}
    					else $status = "Membre";
    					$success = "agree2";
    					$q=$db->prepare('UPDATE gov_users SET parti_rang = :new WHERE id = :id');
    					$q->bindValue(':new', $status, PDO::PARAM_STR);
    					$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    					$q->execute();
    					$message = "Le membre ".$u['pseudo']." a été promu en tant que ".$status.".";
    				}
    				else
    				$message = "Le secrétaire est le plus haut grade après le président.<br />Il ne peut donc avoir plus de promotion.";
    			}
    			else
    			$message = "Vous êtes le président et ne pouvez pas plus augmenter dans la hiérarchie.";
    		}
    		else
    		$message = "Ce joueur n'existe pas.";
    		echo json_encode([
    		'message' => $message,
    		'success' => $success
    		]);
    	}
    	else {
    		$success = "error2";
    		require_once '../config/config.php';
    		$q=$db->prepare('SELECT * FROM gov_users WHERE  id = :id');
    		$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    		$q->execute();
    		$u=$q->fetch();
    		if($_POST['id'] == $u['id']){
    			if($u['parti_rang'] != "Président"){
    				$success = "agree2";
    				$q=$db->prepare('UPDATE gov_users SET parti="0" WHERE id = :id');
    				$q->bindValue(':id', $_POST['id'], PDO::PARAM_INT);
    				$q->execute();
    				$message = "Le membre ".$u['pseudo']." a été supprimé du parti.";
    			}
    			else
    			$message = "Vous êtes le président et ne pouvez pas être renvoyé du parti.".var_dump($_POST['deleteM']);
    		}
    		else
    		$message = "Ce joueur n'existe pas.";
    		echo json_encode([
    		'message' => $message,
    		'success' => $success
    		]);
    }
    ?>

    seulement là il ne prend que la valeur delete...

    il ne prend pas les deux premières actions

    planchant dessus depuis un moment, j'imagine qu'il y a des erreurs toutes bêtes que je ne vois pas et c'est pour cela qu'un oeil averti extérieur ne peut être qu'un plus

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    La fonction serialize de jquery ne prend pas les input de type submit (même s'ils ont tout qui va bien pour le faire).

    Tu peux le vérifier en le debuggant toi-même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    console.log($(this).serialize());
    Il va donc falloir que tu rajoutes d'une autre manière ce paramètre dans les data de ta fonction ajax.

  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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    La fonction serialize de jquery ne prend pas les input de type submit
    C'est tout à fait logique en fait. L'input (ou bouton) submit n'est supposé être transmis que s'il a été cliqué, or en utilisant .serialize(), rien n'indique que ce soit le cas.
    De la même manière que l'événement onsubmit n'est pas supposé être déclenché si le formulaire est soumis par script (car il ne s'agit alors pas d'une action de l'utilisateur).
    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 confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    Ah et comment fait-on ça car je suis novice en jQuery ^^ ?

    et le truc est que j'utilise un traitement global pour tous mes formulaires...

    Hors donc là il me faut en créer un nouveau si je comprends bien et qui exclut serialize() ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 63
    Par défaut
    bon en fait j'ai résolu mon problème en faisant 3 <form> différents appelant ainsi 3 fichiers de traitement PHP différents mais utilisant mon système général de traitement de formulaire en jQuery/Ajax et ça fonctionne parfaitement.

    j'ai effectivement supprimé l'encodage json et l'id passe nickel

    Merci à tous pour votre soutien

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

Discussions similaires

  1. remplacer par des NaN dans 3 matrices ensemble
    Par helaaa dans le forum MATLAB
    Réponses: 7
    Dernier message: 21/09/2014, 19h30
  2. Réponses: 8
    Dernier message: 26/08/2011, 14h41
  3. Syntaxe data dans fonction $.(ajax)
    Par arthuro45 dans le forum jQuery
    Réponses: 2
    Dernier message: 25/05/2010, 19h10
  4. AWK, probleme de quote dans fonction awk.
    Par damien_27 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/03/2009, 18h51
  5. Réponses: 1
    Dernier message: 29/12/2008, 11h31

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