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'])&amp;&amp; isset($ _ POST ['isbn']))引用$ _POST中的元素时,其中delete和isbn用作名称多个时间,$ _POST如何知道要引用哪个元素删除?我假设由于您一次只能删除一条记录,因此数组中的元素将自动指向已设置的记录。但是,isset的第二个条件($ _ POST ['isbn'])如何知道要检查哪个“isbn”元素?和&amp;&amp;让$ _POST ['isbn']“继承”正确的行?
感谢您的帮助!并且对任何可能滥用词汇表示道歉。仍然习惯于一切。
答案 0 :(得分: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
时,包装表单会响应&amp;解析嵌套在其中的变量。
<form>
项目。 Uggh!说真的,如果这本书后来没有解决数组的问题,那么解决这个问题的方法就会找到一本新书。
答案 1 :(得分:1)
由于有多个表单,因此只提交一个表单的输入元素。
基本上,sqltest.php
只收到一个$_POST
数组['delete']
和['isbn']只有一次相应的值。
您可以使用print_r($_POST)
中的sqltest.php
来查看此内容。