您好我正在使用foreach将多位作者插入我的数据库中。
这是foreach:
foreach ($_POST["authors"] as $author)
{
$sqlAuthor = "INSERT INTO book_author (book_ISBN, author_ID)
VALUES('$isbn','$author')";
mysql_query($sqlAuthor);
}
我从我的页面中获取了select multiple
的作者,我创建了一个函数,以便在作者可用的select multiple
中显示。
代码正在生成我希望它在我的数据库页面中生成的内容(所有作者的名字)
以下是multiple()
功能:
<?php include ("includes/connections.php");
function multiple($intIdField, $strfNameField, $strlNameField, $strTableName, $strOrderField, $strNameOrdinal, $strMethod="asc") {
echo "<select multiple=\"multiple\" name=\"$strNameOrdinal\[\]\">\n";
$strQuery = "select $intIdField, $strfNameField, $strlNameField
from $strTableName
order by $strOrderField $strMethod";
$rsrcResult = mysql_query($strQuery);
while($arrayRow = mysql_fetch_assoc($rsrcResult)) {
$strA = $arrayRow["$intIdField"];
$strB = $arrayRow["$strlNameField"] . " " . $arrayRow["$strfNameField"];
echo "<option value=\"$strA \">$strB</option>\n";
}
echo "</select>";
}
?>
由于某种原因,它会引发以下错误:
Notice: Undefined index: authors in C:\xampp\htdocs\ex\addBook.php on line 63
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\ex\addBook.php on line 63
我认为它告诉我它找不到authors
数组,但我发现它很奇怪
这里的html里面的PHP代码调用multiple()
函数:
<?php multiple("author_ID", "author_firstname", "author_lastname", "author", "author_lastname", "authors"); ?>
任何人都知道我的代码有什么问题吗?
答案 0 :(得分:2)
更改为
echo "<select multiple=\"multiple\" name=\"{$strNameOrdinal}[]\">\n";
并在使用它之前检查它是否已设置。
编辑:与手头的问题无关,但$strA
后有一个额外的空格,如果不是故意的话,请更改为。
echo "<option value=\"$strA\">$strB</option>\n";
答案 1 :(得分:1)
每次使用foreach时,都将它嵌入if:
if (count($_POST["authors"])) {
foreach ($_POST["authors"] as $author) {
...
}
}
所以如果你在数组中有0个元素,或者它不是数组(字符串,null,其他任何东西)你将不会输入if,并且不会在foreach的错误参数上得到错误
答案 2 :(得分:0)
由于$_POST["authors"]
未定义或没有作者,因此引发了通知和错误。
只需使用if(isset($_POST["authors"])) {
确保数据已提交。
答案 3 :(得分:0)
改变这个:
foreach ($_POST["authors"] as $author)
{
到此:
foreach ((array)$_POST["authors"] as $author)
{
使其为空安全。 此外,我无法看到“作者”被发送到 addBook.php 的位置以提出建议..