1

嗨,我正在使用 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"); ?>

有人知道我的代码有什么问题吗?

4

4 回答 4

2

改成

echo "<select multiple=\"multiple\" name=\"{$strNameOrdinal}[]\">\n";

并在使用它之前检查它是否像其他人建议的那样设置。

编辑:与手头的问题无关,但您在 之后有一个额外的空间$strA,如果不是故意的,请更改为。

echo "<option value=\"$strA\">$strB</option>\n";
于 2012-06-07T19:08:40.767 回答
1

每次使用 foreach 时都会将其嵌套在 if 中:

if (count($_POST["authors"])) {
    foreach ($_POST["authors"] as $author)  {
       ...
    }
}

因此,如果数组中有 0 个元素,或者它不是数组(字符串、null、其他任何内容),您将不会输入 if,也不会在 foreach 的错误参数上出现错误

于 2012-06-07T19:05:29.057 回答
0

$_POST["authors"]由于未定义或没有作者,它会抛出通知和错误。

只需使用if(isset($_POST["authors"])) {以确保数据已提交。

于 2012-06-07T19:06:44.207 回答
0

改变这个:

foreach ($_POST["authors"] as $author) 
{

对此:

foreach ((array)$_POST["authors"] as $author) 
{

使其空安全。我也看不到“作者”从哪里发送到addBook.php以提出建议..

于 2012-06-07T19:14:00.753 回答