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