Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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_Insert_Rows_Implode - Fatal编程技术网

Php 使用内爆插入多行

Php 使用内爆插入多行,php,insert,rows,implode,Php,Insert,Rows,Implode,我很难让我的代码正常工作。我掌握了基本概念,但无法使其发挥作用。我有一个包含多行的表单: <form action="multiscript.php" method="post" id="form"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td><input type="text" name="field_PK[]" id="field_PK

我很难让我的代码正常工作。我掌握了基本概念,但无法使其发挥作用。我有一个包含多行的表单:

<form action="multiscript.php" method="post" id="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><input type="text" name="field_PK[]" id="field_PK" /></td>
<td><input type="text" name="sql_fk[]" id="sql_fk" /></td>
<td><input type="text" name="account_fk[]" id="account_fk" /></td>
<td><input type="text" name="field_code[]" id="field_code" /></td>
<td><input type="text" name="field_name[]" id="field_name" /></td>
<td><input type="text" name="field_px[]" id="field_px" /></td>
<td><input type="text" name="field_order[]" id="field_order" /></td>
</tr>
<tr>
<td><input type="text" name="field_PK[]" id="field_PK" /></td>
<td><input type="text" name="sql_fk[]" id="sql_fk" /></td>
<td><input type="text" name="account_fk[]" id="account_fk" /></td>
<td><input type="text" name="field_code[]" id="field_code" /></td>
<td><input type="text" name="field_name[]" id="field_name" /></td>
<td><input type="text" name="field_px[]" id="field_px" /></td>
<td><input type="text" name="field_order[]" id="field_order" /></td>
</tr>
</table>
<input type="submit" name="button" id="button" value="Submit" />
</form>
请有人检查一下我的表单和脚本,告诉我我做错了什么,为什么没有使用内爆方法将多行插入我的数据库。谢谢。

试试看

foreach($\u发布为$index=>$row)

反对

foreach($\u发布为$value)

当然,不要忘记关于SQL注入攻击和类似攻击的常见故事

编辑:

看到所有字段都是文本类型,不管它们是否为空,都将发送它们。它们还共享相同的索引,因此您可以以更优雅的方式键入:

foreach($_POST['field_pk'] as $index => $values)
{
    $values[] =  "(" . $_POST[$index]['field_PK'] . "," . $_POST[$index]['sql_fk'] . "," . $_POST[$index]['account_fk']. "," . $_POST[$index]['field_code']. "," . $_POST[$index]['field_name']. "," . $_POST[$index]['field_px']. "," . $_POST[$index]['field_order'].")";

}
我必须承认,没有正确阅读导致我给出了错误的答案。同样的SQL注入预防规则也适用,请确保您的输入已过滤

试试看

foreach($\u发布为$index=>$row)

反对

foreach($\u发布为$value)

当然,不要忘记关于SQL注入攻击和类似攻击的常见故事

编辑:

看到所有字段都是文本类型,不管它们是否为空,都将发送它们。它们还共享相同的索引,因此您可以以更优雅的方式键入:

foreach($_POST['field_pk'] as $index => $values)
{
    $values[] =  "(" . $_POST[$index]['field_PK'] . "," . $_POST[$index]['sql_fk'] . "," . $_POST[$index]['account_fk']. "," . $_POST[$index]['field_code']. "," . $_POST[$index]['field_name']. "," . $_POST[$index]['field_px']. "," . $_POST[$index]['field_order'].")";

}

我必须承认,没有正确阅读导致我给出了错误的答案。同样的SQL注入预防规则也适用,请确保您的输入已过滤

您不想迭代所有POST变量。相反,您希望迭代$\u POST[“field\u PK”]数组。

您不希望迭代所有POST变量。相反,您希望迭代$\u POST[“field\u PK”]数组。

您的
$\u POST
超全局实际上如下所示:

<?php 
$values = array();?>
<?php
foreach( $_POST as $row ) { 
$values[] =  "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
if( !empty($values) ) {
$query = "INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES ". implode(',',$values);

mysql_query($query);
}
?>
Array
(
    [field_PK] => Array
        (
            [0] => value1
            [1] => value2
        )
    [sql_fk] => ...
    [account_fk] => ...
    [field_code] => ...
    [field_name] => ...
    [field_px] => ...
    [field_order] => ...
    [button] => Submit
)
$transposed = transpose( $_POST );

foreach( $transposed as $index => $row ) { 
    $values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
当您执行
foreach($\u POST as$row)
时,您是在每个字段中循环,而不是像您预期的那样在每行字段中循环。因此,您得到的大部分是空白(我猜您提交了一个空白表单来测试它),然后是Submit中的“S”

您可以按自己的方式执行,但首先需要转换
$\u POST
值。(他称之为“对角翻转”,但这是一种典型的换位)

使用链接答案中的函数,可以执行以下操作:

<?php 
$values = array();?>
<?php
foreach( $_POST as $row ) { 
$values[] =  "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
if( !empty($values) ) {
$query = "INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES ". implode(',',$values);

mysql_query($query);
}
?>
Array
(
    [field_PK] => Array
        (
            [0] => value1
            [1] => value2
        )
    [sql_fk] => ...
    [account_fk] => ...
    [field_code] => ...
    [field_name] => ...
    [field_px] => ...
    [field_order] => ...
    [button] => Submit
)
$transposed = transpose( $_POST );

foreach( $transposed as $index => $row ) { 
    $values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}

您的
$\u POST
superglobal实际上如下所示:

<?php 
$values = array();?>
<?php
foreach( $_POST as $row ) { 
$values[] =  "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
if( !empty($values) ) {
$query = "INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES ". implode(',',$values);

mysql_query($query);
}
?>
Array
(
    [field_PK] => Array
        (
            [0] => value1
            [1] => value2
        )
    [sql_fk] => ...
    [account_fk] => ...
    [field_code] => ...
    [field_name] => ...
    [field_px] => ...
    [field_order] => ...
    [button] => Submit
)
$transposed = transpose( $_POST );

foreach( $transposed as $index => $row ) { 
    $values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
当您执行
foreach($\u POST as$row)
时,您是在每个字段中循环,而不是像您预期的那样在每行字段中循环。因此,您得到的大部分是空白(我猜您提交了一个空白表单来测试它),然后是Submit中的“S”

您可以按自己的方式执行,但首先需要转换
$\u POST
值。(他称之为“对角翻转”,但这是一种典型的换位)

使用链接答案中的函数,可以执行以下操作:

<?php 
$values = array();?>
<?php
foreach( $_POST as $row ) { 
$values[] =  "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}
if( !empty($values) ) {
$query = "INSERT INTO `Table_fields` (field_PK, sql_fk, account_fk, field_code, field_name, field_px, field_order) VALUES ". implode(',',$values);

mysql_query($query);
}
?>
Array
(
    [field_PK] => Array
        (
            [0] => value1
            [1] => value2
        )
    [sql_fk] => ...
    [account_fk] => ...
    [field_code] => ...
    [field_name] => ...
    [field_px] => ...
    [field_order] => ...
    [button] => Submit
)
$transposed = transpose( $_POST );

foreach( $transposed as $index => $row ) { 
    $values[] = "(" . $row['field_PK'] . "," . $row['sql_fk'] . "," . $row['account_fk']. "," . $row ['field_code']. "," . $row['field_name']. "," . $row['field_px']. "," . $row['field_order'].")";
}

首先,我要感谢您的回复。我试过你的建议,但仍然不起作用。我的代码现在看起来是这样的:我尝试了上面的方法,但我不确定我是否做得正确?当我打印查询时,我仍然得到:INSERT INTO
Table_fields
(field_PK,sql_fk,account_fk,field_code,field_name,field_px,field_order)值(,,,,,,,,,,)。我没有提交空白表单,当我打印$Post数组时,它有数据。这个答案不正确
$\u POST
使用每个字段名的多个索引数组值进行结构化
$\u POST[$index][$fieldName]
不会返回任何内容。您需要使用
$\u POST[$fieldName][$index]
,但基于您的
foreach
循环,这仍然是一种糟糕的形式。那么,有人能告诉我使用内爆从POST表单插入多行的“正确”形式是什么吗。我的代码就在上面,如果您按照它应该看起来的方式重新发布我的整个代码,这可能是最有用的,正确的代码。再次感谢。@user982853我在回答中给了您一个有效的解决方案,并用您的逻辑解释了这个问题。这就是SO的工作原理。教一个人钓鱼和给一个人一条鱼,以及其他类似的聪明寓言……让我先说声谢谢你的回应。我试过你的建议,但仍然不起作用。我的代码现在看起来是这样的:我尝试了上面的方法,但我不确定我是否做得正确?当我打印查询时,我仍然得到:INSERT INTO
Table_fields
(field_PK,sql_fk,account_fk,field_code,field_name,field_px,field_order)值(,,,,,,,,,,)。我没有提交空白表单,当我打印$Post数组时,它有数据。这个答案不正确
$\u POST
使用每个字段名的多个索引数组值进行结构化
$\u POST[$index][$fieldName]
不会返回任何内容。您需要使用
$\u POST[$fieldName][$index]
,但基于您的
foreach
循环,这仍然是一种糟糕的形式。那么,有人能告诉我使用内爆从POST表单插入多行的“正确”形式是什么吗。我的代码就在上面,如果您按照它应该看起来的方式重新发布我的整个代码,这可能是最有用的,正确的代码。再次感谢。@user982853我在回答中给了您一个有效的解决方案,并用您的逻辑解释了这个问题。这就是SO的工作原理。教一个人钓鱼和给一个人一条鱼,以及其他类似的聪明寓言…谢谢你的回答。我添加了字段_PK,但仍然得到相同的错误。我的脚本现在是这样的:谢谢你的回复。我添加了字段_PK,但仍然得到相同的错误。我的脚本现在看起来是这样的:我剪切粘贴了函数代码并修改了代码,现在它告诉我-警告:array_map()[function.array map]:Argument#9应该是/nfs/c06/h04/mnt/95658/domains/bc.wf-realty.com/html/contacts/multiscript.php第5行中的数组警告:为foreach()提供的参数无效in/nfs/c06/h04/mnt/95658/doma