这就是我想要的:
foreach($_POST['something'] as $something){
foreach($_POST['example'] as $example){
$query = mysql_query("INSERT INTO table (row, row2) VALUES ('{$something}','{$example}')");
}
}
$_POST['something']
和$_POST['example']
是输入
name="something[]"
和name="example[]"
。
问题:
通过这种方式,我将数据两次发送到数据库。所以我需要一个解决方案,我可以循环使用2个数组而不需要两次数据。
修改
答案 0 :(得分:11)
你的意思是:
foreach($_POST['something'] as $key => $something) {
$example = $_POST['example'][$key];
$query = mysql_query("INSERT INTO table (row, row2) VALUES ('{$something}','{$example}')");
}
答案 1 :(得分:2)
多个阵列的解决方案
尝试 -
1)
<?php
$ZZ = array('a', 'b', 'c', 'd');
$KK = array('1', '2', '3', '4');
foreach($ZZ as $index => $value) {
echo $ZZ[$index].$KK[$index];
echo "<br/>";
}
?>
或2)
<?php
$ZZ = array('a', 'b', 'c', 'd');
$KK = array('1', '2', '3', '4');
for ($index = 0 ; $index < count($ZZ); $index ++) {
echo $ZZ[$index] . $KK[$index];
echo "<br/>";
}
?>
答案 2 :(得分:1)
您的解决方案似乎没有两次发送数据。除非由于发出查询而显示具有相同值的记录。这可能意味着您应该在构建查询之前处理数据。
一种解决方案可能是:
$sql = array();
foreach($_POST['something'] as $something){
foreach($_POST['example'] as $example){
$sql[] = "INSERT INTO table (row, row2) VALUES ('{$something}','{$example}')";
}
}
foreach($sql as $query){
mysql_query($query);
}
答案 3 :(得分:1)
$cnt = count($_POST['something']);
$cnt2 = count($_POST['example']);
if ($cnt > 0 && $cnt == $cnt2) {
$insertArr = array();
for ($i=0; $i<$cnt; $i++) {
$insertArr[] = "('" . mysql_real_escape_string($_POST['something'][$i]) . "', '" . mysql_real_escape_string($_POST['example'][$i]) . "')";
}
$query = "INSERT INTO table (column, column2) VALUES " . implode(", ", $insertArr);
mysql_query($query) or trigger_error("Insert failed: " . mysql_error());
}
这是另一种方法。这个使用扩展插入,因此应该更高效和更快,并出于安全原因使用mysql_real_escape_string。计数检查只是确保两个字段具有相同的计数,如果没有,那么我认为这是一个不幸事件。如果允许它们具有不同数量的字段,则只需使用isset()函数进行检查以确保它们包含值。
修改强>
当然,这是假设您不希望“某事”迭代所有“示例”值并分配给每个值。如果你想要那么好,这有点变化。
如果没有元素不需要更新,则添加插入数组测试。谢谢Gumbo。
答案 4 :(得分:1)
我认为最好的方法是作为构建查询的单个循环。即使您的数组长度不同,这也应该有效:
$size1 = count($_POST['something']);
$size2 = count($_POST['example']);
if( $size1 >= $size2 ) {
$size = $size1;
} else {
$size = $size2;
}
$sql = "INSERT INTO table (row, row2) VALUES";
$values = array();
for( $i=0; $i<$size; $i++ ) {
$values[] = "('" . mysql_real_escape_string($_POST['something'][$i]) . "','" . mysql_real_escape_string($_POST['example'][$i]) . "')";
}
$sql .= implode(",", $values);
mysql_query($sql);
也更安全,因为它逃脱了你的输入。使用PDO占位符也会更容易。
答案 5 :(得分:1)
虽然您已经选择了答案,但如果POST值不是数组,请不要忘记这段脚本可能会失败。你可以用一小段代码来解决这个问题:
$something = is_array($_POST['something']) ? $_POST['something'] : array();
$example = is_array($_POST['example']) ? $_POST['example'] : array();
/* Get all the keys from both arrays
* If they don't share the keys, none will be lost
*/
$keys = array_merge(array_keys($something),array_keys($example));
$keys = array_unique();
if (count($keys)) {
$sql = 'INSERT INTO table (row, row2) VALUES ';
$values = array();
foreach ($keys as $key) {
// Single quotes for PHP, we are not expanding variables
// If the element cannot be converted into a string, don't show the error on screen
$values[] = '("' . @mysql_real_escape_string($something[$key]) . '","' . @mysql_real_escape_string($example[$key]) . '")';
}
$sql .= implode(',', $values);
mysql_query($sql);
}
答案 6 :(得分:0)
具有多个数组的Foreach循环:
foreach($_POST['quantity'] as $key=>$quantity)
{
$product_no=$_POST['product_id'][$key];
echo $product_no;
echo $quantity;
}