我正在尝试使用 QueryBuilder 和以下代码使用这些复选框值更新表 (auth_users),但它不适用于我表单上的复选框。
我认为它不起作用可能是因为 $key,"'".$value."'"不等于数据库字段名称和正确的值,但实际上等于 "name":"checked"而不是 "mb":"1"
我在这一点上可能是错的。我基本上是想弄清楚如何遍历这个 JSON 对象并更新特定 $id 的行中的值。如果选中该框,它将更新“1”,否则将更新“0”。
我有 26 个复选框值要为数据库中的每条记录更新。 数据库表结构 uName,uFname,uLName,uSecurityLevel,mb,mc,ms,mi,ml,mp,mo,mst,si,ei,ai,ci,ali,hli ....等...(见下方JSON对象中的数据)
JQUERY 函数:
function getCheckBoxRights()
{
var cbr = new Array();
$(".rchk").each(function(i,e)
{
// loop through each checkbox and discover if it is checked,
// and if so value = 1 else value = 0
if($(e)[0].checked) cbr.push({"name":$(e).attr('name'),"checked":"1"});
else cbr.push({"name":$(e).attr('name'),"checked":"0"});
});
console.log(cbr);
return JSON.stringify(cbr);
}
这会为复选框的状态返回以下 JSON 对象:
[{"name":"ai","checked":"1"},{"name":"hi","checked":"1"},
{"name":"hhi","checked":"1"},{"name":"pii","checked":"1"},
{"name":"li","checked":"1"},{"name":"gi","checked":"1"},
{"name":"si","checked":"1"},{"name":"ci","checked":"1"},
{"name":"ei","checked":"1"},{"name":"voi","checked":"0"},
{"name":"hli","checked":"1"},{"name":"gli","checked":"1"},
{"name":"sli","checked":"1"},{"name":"usli","checked":"1"},
{"name":"ali","checked":"1"},{"name":"cli","checked":"1"},
{"name":"mb","checked":"1"},{"name":"mc","checked":"0"},
{"name":"md","checked":"0"},{"name":"mi","checked":"1"},
{"name":"ml","checked":"0"},{"name":"mp","checked":"0"},
{"name":"mo","checked":"0"},{"name":"ms","checked":"0"},
{"name":"mst","checked":"0"},{"name":"mu","checked":"0"}]
AJAX 调用:
$.ajax(
{
dataType:'JSON',
type:'POST',
cache:false,
url:'dump.php',
data:'myaction=updatec&t=auth_users&id='+data.uID+'&jsonc='+getCheckBoxRights()
});
var jsonc = getCheckBoxRights();
console.log('!!!!!!!!!!!!');
console.log('CheckBox JSON Object:'+jsonc);
console.log('!!!!!!!!!!!!');
console.log('ID of record to update: '+data.uID);
DUMP.PHP 文件:
case "updatec":
{
if(!isset($id)) break;
$jsonc = urldecode($jsonc);
$jsonc = stripslashes($jsonc);
updatec($jsonc,$t,$id);
break;
}
function updatec($jsonc,$table,$id)
{
$tables = array("auth_users");
if(!in_array($table,$tables)) return false;
$updateQuery = new UpdateQuery($table);
$datac = json_decode($jsonc);
foreach($datac as $key=>$value)
{
$updateQuery->addItem($key,"'".$value."'");
}
$updateQuery->addCondition("uID",$id);
$query = $updateQuery->generateQuery();
$bool = TableFunctions::executeQuery($query);
$p = new stdClass();
$p->ok = 0;
$p->uID = $id; // the id of the record we updated
if($bool) $p->ok = 1;
echo json_encode($p);
}
我在想也许我可以像这样解码数据然后执行更新?
$updatechk = json_decode($jsonc, true);
foreach($updatechk['name'] as $key => $updatechk['checked'] as $value)
{
if($value)
{
//how to use json array to insert data in Database
mysql_query("UPDATE auth_users SET ".$key." = '".$value."' WHERE uID = '". $id ."'");
}
}
这看起来是正确的方法吗?我只是有点迷茫,试图让这一切发生,任何帮助都会很棒。
复选框 HTML(根据请求)
<div id="inventoryRights" style="display:none;float:right;width:43.3%;"><strong><u>Inventory Rights</u></strong><p>
<input type="checkbox" id="ai" name="ai" data-table="auth_users" class="rchk json-input" data-prop="ai"> Active
<input type="checkbox" id="hi" name="hi" data-table="auth_users" class="rchk json-input" data-prop="hi"> Hold
<input type="checkbox" id="hhi" name="hhi" data-table="auth_users" class="rchk json-input" data-prop="hhi"> Hold Indefinately
<input type="checkbox" name="pii" id="pii" data-table="auth_users" class="rchk json-input" data-prop="pii"> Pending
<input type="checkbox" id="li" name="li" data-table="auth_users" class="rchk json-input" data-prop="li"> Link<p>
<input type="checkbox" id="gi" name="gi" data-table="auth_users" class="rchk json-input" data-prop="gi"> Greeny
<input type="checkbox" name="si" id="si" data-table="auth_users" class="rchk json-input" data-prop="si"> Sold
<input type="checkbox" id="ci" name="ci" data-table="auth_users" class="rchk json-input" data-prop="ci"> Cancelled
<input type="checkbox" id="ei" name="ei" data-table="auth_users" class="rchk json-input" data-prop="ei"> Edit
<input type="checkbox" name="voi" data-table="auth_users" class="rchk json-input" data-prop="voi"> View Only<p>
<strong><u>Default Views</u></strong><p>
<input type="checkbox" name="hli" id="hli" data-table="auth_users" class="rchk json-input" data-prop="hli"> Hold List
<input type="checkbox" name="gli" id="gli" data-table="auth_users" class="rchk json-input" data-prop="gli"> Greeny List
<input type="checkbox" id="sli" name="sli" data-table="auth_users" class="rchk json-input" data-prop="sli"> Sold List
<input type="checkbox" id="usli" name="usli" data-table="auth_users" class="rchk json-input" data-prop="usli"> Unsold List<p>
<input type="checkbox" name="ali" id="ali" data-table="auth_users" class="rchk json-input" data-prop="ali"> Archived List
<input type="checkbox" name="cli" data-table="auth_users" class="rchk json-input" id="cli" data-prop="cli"> Cancelled List</div>
<div id="allowableRights" style="display:none;padding:5px;width:55%;"> <strong><u>System Rights</u></strong><p>
<input type="checkbox" id="mb" name="mb" data-table="auth_users" class="rchk json-input" data-prop="mb"> Manage Bedrooms
<input type="checkbox" id="mc" name="mc" data-table="auth_users" class="rchk json-input" data-prop="mc"> Manage Companies
<input type="checkbox" name="md" data-table="auth_users" id="md" class="rchk json-input" data-prop="md"> Manage Descriptions
<input type="checkbox" name="mi" data-table="auth_users" class="rchk json-input" id="mi" data-prop="mi"> Manage Inventory<p>
<input type="checkbox" id="ml" name="ml" data-table="auth_users" class="rchk json-input" data-prop="ml"> Manage Locations
<input type="checkbox" id="mp" name="mp" data-table="auth_users" class="rchk json-input" data-prop="mp"> Manage Properties
<input type="checkbox" name="mo" id="mo" data-table="auth_users" class="rchk json-input" data-prop="mo"> Manage Owners<p>
<input type="checkbox" name="ms" data-table="auth_users" class="rchk json-input" id="ms" data-prop="ms"> Manage Sleeps
<input type="checkbox" id="mst" name="mst" data-table="auth_users" class="rchk json-input" data-prop="mst"> Manage States
<input type="checkbox" id="mu" name="mu" data-table="auth_users" class="rchk json-input" data-prop="mu"> Manage Users</div>
最佳答案
我终于明白了。 =) 下面显示了工作代码。问题是 2 部分。一是我只循环遍历了一次 JSON 对象,二是 JSON 对象的格式不正确。
这是工作代码: 在 DUMP.PHP 中
case "updatec":
{
if(!isset($id)) break;
updatec($jsonc,$table,$id)
break;
}
function updatec($jsonc,$table,$id)
{
$updateQuery = new UpdateQuery($table);
$datac = json_decode($jsonc,true);
foreach ($datac as $key => $jsons) {
foreach($jsons as $key => $value) {
$updateQuery->addItem($key,"'".$value."'");
}
}
}
在函数重写中:
function getCheckBoxRights()
{
var cbr = new Array();
$(".rchk").each(function(i,e)
{
//get type and info, then setup an object to push onto the array
if($(e)[0].checked)
{
var datatype = $(e).attr('name'),
info = "1",
obj = {};
obj[datatype] = info;
cbr.push(obj);
}
else
{
var datatype = $(e).attr('name'),
info = "0",
obj = {};
obj[datatype] = info;
cbr.push(obj);
}
});
console.log(cbr);
return JSON.stringify(cbr);
}
至少感谢您的回复,并允许我再次回顾所有代码并尝试创建一种新方法来执行此操作。 Jquery/AJAX 可能具有挑战性,但学习很棒!
关于php - 使用 For Each 使用 JSON 对象更新 MySQL -- 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287420/