Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql php通过填充的下拉菜单更新多个条目_Php_Mysql - Fatal编程技术网

mysql php通过填充的下拉菜单更新多个条目

mysql php通过填充的下拉菜单更新多个条目,php,mysql,Php,Mysql,我在试图通过php填充的下拉菜单更新数据库中的多个条目时遇到问题。以下是“我的网页”上的代码,该代码填充表格,显示当前数据库中的所有条目: $result = mysqli_query($con,"SELECT * FROM Submissions"); echo "<table border='1'> <tr> <th>First name</th> <th>Last name</th> <th>Email&

我在试图通过php填充的下拉菜单更新数据库中的多个条目时遇到问题。以下是“我的网页”上的代码,该代码填充表格,显示当前数据库中的所有条目:

$result = mysqli_query($con,"SELECT * FROM Submissions");

echo "<table border='1'>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Email</th>
<th>Title</th>
<th>Text</th>
<th>Public Post OK?</th>
<th>Date/Time Submitted</th>
<th>Approved?</th>
<th>Test Approved</th>
</tr>";

while($row = mysqli_fetch_array($result))

  {

  echo "<tr>";

  echo "<td>" . $row['fname'] . "</td>";

  echo "<td>" . $row['lname'] . "</td>";

  echo "<td>" . $row['email'] . "</td>";

  echo "<td>" . $row['title'] . "</td>";

  echo "<td>" . nl2br($row['text']) . "</td>";

  echo "<td>" . $row['publicpost'] . "</td>";

  echo "<td>" . $row['time'] . "</td>";

  echo "<td><select name=\"approved\"><option value=\"" . $row['approved'] . "\">" .                      $row['approved'] . "</option><option value=\"yes\">Yes</option><option value=\"no\">No     Again</option></select></td>";

  echo "<td>" . $row['approved'] . "</td>";

  echo "</tr>";

  }

echo "</table>";

?>

<br><br>

<form action="update.php" method="post">

<input type="submit" name="SubmitButton" value="Update" class="submit"         style="cursor:pointer;">

    </form>

    <?php

    mysqli_close($con);

?>
$result=mysqli_query($con,“从提交中选择*);
回声“
名字
姓
电子邮件
标题
正文
公共邮件可以吗?
提交日期/时间
经核准的?
测试通过
";
while($row=mysqli\u fetch\u数组($result))
{
回声“;
回显“$row['fname']”;
回显“$row['lname']”;
回显“$row['email']”;
回显“$row['title']”;
回显“.nl2br($row['text'])”;
回显“$row['publicpost']”;
回显“$row['time']”;
回显“$row['approved']”再次是否;
回显“$行[“已批准]”;
回声“;
}
回声“;
?>


这是“update.php”的php代码:

$approved=$\u POST['approved'];
mysqli_查询($con,“更新提交集已批准=$approved”);
$update\u query=“更新提交集已批准='$approved';
if(mysqli_查询($con,$update_查询)){
回显“更新”;}
否则{
回显“失败”;}
?>

目标是能够使用下拉菜单将字段“已批准”从“否”更新为“是”,反之亦然。相反,此查询所发生的情况是,它正在擦除“approved”字段中的数据,而不是更新它。我对php有点陌生,我对此进行了大量研究,但没有找到解决方案。非常感谢您的帮助

首先,让我们假设“approved”是一个TINYINT(1)之类的词

您选择的html应该更像这样。它将根据DB值自动填充

$selected = 'selected="selected"'; // pre-selection attribute
$isApproved = !!$row['approved']; // is this active? (approved is 1 or 0)
echo '<select name="approved">
        <option value="1" ' . ($isApproved ? $selected : '') . '>Yes</option>
        <option value="0" ' . (!$isApproved ? $selected : ''). '>No</option>
      </select>';
当我们谈到这个话题时,这将是一个为您的项目准备好陈述的好时机。这听起来可能很吓人,但它可以将您从SQL注入中解救出来

// Make the prepared statement
$query = mysqli_prepare("UPDATE Submissions SET approved = ?");
// Safely bind your params
mysqli_stmt_bind_param($query, "i", $approved);
// Run it
mysqli_stmt_execute($query);
// "close" the statement (hint: it's reusable for things like bulk updates, etc)
mysqli_stmt_close($query);

首先,已批准/未批准的选择框不在表单标签内。其次,您似乎没有在表单中传递任何标识符,您如何知道哪些行需要更新。您所描述的将是我对这段代码的期望。谢谢您的回复。不幸的是,这正在更改我的“while”表中的所有“approved”字段,而不是一个或两个。我当前的设置是否可能?如果我理解,您将希望执行类似“更新提交集已批准=?其中电子邮件=?”的操作。当您绑定时,您将调用mysqli_stmt_bind_param($query,“is”,$approved,$email);(is表示第一个问号为整数,第二个问号为字符串)
// Convert input to boolean answer, then int (for the query).
$approved = isset($_POST['approved']) ? (int)!!$_POST['approved'] : 0;
mysqli_query($con,"UPDATE Submissions SET approved = '$approved'");
// Make the prepared statement
$query = mysqli_prepare("UPDATE Submissions SET approved = ?");
// Safely bind your params
mysqli_stmt_bind_param($query, "i", $approved);
// Run it
mysqli_stmt_execute($query);
// "close" the statement (hint: it's reusable for things like bulk updates, etc)
mysqli_stmt_close($query);