Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 访问多维数组_Php_Mysql_Multidimensional Array - Fatal编程技术网

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)
}