创建阵列并将其打印到TXT文件中

时间:2013-09-01 13:16:43

标签: php mysql arrays pdo

更新

我从$_POST['changed']得到数组值。

数组结构如下所示:

Array
(
    [0] => Array
        (
            [recid] => 1
            [nachname] => Müller7777
        )

    [1] => Array
        (
            [recid] => 3
            [vorname] => Maria123
        )

)

我排在第3行这个错误:致命错误:函数名称必须是字符串

$uarr=array();

foreach ($_POST['changed'] as $a) {
  list($x,$k)=array_keys($a);
  list($y,$v)=array_values($a);

  $uarr[$y][]="$k='$v'";
}

foreach ($uarr as $k=>$v) {
  $sql = "";
  $sql .="UPDATE tbl SET ".join(",",$v)." WHERE recid=$k";
  // send UPDATE ...
}
file_put_contents('filename2.txt', $sql);

在我做最后的数据库UPDATE之前,我想检查创建的数组是否完成了它的工作。这就是为什么我想首先将$ sql变量写入txt文件。

----------------------------------------------- -

SOLUTION:

检查$_POST['changed'] == null是否是此问题的最终答案。

if ($_POST['changed'] == null) {

} else {

$uarr=array();
$b = $_POST['changed'];
foreach ($b as $a) {
  list($x,$k)=array_keys($a);
  list($y,$v)=array_values($a);
  // $x contains the `recid` key 
  // $y ...                  value
  $uarr[$y][]="$k='$v'";
}



foreach ($uarr as $k=>$v) {
  $sql = "";
  $sql .="UPDATE tbl SET ".join(",",$v)." WHERE recid=$k";
  // send UPDATE ...
}
file_put_contents('filename2.txt', $sql);

}

2 个答案:

答案 0 :(得分:0)

尝试这样做:

$BigArray = $_POST['changed'];
$LengthOfArray = sizeof($BigArray);

for ($i = 0; $i < $LengthOfArray ; $i++) {

    $SubArray = $BigArray[$i];

    // Call the update/insert here
    // $SubArray['recid'] is the ID
    // $SubArray['vorname'] is the name
}

答案 1 :(得分:0)

在运行单个UPDATE语句之前 - 是的,对于每个recid值,您应该发送一个语句 - 您可以首先收集关联数组中每个recid的所有受影响的值像

$uarr=array();
foreach ($_POST['changed'] as $a) {
  list($x,$k)=array_keys($a);
  list($y,$v)=array_values($a);
  // $x contains the `recid` key 
  // $y ...                  value
  $uarr[$y][]="$k='$v'";
}

然后再做一个像

这样的循环
foreach ($uarr as $k=>$v) {
  $sql="UPDATE tbl SET ".join(",",$v)." WHERE recid=$k";
  // send UPDATE ...
}

但是,当然,只有当$_POST('changed')数组符合所描述的格式和顺序时,这才能正常工作。最后,到目前为止,此代码中没有任何内容可以保护您免受SQL注入。