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、とても奇妙だと思います

multiple()関数を呼び出すためのhtml内のphpコードは次のとおりです。

<?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 (count($_POST["authors"])) {
    foreach ($_POST["authors"] as $author)  {
       ...
    }
}

したがって、配列に0個の要素がある場合、または配列(文字列、null、その他)でない場合は、ifを入力せず、foreachの間違ったパラメーターでエラーが発生しません。

于 2012-06-07T19:05:29.057 に答える
0

これを変える:

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

これに:

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

それを空に安全にするために。また、提案を行うために「作成者」がaddBook.phpに送信される場所がわかりません。

于 2012-06-07T19:14:00.753 に答える
0

$_POST["authors"]定義されていないか、作成者がいないため、通知とエラーがスローされます。

if(isset($_POST["authors"])) {データが送信されたことを確認するために使用するだけです。

于 2012-06-07T19:06:44.207 に答える