4

PHP 新手,阅读 Robin Nixon 的 PHP、MySQL、Javascript 书籍。我在使用 PHP 脚本插入和删除数据的示例中遇到问题,特别是作者如何使用 $_POST。

该示例是一个非常简单的添加记录/删除具有多个输入的书籍记录。这是代码:

if (isset($_POST['delete']) && isset($_POST['isbn']))
{
    $isbn  = get_post('isbn');
    $query = "DELETE FROM classics WHERE isbn='$isbn'";

    if (!mysql_query($query, $db_server))   
    echo "DELETE failed: $query<br />" .
    mysql_error() . "<br /><br />";
}

if (isset($_POST['author']) &&
    isset($_POST['title']) &&
    isset($_POST['category']) &&
    isset($_POST['year']) &&
    isset($_POST['isbn']))
{
    $author   = get_post('author');
    $title    = get_post('title');
    $category = get_post('category');
    $year     = get_post('year');
    $isbn     = get_post('isbn');

    $query = "INSERT INTO classics VALUES" .
        "('$author', '$title', '$category', '$year', '$isbn')";

    if (!mysql_query($query, $db_server))
        echo "INSERT failed: $query<br />" .
        mysql_error() . "<br /><br />";
}

echo <<<_END
<form action="sqltest.php" method="post"><pre>
    Author <input type="text" name="author" />
    Title <input type="text" name="title" />
    Category <input type="text" name="category" />
    Year <input type="text" name="year" />
    ISBN <input type="text" name="isbn" />
    <input type="submit" value="ADD RECORD" />
    </pre></form>
_END;

$query = "SELECT * FROM classics";
$result = mysql_query($query);

if (!$result) die ("Database access failed: " . mysql_error());
$rows = mysql_num_rows($result);

for ($j = 0 ; $j < $rows ; ++$j)
{
    $row = mysql_fetch_row($result);
    echo <<<_END
<pre>
  Author $row[0]
   Title $row[1]
Category $row[2]
    Year $row[3]
    ISBN $row[4]
</pre>
<form action="sqltest.php" method="post">
<input type="hidden" name="delete" value="yes" />
<input type="hidden" name="isbn" value="$row[4]" />
<input type="submit" value="DELETE RECORD" /></form>
_END;
}

mysql_close($db_server);

function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}
?>

当您使用 if (isset($_POST['delete']) && isset($_POST['isbn'])) 引用 $_POST 中的元素时,其中 delete 和 isbn 被多次用作名称,$_POST 如何知道要删除哪个元素?我假设由于一次只能删除一条记录,因此数组中的元素将自动指向已设置的记录。但是, isset($_POST['isbn']) 的第二个条件如何知道要检查哪个“isbn”元素?&& 是否使 $_POST['isbn'] “继承”正确的行?

谢谢您的帮助!并对任何可能的词汇滥用表示歉意。还是习惯了一切。

4

2 回答 2

4

您的问题实际上是经过深思熟虑的。书中给出的例子对我来说似乎很草率。我假设在后面的章节中他将深入研究$_POST值中数组的使用。但无论如何,这里是整个脚本功能的关键:

for ($j = 0 ; $j < $rows ; ++$j)
{
    $row = mysql_fetch_row($result);
    echo <<<_END
<pre>
  Author $row[0]
   Title $row[1]
Category $row[2]
    Year $row[3]
    ISBN $row[4]
</pre>
<form action="sqltest.php" method="post">
<input type="hidden" name="delete" value="yes" />
<input type="hidden" name="isbn" value="$row[4]" />
<input type="submit" value="DELETE RECORD" /></form>
_END;
}

看到了<form action="sqltest.php" method="post">吗?看到关闭了</form>吗?请注意,每次for ($j = 0 ; $j < $rows ; ++$j)循环发生时都会渲染它们?每一行都有一个单独的表单元素。那是凌乱的代码,但它有效。当单击submit每个单独的列表时,包装表单会响应并解析嵌套在其中的变量。

就像我说的,草率的代码。但有效。这是因为如果您列出了 30 个 ISBN,该程序将输出 30 个独立包装的<form>物品。啊!严重的是,如果这本书以后没有以解决这种编码混乱的面孔的方式解决数组问题,那就找一本新书吧。

于 2013-01-27T06:04:32.670 回答
1

由于有多个表单,因此只提交一个表单的输入元素。

所以基本上,只接收一个包含相应值的sqltest.php数组和 ['isbn'] 一次。$_POST['delete']

您可以使用print_r($_POST)in来检查这一点sqltest.php

于 2013-01-27T06:06:46.597 回答