我有一个表单,它有很多单选按钮,最后还有一个隐藏字段。
我循环所有的输入值,将它们放入一个INSERT中,如下所示:
$count=count($_POST);
$counter=0;
$queryV="INSERT INTO `notes_value` ( `style_color`, `value` ) VALUES ";
$sku = $_POST['number']; //this is the one value coming from a hidden input
foreach ($_POST AS $key => $value) {
if ($counter < $count -1 )
$queryV.= "('$sku', '$value'),";
elseif ($counter = $count -1 )
$queryV.= "('$sku', '$value');";
$counter++;
}
我将使用$key
作为一个单独的INSERT
到另一个表,但我的问题是,我不想在$queryV
中使用最后一个隐藏输入,我需要除最后一个$_POST
之外的所有值
我这里的东西给了我类似的东西:
INSERT INTO `notes_value` ( `sku`, `data` ) VALUES ('12595200010037', 'yes'),('12595200010037', '12595200010037');
这是一个只选择了一个单选按钮的示例。在这种情况下,我希望它只返回一个$sku, $value
对。我从不想要这个foreach
中的最后一个$key, $value
。所以我想看看这个:
INSERT INTO `notes_value` ( `sku`, `data` ) VALUES ('12595200010037', 'yes');
也许我不理解这个问题,但从我的角度来看:
$queryV = "INSERT INTO `notes_value` ( `style_color`, `value` ) VALUES ";
$sku = $_POST['number'];
array_pop($_POST);
$values = array();
foreach ($_POST AS $key => $value)
{
$values[] = "('$sku', '$value')";
// use $key for another query
}
$queryV .= implode(', ', $values) . ';';
如果我理解,您希望构建一个查询并跳过数组中的最后一个键/值对。您有线路elseif ($counter = $count -1 )
。首先,应该是==
,但这可能是这里引入的拼写错误,而不是实际代码中的拼写错误。第二,当$counter == $count-1
时,它实际上是最后一个项目,而不是倒数第二个项目。*要跳过最后一个,只需将其更改为$counter == $count-2
即可。
*为什么?因为数组索引从0开始,但数组中的项计数从1开始。例如,如果一个数组有四个元素,则该数组的长度为4,并且这些元素的索引分别为0、1、2和3。倒数第二个元素位于索引2处。
查看array_pophttp://uk.php.net/array_pop
因此,基本上在进入循环之前,请致电array_pop($_POST)
。也就是说,你不应该真正修改超全局(IMHO),所以你可能会看到:
$postedData = $_POST;
array_pop($postedData);
foreach ($postedData as $key => $value) {
...
$counter应该从一开始吗?
$counter=1;
包含此函数:
function insert( )
{
$args = func_get_args();
$table = $args[0];
unset( $args[0] );
$return = true;
foreach( $args as $set )
{
$columns = implode( '`,`', array_keys( $set ) );
$values = implode( "','", array_values( $set ) );
$return =& query( "INSERT INTO {$table} (`{$columns}`) VALUES ('{$values}')" );
}
return $return;
}
然后在您的代码中使用:
$data = Array(
'key1' => $value1,
'key2' => $value2
);
insert('table', $data);
对于您的实际解决方案,您将使用:
$data = $_POST;
array_pop($data); //Removes the last element in the array
insert('table', $data);