Javascript 复选框值不';使用AJAX无法正确发送到PHP

Javascript 复选框值不';使用AJAX无法正确发送到PHP,javascript,php,mysql,ajax,Javascript,Php,Mysql,Ajax,第二次尝试。我的最后一个问题不是很清楚,所以我想再次寻求帮助。。我已经粘贴了我的完整代码,所以你们可以看到我的代码是什么样子的,问题可能在哪里 所以我正在建立一个基本的会员网站。人们可以在signup.php页面上注册。到目前为止,这一切都很顺利。今天我想使用复选框添加一些选项。这些复选框都需要过帐到我的表中的列,它们的格式为ENUM('0','1'),不为NULL,默认值为0 复选框是id为“直升机”($heli)、“固定翼”($fw)、“商业”($com)、“滑翔机”($glider)、“气

第二次尝试。我的最后一个问题不是很清楚,所以我想再次寻求帮助。。我已经粘贴了我的完整代码,所以你们可以看到我的代码是什么样子的,问题可能在哪里

所以我正在建立一个基本的会员网站。人们可以在signup.php页面上注册。到目前为止,这一切都很顺利。今天我想使用复选框添加一些选项。这些复选框都需要过帐到我的表中的列,它们的格式为
ENUM('0','1'),不为NULL,默认值为0

复选框是id为“直升机”($heli)、“固定翼”($fw)、“商业”($com)、“滑翔机”($glider)、“气球”($bl)、“超轻”($ulm)、“滑翔伞”($para)、“水上飞机”($sp)、“飞行员”($pilot)和“条款”($terms)的输入

注册页面使用AJAX、PHP和MYSQL获取、验证表单值并将其发布到数据库。所有值都正确地发布到数据库,但所有复选框都会将post value 1输入到数据库,即使未单击它们。因此,无论我是否检查它,它总是在提交表单后将值1发布到DB

我有PHP和MYSQL的基本知识,但几乎没有AJAX和JAVA的知识,所以我很难找到我的代码有什么问题

总结一下我的问题:我的标准格式值被正确地发布到数据库中,但复选框都会发布值1,无论它们是否被选中

提前谢谢你

<?php
session_start();
// If user is logged in, header them away
if(isset($_SESSION["username"])){
    header("location: user.php?u=".$_SESSION["username"]);
    exit();
}
?><?php
// Ajax calls this NAME CHECK code to execute
if(isset($_POST["usernamecheck"])){
    include_once("php_includes/db_conx.php");
    $username = preg_replace('#[^a-z0-9]#i', '', $_POST['usernamecheck']);
    $sql = "SELECT id FROM users WHERE username='$username' LIMIT 1";
    $query = mysqli_query($db_conx, $sql); 
    $uname_check = mysqli_num_rows($query);
    if (strlen($username) < 3 || strlen($username) > 16) {
        echo 'Your username should be 3-16 characters long..';
        exit();
    }
    if (is_numeric($username[0])) {
        echo 'Usernames must begin with a letter..';
        exit();
    }
    if ($uname_check < 1) {
        echo $username . ' is available!';
        exit();
    } else {
        echo $username . ' is taken..';
        exit();
    }
}
?><?php
// Ajax calls this REGISTRATION code to execute
if(isset($_POST["u"])){

    include_once("php_includes/db_conx.php");

    $u = preg_replace('#[^a-z0-9]#i', '', $_POST['u']);
    $e = mysqli_real_escape_string($db_conx, $_POST['e']);
    $p = $_POST['p'];
    $c = preg_replace('#[^a-z ]#i', '', $_POST['c']);
    $s = mysqli_real_escape_string($db_conx, $_POST['s']);
    $b = mysqli_real_escape_string($db_conx, $_POST['b']);
    $ex = mysqli_real_escape_string($db_conx, $_POST['ex']);
    $w = mysqli_real_escape_string($db_conx, $_POST['w']);
    $bio = mysqli_real_escape_string($db_conx, $_POST['bio']);
    $heli = $_POST['heli'];
    $fw = $_POST['fw'];
    $com = $_POST['com'];
    $sp = $_POST['sp'];
    $glider = $_POST['glider'];
    $ulm = $_POST['ulm'];
    $para = $_POST['para'];
    $bl = $_POST['bl'];
    $pilot = $_POST['pilot'];
    $terms = $_POST['terms'];

    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));

    $sql = "SELECT id FROM users WHERE username='$u' LIMIT 1";
    $query = mysqli_query($db_conx, $sql); 
    $u_check = mysqli_num_rows($query);
    // -------------------------------------------
    $sql = "SELECT id FROM users WHERE email='$e' LIMIT 1";
    $query = mysqli_query($db_conx, $sql); 
    $e_check = mysqli_num_rows($query);
    //--------------------------------------------

    //at least one of the following must be clicked
    $checks = $heli + $fw + $com + $sp + $glider + $ulm + $para + $bl;

    // FORM DATA ERROR HANDLING
    if($u == "" || $e == "" || $p == "" || $c == "" || $s == "" || $ex == "" || $b == ""){
        echo 'You have not completed the form yet..';
        exit();
    } else if ($u_check > 0){ 
        echo 'The username you entered is already taken..';
        exit();
    } else if ($e_check > 0){ 
        echo 'That email adress is already in use in our system..';
        exit();
    } else if (strlen($u) < 3 || strlen($u) > 16) {
        echo 'Usernames must be between 3 and 16 characters..';
        exit(); 
    } else if (is_numeric($u[0])) {
        echo 'Usernames can not begin with a number..';
        exit();
    } else if($checks < 1) {
        echo 'Please select at least one licence..';
        exit();
    } else if(isset($pilot)) {
        echo 'Please verify that you are a real-life pilot..';
        exit();
    } else if(isset($terms)) {
        echo 'Please indicate that you have read our terms of use..';
        exit();
    } else {

        $p_hash = md5($p);

        $sql = "INSERT INTO users (username, email, password, country, website, bio, flighttime, bday, sex, helicopter, glider, fixedwing, seaplane, commercial, balloon, ultralight, paraglider, pilot, terms, ip, signup, lastlogin, notescheck)       
                VALUES('$u','$e','$p_hash','$c','$w','$bio','$ex','$b','$s','$heli','$glider','$fw','$sp','$com','$bl','$ulm','$para','$pilot','$terms','$ip',now(),now(),now())";
        $query = mysqli_query($db_conx, $sql); 
        $uid = mysqli_insert_id($db_conx);
        // Create directory(folder) to hold each user's files(pics, MP3s, etc.)
        if (!file_exists("user/$u")) {
            mkdir("user/$u", 0755);
        }
        echo "signup_success";
        exit();
    }
    exit();
}

?>

<html>
<head>

<script>
function restrict(elem){
    var tf = _(elem);
    var rx = new RegExp;
    if(elem == "email"){
        rx = /[' "]/gi;
    } else if(elem == "username"){
        rx = /[^a-z0-9]/gi;
    }
    tf.value = tf.value.replace(rx, "");
}
function emptyElement(x){
    _(x).innerHTML = "";
}
function checkusername(){
    var u = _("username").value;
    if(u != ""){
        _("unamestatus").innerHTML = 'Checking...';
        var ajax = ajaxObj("POST", "signup.php");
        ajax.onreadystatechange = function() {
            if(ajaxReturn(ajax) == true) {
                _("unamestatus").innerHTML = ajax.responseText;
            }
        }
        ajax.send("usernamecheck="+u);
    }
}
function signup(){
    var u = _("username").value;
    var e = _("email").value;
    var p1 = _("pass1").value;
    var p2 = _("pass2").value;
    var c = _("country").value;
    var s = _("sex").value;
    var b = _("bday").value;
    var ex = _("experience").value;
    var w = _("website").value;
    var bio = _("bio").value;
    var heli = _("helicopter").value;
    var fw = _("fixedwing").value;
    var com = _("commercial").value;
    var sp = _("seaplane").value;
    var glider = _("glider").value;
    var ulm = _("ultralight").value;
    var para = _("paraglider").value;
    var bl = _("balloon").value;
    var pilot = _("pilot").value;
    var terms = _("terms").value;
    var status = _("status");
    if(u == "" || e == "" || p1 == "" || p2 == "" || c == "" || s == "" || ex == "" || b == ""){
        status.innerHTML = 'Please fill out all the form data..';
    } else if(p1 != p2){
        status.innerHTML = 'Your password fields do not match..';
    } else {
        _("signupbtn").style.display = "none";
        status.innerHTML = 'Please wait...';
        var ajax = ajaxObj("POST", "signup.php");
        ajax.onreadystatechange = function() {
            if(ajaxReturn(ajax) == true) {
                if(ajax.responseText != "signup_success"){
                    status.innerHTML = ajax.responseText;
                    _("signupbtn").style.display = "block";
                } else {
                    window.scrollTo(0,0);
                    _("msform").innerHTML = "Thanks "+u+"! Check your email! ";
                }   ""
            }
        }
        ajax.send("u="+u+"&e="+e+"&p="+p1+"&c="+c+"&s="+s+"&b="+b+"&ex="+ex+"&w="+w+"&bio="+bio+"&heli="+heli+"&fw="+fw+"&com="+com+"&sp="+sp+"&glider="+glider+"&ulm="+ulm+"&para="+para+"&bl="+bl+"&pilot="+pilot+"&terms="+terms);
    }
}

</script>

</head>
<body>


    <form name="signupform" id="msform" onsubmit="return false;">


        <input type="text" id="username" onblur="checkusername()" onkeyup="restrict('username')" maxlength="16" placeholder="Username" />
            <span style="width: 100%; margin-left:0" id="unamestatus"></span>
        <input style="margin-top:-20px" type="text" id="email" placeholder="Email" onfocus="emptyElement('status')" onkeyup="restrict('email')" maxlength="88"/>
        <input type="password" id="pass1" placeholder="Password" onfocus="emptyElement('status')" maxlength="16"  />
        <input type="password" id="pass2" placeholder="Confirm password" onfocus="emptyElement('status')" maxlength="16"/>
        <select id="country" onfocus="emptyElement('status')">
              <?php include_once("template_country_list.php"); ?>
        </select>

        <textarea id="bio" onfocus="emptyElement('status')" placeholder="Bio"></textarea>
        <input type="text" onfocus="emptyElement('status')" id="website" placeholder="Website (optional)" />

        <input type="checkbox" id="helicopter" name="helicopter" onfocus="emptyElement('status')" value="1"> <span>Helicopter</span><br>
        <input type="checkbox" id="fixedwing" name="fixedwing" onfocus="emptyElement('status')" value="1" > <span>Fixed Wing</span><br>
        <input type="checkbox" id="commercial" name="commercial" onfocus="emptyElement('status')" value="1" > <span>Commercial</span><br>
        <input type="checkbox" id="seaplane" name="seaplane" onfocus="emptyElement('status')" value="1" > <span>Seaplane</span><br>
        <input type="checkbox" id="glider" name="glider" onfocus="emptyElement('status')" value="1" > <span>Glider</span> <br>
        <input type="checkbox" id="paraglider" name="paraglider" onfocus="emptyElement('status')" value="1" > <span>Para</span><br>
        <input type="checkbox" id="balloon" name="balloon" onfocus="emptyElement('status')" value="1" > <span>Balloon</span><br>
        <input type="checkbox" id="ultralight" name="ultralight" onfocus="emptyElement('status')"value="1"> <span>Ultralight</span>

        <select onfocus="emptyElement('status')" id="experience">
            <option value="0-500">0-500 hours</option>
            <option value="500-1000">500-1000 hours</option>
            <option value="1000-5000">1000-5000 hours</option> 
            <option value="5000+">5000+ hours</option>
        </select>
        <select onfocus="emptyElement('status')" id="sex" >
            <option value="Male">Male</option>
            <option value="Female">Female</option>
        </select>
        <input type="date" id="bday" onfocus="emptyElement('status')">

        <input type="checkbox" id="pilot" value="1" > <span>I am a real-life pilot</span>
        <input type="checkbox" id="terms" value="1" > <span>I accept the <a target="_blank" href="legal.php"><b>the terms of use</b></a></span>

        <input type="submit" class="submit action-button" id="signupbtn" onclick="signup()" value="Sign up!" />
        <br><div id="status"></div>
    </fieldset>
    </form>

</div>

</body>
</html>

在PHP中处理复选框的方法是

如果愿意,您可以给它们赋值,但这不是必需的。在php中,只有一种方法可以验证复选框。这是正确的方法

// This checks to see if the checkbox is "checked"
if(isset($_POST['checkbox_name'])){
    // Here you can set the value manually
    $checkbox_name = 1;
    // Or you can set it to the checkbox value
    $checkbox_name = $_POST['checkbox_name'];
}else{
    // Here is where you can set the value if it is NOT "checked"
    $checkbox_name = 0;
}
在javascript方面,您可以这样做

// To set the value manually based on being checked or not 
var heli = $("#helicopter").is(':checked') ? 1 : 0;

// Or get the value if checked
var heli = $("#helicopter").is(':checked') ? $("#helicopter").val() : 0;

尝试查看是否选中该复选框,而不是获取其值:

var heli = document.getElementById('helicopter').checked;
如果要存储该值:

var heli = document.getElementById('helicopter').checked ? document.getElementById('helicopter').value : 0;

您可以将元素id传递给函数,然后使用:

document.getElementById(this).click();

它将切换复选框“checked”属性。然后对PHP部分使用VIDesignz的解决方案。

不要将值设置为复选框。是的,我在搜索解决方案时在某个地方遇到了这个问题。那我该怎么做呢?我用
.prop('checked')
尝试了一些东西,但没有成功。我看到的是,所有的复选框值都设置为1,value=“1”,所以?我将复选框值设置为1,因为我希望它在选中时将值1发布到我的数据库中,当我在没有AJAX的简单PHP MYSQL表单中使用它时,它会起作用。不,我没有收到任何错误,表单按应有的方式提交,我唯一的问题是,所有复选框都会将值1发布到我的数据库中,即使没有单击。他们不应该在未单击时发布任何值,那么DB列将只是默认值0。谢谢,我现在正在尝试,会让你知道它是否有效@SenneVandenputte我有一个拼写错误,刚刚修复,很抱歉!应该是
.is(':checked')
不是
.is('checked')
我让它工作了!我第一次尝试了你的PHP en javascript代码,但没有成功。然后我把PHP代码改回原样,
$heli=$\u POST['heli']
并结合Javascript代码,它完全按照我的要求工作。非常感谢你!