【问题标题】:Updating a field in mysql with submit button使用提交按钮更新mysql中的字段
【发布时间】:2014-02-18 21:04:19
【问题描述】:

或者正如标题所述,我可能走错了路。我在 phpmyadmin 的表中创建了一些字段。我有一个“post_id”作为唯一标识符。然后是标题为“first_name”、“last_initial”、“email”、“feedback”和“approved”的字段或(行)。

用于网站上的推荐页面。我已经让一切正常工作,然后意识到我需要为网站所有者创建一种在显示 cmets 之前批准它们的方法。

我是 php 和 mysql 的新手,所以对于这里的很多人来说这可能非常简单。当我在表单上方的推荐页面上连接到数据库以输入推荐时,我正在调用所有值为“1”的行,因为这是“已批准”的 cmets。默认情况下,当有人在表单中输入信息以提交推荐时,该字段的值为“0”。现在在后端,我连接到数据库并在字段中显示所有值为“0”的行。

我使用 html 表格来显示字段,表格的最后一列有一个复选框。理想情况下,网站所有者会单击他们想要批准的 cmets 旁边的复选框,然后单击提交按钮,只有选中的复选框才会被批准。

我遇到的问题是,当单击提交并连接执行此操作的 php 代码时,我使用 UPDATE 函数将“已批准”字段中的值从 0 更改为 1。

我遇到的问题是它正在批准每条评论,因为我没有以某种方式使用 WHERE(函数、语句或任何它被调用的东西)来限定它。而且由于此页面是动态的,并且将显示不同的 cmets为了获得批准,据我所知,确实没有唯一标识符。

我希望我对这个主题的无知没有让您感到非常困惑,您将能够帮助我。

我这里正在连接数据库......

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM feedback WHERE approved = 0");    

echo '<h1>Submitted Comments</h1>';    
echo '<form action="approve_comment.php" method="post">';    
echo '<table>';       
echo '<tr>';
echo '<th>First Name</th>';
echo '<th>Last</th>';
echo '<th>Email</th>';
echo '<th>Comment</th>';
echo '<th>Check</th>';
echo '</tr>';

while($row = mysqli_fetch_array($result))
{    
    echo '<tr style="border:1px solid #000000; padding:10px;">';
    echo '<td style="border:1px solid #000000; padding:10px; width:100px;">' . $row["first_name"].'</td>';
    echo '<td style="border:1px solid #000000; padding:10px; width:50px;">' . $row["last_initial"] . '</td>';
    echo '<td style="width:200px; padding:10px;">' . $row["email"] . '</td>';
    echo '<td style="padding:10px; width:400px;">' . $row["feedback"] . '</td>';
    echo '<td>' . '<input type="hidden" name="check" value="0"/>'.'<input type="checkbox" name="check" value="1"/>' . '</td>';
    echo '</tr>';         
}

echo '</table>';
echo '<input style="float:right;" type="submit" value="Approve Selected" />';
echo '</form>';

mysqli_close($con);
?>    

该代码显示他们将批准 cmets 的后端元素。动作如下: 正在这里连接数据库...

// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}  

mysqli_query($con,"UPDATE feedback SET approved=1 WHERE approved='0'");  

mysqli_close($con);
header("Location: http://redirecting to the back end page here");

?>

除了我的 WHERE 部分外,一切正常。我不知道该放什么,或者我是否正确地从数据库中调用信息来完成这项工作。

您的任何意见将不胜感激!谢谢!

【问题讨论】:

  • 请重新格式化您的问题并将“文本”与实际“代码”分开。哦,没关系。别人“为你”做的。你可以感谢“法比奥”。

标签: php mysql


【解决方案1】:

使用您的数据库记录的 ID:

表格中的第一个:

echo "<input type=\"hidden\" name=\"post_id\" value=\"$row[post_id]\"/>";

然后在处理程序中:

$post_id = mysqli_real_escape_string($con, $_POST["post_id"]);
mysqli_query($con,"UPDATE feedback SET approved=1 WHERE post_id='$post_id'");  

已编辑以添加强制性 SQL 注入保护!

【讨论】:

  • 这个方法WHERE post_id=$_POST[post_id]为SQL注入留下了空间。然而,理论上你是正确的。
  • 感谢您的快速响应!对此,我真的非常感激!我将进行更改并最终完成! :)
  • @miken32 我实际上按照建议实现了它并且它有效。但是,在进一步测试后,如果检查了多个评论以供批准,则它仅批准检查的最后一条评论。我是新来的,不知道如何在本节中发布代码。地狱,有人不得不修复我上面的帖子。但无论如何,它现在已经修复,我打算分享我在这里使用的代码来帮助其他有同样情况的人。如果有人能告诉我如何做到这一点,我愿意分享。
  • 如果我的回答没有帮助,您可以发布自己的答案并将自己的答案标记为已接受。我没有仔细阅读您的问题,没有注意到您想一次提交多个项目。编辑:我看到您将我的标记为已接受。您仍然可以发布后续答案,或编辑您的问题。但是你不能在 cmets 中发布代码块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 2022-11-25
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多