我是 php 和 mysql 的新手,所以我相信这很简单!
我想根据单击的按钮递增特定条目。我遇到的问题是我不确定如何告诉 mysql 通过 php 递增哪个条目。
我使用 while 循环来显示我的表,然后在每行的末尾添加一个名称 = $row[id] 值 = $row[likes] 的按钮。如果名称只是一个单词,那么它不会有问题,但我需要它根据它所在的行而有所不同。(我正在使用自动增量的行 id,我不显示它,但它存在)。
我.html:
$host="xxx";
$username="xxx";
$password="xxx";
$db_name="xxx";
$tbl_name="blog";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$result = mysql_query("SELECT * FROM $tbl_name ORDER BY id DESC");
echo "<table id='blog'>
<tr>
<th>Update</th>
<th>Likes</th>
</tr>";
while($row = mysql_fetch_array($result)) {
echo "<tr>";
echo "<td id='entry'>" . $row['entry'] . "</td>";
echo "<td id='like'>" . "<form action ='likes.php' method ='post'>" . "<input type='submit' name='$row[id]' value='$row[likes]' />" . "</form>" . "</td>";
echo "</tr>"; }
echo "</table>";
mysql_close($con);
?>
我.php:
<?php
$con = mysql_connect("xxx","xxx","xxx");
if (!$con) {
die('Could not connect: ' . mysql_error()); }
mysql_select_db("xxx", $con);
if(mysql_query("UPDATE blog SET likes = likes +1 WHERE id = '$_POST[$id]'")) {
header('location:blog.php'); }
else {
echo "Error: " . mysql_error(); }
mysql_close($con);
?>
我想做的只是将 html 文档中的"输入名称 = $row[id]"与 WHERE id = $_POST[id] 链接,以便它在单击按钮时增加类似计数。
提前感谢!!
在表单中使用隐藏的输入来告诉 PHP 端要递增哪个条目。
echo "<td id='like'><form action ='likes.php' method ='post'><input type='hidden' name='id' value='" . (int)$row['id'] . "' /><input type='submit' name='submit' value='" . (int)$row['likes'] . "' /></form></td>";
查询行应为:
if(mysql_query("UPDATE blog SET likes = likes +1 WHERE id = '" . (int)$_POST['id'] . "'")) {
请注意,我将 ID 转换为 (int)
,这会阻止查询中的 SQL 注入,并在输出时阻止 XSS。
对于数据传输是不可靠的,这是因为在某些情况下,并非所有浏览器实际上都将提交按钮作为 POST/GET 变量发送。
我注意到的另一件事是使用此语法$row[likes]
它应该是:
$row['likes']
如果你不包含引号,那么 PHP 首先将likes
视为常量,如果未定义,则回退为字符串。