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 et insertion dans bdd des valeurs d'un groupe d'inputs type "checkbox"


Sujet :

jQuery

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut Récupération et insertion dans bdd des valeurs d'un groupe d'inputs type "checkbox"
    Bonjour,

    Ça fait un bout de temps que je cherche à résoudre un problème:
    Dans ma page "newsletter.php" ,l'utilisateur saisit les thématiques de ses newsletters.
    Au submit, si tout est validé côtés serveur client, une popin s'ouvre pour l'informer
    sans rechargement ni redirection.

    A l'état actuel, les inputs hors type checkbox sont bien enregistrés dans la table.
    Je voudrais demander une seule question précise: Comment enregistrer les valeurs des
    cases cochées "nl_choices" ?
    Je pense que le problème vient de leur définition dans le js (lignes 68 à 70).
    Merci pour vos éclaircissements.

    newsletter.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
    <?php
    	require("admin/config-db.php");
    	mysql_connect($adresse,$nom,$motdepasse);
    	mysql_select_db($database); 
    	if(isset($_POST['action-submit'])){
    		$valid=true;
     
    		$nom=$_POST['nom'];
    		$email=$_POST['email'];
    		if(isset($_POST['choices'])){
    			$choices=$_POST['choices'];
    			$nl_choices=implode("," ,$choices);
    			$msg_choices = "";
    		}else {
    			$choices = Array ();
    			$valid=false;
    			$msg_choices = "Veuillez choisir une neswletter au minimum"; 
    		}
     
    		$match_nom = preg_match('#^[a-zéèàùûêâôëA-Z0-9._\'\s-]{5,16}$#', $nom);
    		if(!$match_nom ){
    			echo "Veuillez choisir un nom de 5 à 16 caractères";
    			$valid=false;
    		}
     
    		$query=mysql_query("SELECT email from newsletterusers where email='$email'") or die(mysql_error());
    		$row=mysql_num_rows($query);
    		if(empty($email)){
    			echo "Veuillez renseigner votre adresse e-mail";
    			$valid=false;
    		}else if(! filter_var($email,FILTER_VALIDATE_EMAIL))  {
    			echo "E-mail non valide. Veuillez recommencer";
    			$valid=false;
    		}else if($row>0){
    			echo "Adresse mail déjà enregistrée";
    			$valid=false;
    		}else{
    			echo "Pour valider votre inscription à la newsletter, un lien d'activation vous a été envoyé à votre adresse mail.";
     
    		}
    	}
    ?>
    <form id="themes"  action="modules/insert_into_db.php" method="post" data-rel="popup_name" class="poplight">
    	<input id="test1" type="checkbox" name="choices[]" value="Culture"
    		<?php if($_POST && in_array('Culture',$choices)){ echo "checked";} ?>/>
    	<input id="test2" type="checkbox" name="choices[]" value="Planète"
    		<?php if($_POST && in_array('Planète',$choices)){ echo "checked";} ?>/>
    	<input id="test3" type="checkbox" name="choices[]" value="Sciences"
    		<?php if($_POST && in_array('Sciences',$choices)){ echo "checked";} ?>/>
     
    	<input id="nom-inscr" name="nom" type="text" />
    	<input id="email-inscr" name="email" type="text" />
     
    	<button id="action-submit"name="action-submit" type="submit">JE M'INSCRIS</button>
    	<div id="popup_name" class="popup_block">
    		<h2>CONFIRMATION D'ENREGISTREMENT</h2>
    		<p>Les données ont été correctement enregistrées.<br/>
    		Vous allez recevoir un mail d'activation à : <strong id="emailtarget"></strong></p>
    	</div>
    </form>
    Js associé:
    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
    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    $(function(){
    	var formulaire = $("#themes");
    	formulaire.on('submit',function(event)   {
    		event.preventDefault();
    		//check nom--------------------------------------------------------
    		var erreur_name_div = formulaire.find("#error_name");
    		var nom00 = formulaire.find("input[name=nom]");
    		var nom = $.trim(nom00.val()); 
    		var nom_regex = /^[a-zéèàùûêâôëA-Z0-9._\'\s-]{5,16}$/;
    		if(nom == "" )	{
    			erreur_name_div.html("Veuillez renseigner votre nom ");
    			$("#nom-inscr").css("border-color","#cc3c23");
    			return false;
    		}else if(nom != "") {
    			if (!nom_regex.test(nom))	{
    				erreur_name_div.html("saisie de nom incorrecte");
    				$("#nom-inscr").css("border-color","#cc3c23");
    				return false;
    			}						
    		} 
    		//check email--------------------------------------------------------
    		var erreur_email_div = formulaire.find("#error_email");
    		var mail = formulaire.find("input[name=email]");
    		var email = $.trim(mail.val()); 
    		var email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    		if(email == "")	{
    			erreur_email_div.html("Veuillez renseigner une adresse mail");
    			$("#email-inscr").css("border-color","#cc3c23");
    			return false;
    		}else if(email != "") {
    			if (!email_regex.test(email))	{
    				erreur_email_div.html("E-mail non valide. Veuillez recommencer");
    				$("#email-inscr").css("border-color","#cc3c23");
    				return false;
    			}			
    		} 
    		var datastring ='email='+email; 
    		$.ajax({
    			type: "POST", 
    			url: "check_email_exists.php", 
    			data: datastring, 
    			success: function(responseText) {
    				if(responseText == 1) { 
    					erreur_email_div.html("Adresse mail déjà enregistrée");
    					$("#email-inscr").css("border-color","#cc3c23");
    				}else if(responseText == '') { 
    					erreur_email_div.html("");
    					mail.val(''); 	
    				}
    			}
    		});
    		//check choices--------------------------------------------------------
    		var boxesTicked = "";
    		var erreur_checkbox_div = formulaire.find("#error_checkbox");
    		for (i = document.getElementsByName('choices[]').length - 1; i >= 0; i--) {
    			if (document.getElementsByName('choices[]')[i].checked) {
    				boxesTicked = boxesTicked + document.getElementsByName('choices[]')[i].value + "\n";
    			}
    		}
    		if (boxesTicked == "") {
    			erreur_checkbox_div.html("<img src='images/alert.png'><p>Veuillez séléctionner une ou plusieurs newsletters pour continuer</p>");
    			$("#error_checkbox").css("visibility","visible");
    			return false;
    		}else {
     
    		}
    		//Récupération des valeurs des checkbox------------------------------------------------------------------
    		var nl_choices00=formulaire.find("input[name=choices[]]");
    		var nl_choices11 = nl_choices00.val();
    		var nl_choices = nl_choices11.join(,); 
     
    		//insert in database-------------------------------------------------------------------
    		var datastring2 = "nl_choices="+nl_choices+"&nom="+nom+"&email="+email;
     
    		$.ajax({
    			type: "POST", 
    			url: "insert_into_db.php", 
    			data: datastring2,
    			//dataType : 'html',
    			success: function(responseText2) {
    				if(responseText2 == 1) { 
    					return false;
    				}else if(responseText2 == '') {
    					return true;
    				}
    			}
    		});
    		//début popin -----------------------------------------------------------
    		var popID = $(this).data('rel'); 
    		var popWidth = $(this).data('width'); 
    		document.getElementById("emailtarget").innerHTML = email;
    		$('#' + popID).fadeIn("fast").css({ 'width': popWidth}).prepend('<a href="#" class="close"><img src="images/close_pop.png" class="btn_close" title="Fermer la fenêtre" alt="Fermer" /></a>');
    		var popMargTop = ($('#' + popID).height() + 80) / 2;
    		var popMargLeft = ($('#' + popID).width() + 80) / 2;
    		$('#' + popID).css({ 
    			'margin-top' : -popMargTop,
    			'margin-left' : -popMargLeft
    		});
    		$('body').append('<div id="fade"></div>');    
    		$('#fade').css({'filter' : 'alpha(opacity=70)'}).show();
     
    	});
    	//fermer au clic sur fond noir----------------------------------------------
    	$('body').on('click', 'a.close, #fade', function() { 
    		$('#fade , .popup_block').fadeOut("fast",function() {
    			$('#fade, a.close').remove();  
    		});
    		return false;
    	});
    });
    check_email_exists.php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
    	$email=$_POST['email'];
    	require("config-db.php");
    	mysql_connect($adresse,$nom,$motdepasse);
    	mysql_select_db($database); 
    	$query = mysql_query("SELECT `email` FROM `newsletterusers` WHERE `email` = '$email'");
    	if(mysql_num_rows($query) == 1) { 
    		echo '1';
    	} else {
    		echo ''; 
    	}
    ?>

    insert_into_db.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
    <?php 
    	require("config-db.php");
    	mysql_connect($adresse,$nom,$motdepasse);
    	mysql_select_db($database);
     
    	if(isset($_POST['choices'])){
    		$choices=$_POST['choices'];
    		$nl_choices=implode("," ,$choices);
    	}else {
    		$choices = Array ();
    	}
    	$nom        = $_POST['nom'];
    	$email      = $_POST['email'];
     
    	srand((double)microtime()*1000000);       
    	$string     = md5(rand(0,1000000)); 
    	$thekey     = $string;
    	if(mysql_query("INSERT into newsletterusers (nl_choices,nom,email,validkey) values('$nl_choices','$nom','$email','$thekey')")){
    		echo '';
    	} else {
    		echo '1'; 
    	}
    ?>

  2. #2
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 43
    Points
    43
    Par défaut
    Dans insert_into_db.php il y a quoi dans ton $_POST['choices'], il est vide ?


    Tu peux essayer un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var TabChoices = [];
    $('input:checked[name=choices]').each(function() {
      TabChoices.push($(this).val());
    });
    Construction d'une piscine : http://www.construire-sa-piscine.com
    Livraison de fleurs pour particulier : http://www.fleurs-en-gros.com

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par franckm1000 Voir le message
    Dans insert_into_db.php il y a quoi dans ton $_POST['choices'], il est vide ?
    Oui, je viens de m'en apercevoir.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    J'ai remplacé ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Récupération des valeurs des checkbox-----------------------------
    var nl_choices00=formulaire.find("input[name=choices[]]");
    var nl_choices11 = nl_choices00.val();
    var nl_choices = nl_choices11.join(,);
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var nl_choices00=formulaire.find("input[name=choices[]]");
    var nl_choices11 = push(nl_choices00.val());
    var nl_choices = nl_choices11.join(,);
    et ça m'enregistre dans ma table tous les inputs 'text' et 'checkbox' (et j'ai vérifié dans insert_into_db.php: les valeurs de choices[] sont bien renseignées), mais pas de popin, et je suis rediridé vers insert_int_db.php

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2011
    Messages : 26
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par amdawb Voir le message
    et ça m'enregistre tous les inputs 'text' et 'checkbox', mais pas de popin, et je suis rediridé vers insert_int_db.php .
    Je suis pas bien ton truc. Mais dans ton js tu lances un AJAX vers insert_int_db.php donc c'est plutôt normal que tu sois redirigé là non ?

    Le success de cet AJAX devrait peut être justement faire en sorte d'ouvre popin ?
    Construction d'une piscine : http://www.construire-sa-piscine.com
    Livraison de fleurs pour particulier : http://www.fleurs-en-gros.com

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Points : 43
    Points
    43
    Par défaut
    OK, je vais essayer de mettre ma popin dans une fonction qui se lancera dans success de la requête ajax.
    Si de votre part, vous pouvez me montrer comment, je vous en saurai gré.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2015, 15h31
  2. Réponses: 8
    Dernier message: 04/06/2009, 15h53
  3. pb double insertion dans BDD
    Par oceane751 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/12/2005, 09h59
  4. Insertion dans BDD type ACCESS
    Par NeHuS dans le forum ASP
    Réponses: 2
    Dernier message: 20/04/2005, 10h53

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