Php 访问多维数组
这是我最后一个问题的后续部分。我试图访问多维数组的数据,以便插入到数据库中。我找遍了所有的论坛,也自己尝试了不同的东西,但是找不到任何有效的。以下是阵列的外观:Php 访问多维数组,php,mysql,multidimensional-array,Php,Mysql,Multidimensional Array,这是我最后一个问题的后续部分。我试图访问多维数组的数据,以便插入到数据库中。我找遍了所有的论坛,也自己尝试了不同的东西,但是找不到任何有效的。以下是阵列的外观: $_POST[] = array[stake]( 'stakeholder1' => array( 'partner'=> 'partner', 'meet'=> 'meet' ), 'stakeholder2' => array( 'pa
$_POST[] = array[stake](
'stakeholder1' => array(
'partner'=> 'partner',
'meet'=> 'meet'
),
'stakeholder2' => array(
'partner'=> 'partner',
'agreement'=> 'agreement',
'train'=> 'train',
'meet'=> 'meet'
),
);
我试着做一些类似于更新列表的事情,其中涉众=stakeholder1 SET partner=1,meet=1取决于选择的涉众/选项有四个不同的选项。谢谢
foreach($main_array as $key => $sub_array) {
$sql = 'UPDATE list
WHERE stakeholder = "{$key}"
SET ';
$sets = array();
foreach($sub_array as $column_value)
$sets[] = $column_value." = 1";
$sql = $sql.implode(',', $sets);
}
如果我正确理解了您的数据库模式,这将为您提供一些类似于您正在寻找的内容。如果您使用的是PDO,您可以执行以下操作:
foreach($_POST as $stakeholder => $data) {
$sth = $dbh->prepare('UPDATE `list` SET `' . implode('` = 1, `', array_keys($data)) . '` = 1 WHERE stakeholder = ?');
$sth->execute(array($stakeholder));
}
确保清理数据的用户输入键。…此项将为选中选项设置1,为未选中选项设置0,否则您将错过一些数据更新
$optionsList = array('partner', 'agreement', 'train', 'meet');
$stakeHolders = array('stakeholder1', 'stakeholder2', ...);
foreach($stakeHolders as $stakeHolder)
{
$selectedOptions = $_POST[$stakeHolder];
$arInsert = array();
foreach($optionsList as $option)
$arInsert[] = '`'.$option.'` = '.intval(isset($selectedOptions[$option]));
$sql = "UPDATE list
SET ".implode(", ", $arInsert)."
WHERE stakeholder = '".mysql_real_escape_string($stakeHolder)."'";
// TODO: execute $sql (mysql_query(), or PDO call,
// or any wrapper you use for DB)
}
到目前为止你试过什么?您的数据库表模式是什么?我假设:干系人=string,合作伙伴=binary1,协议=binary1,train=binary1,meet=binary1SQL注入失败和语法失败。如果你把stakeholder1'或'1'='1作为一个键怎么办?当有人对答案投反对票时,请向其他人提供一条评论,说明你为什么认为这需要投反对票。它将帮助那些偶然发现答案的人。事实上,这不会传递语法。当它被编辑时,它正在测试涉众=“{$key}”,这意味着$key将是一个文本。原始作者没有提到清理传入的数据。是的,就是这样。这就是我的输入名称的样子:name=stack[$stakeid][$options]。例如,当我回显$k时,它返回的是股份,而不是持票人1……好像它是一级以上?根据您在原始帖子中发布的数组,情况不应该是这样。你能更新原始帖子以包含一个print\u r$\u帖子,这样我就可以看到实际的数组格式吗?好的,我把更正后的数组放上去了。忘记添加数组名。我也明白了;我只是在foreach语句的$u POST后面添加了[stack]。谢谢,这成功了!
$optionsList = array('partner', 'agreement', 'train', 'meet');
$stakeHolders = array('stakeholder1', 'stakeholder2', ...);
foreach($stakeHolders as $stakeHolder)
{
$selectedOptions = $_POST[$stakeHolder];
$arInsert = array();
foreach($optionsList as $option)
$arInsert[] = '`'.$option.'` = '.intval(isset($selectedOptions[$option]));
$sql = "UPDATE list
SET ".implode(", ", $arInsert)."
WHERE stakeholder = '".mysql_real_escape_string($stakeHolder)."'";
// TODO: execute $sql (mysql_query(), or PDO call,
// or any wrapper you use for DB)
}