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:
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:
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:
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:
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';
}
?> |