【问题标题】:Update MySQL using HTML Form使用 HTML 表单更新 MySQL
【发布时间】:2016-11-05 18:58:51
【问题描述】:

我正在尝试创建一个允许您使用 php 更新数据库表的表单。 我对 PHP 有点陌生,如果我在代码中犯了一个愚蠢的错误,请见谅。

这是我的edit.php代码:

<html>
<head>
</head>
<body>

<?php

$con=mysqli_connect("localhost","root","root","test");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

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

?>


<form method="post" action="<?php $_PHP_SELF ?>">
<table width="400" border="0" cellspacing="1" cellpadding="2">
<tr>

<?php 

while($row = mysqli_fetch_array($result))
            {

$name = $row['name'];
$email = $row['email'];
$rank = $row['rank'];
$birth = $row['birth'];
$joined = $row['joined'];
$steamid = $row['steamid'];
?>


<td width="100"></td>
<td><?=$name?></td>
</tr>
<tr>
<td width="100">Email</td>
<td><input name="emailid" type="text" value="<?=$email?>"></td>
</tr>
<tr>
<td width="100">Rank</td>
<td><input name="rankid" type="text" value="<?=$rank?>"></td>
</tr>
<tr>
<td width="100">Birth</td>
<td><input name="birthid" type="text" value="<?=$birth?>"></td>
</tr>
<tr>
<td width="100">Joined</td>
<td><input name="joinedid" type="text" value="<?=$joined?>"></td>
</tr>
<tr>
<td width="100">Steamid</td>
<td><input name="steamidid" type="text" value="<?=$steamid?>"></td>
</tr>
<?php } ?>
<tr>
<td width="100"> </td>
<td> </td>
</tr>
<tr>
<td width="100"> </td>
<td>
<input name="update" type="submit" id="update" value="Update">
</td>
</tr>
</table>
</form>



<?php

if(isset($_POST['update']))
{

$name = $row['nameid'];
$email = $row['emailid'];
$rank = $row['rankid'];
$birth = $row['birthid'];
$joined = $row['joinedid'];
$steamid = $row['steamidid'];

$update = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';");

$retval = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';");
if (!$update) {
    echo "Could not update data: " . mysqli_error($con);
}
echo "Updated data successfully\n";

}
mysqli_close($con);

?>
</body>
</html>

它显示了表格和信息,但更新不起作用。

Updated data successfully

我已经检查了数据库,但它没有更新任何内容。

【问题讨论】:

  • “已成功更新数据”消息不是有条件的,因此无论何时提交表单都会打印。将其包裹在“else”中。
  • 现在看,你错误地更新了数据。
  • 我已经更新了我的答案。

标签: php html mysql


【解决方案1】:

亲爱的,我认为您根据 Name 更改记录,因为您可以在 where 子句中使用 $name,并且您还可以更改 Name 而不是真的 where 子句,这样您的查询成功执行,但不会影响任何行。

您想获得可编辑的记录,这是唯一的 id 基础更新行,它将毫无疑问地工作。

【讨论】:

    【解决方案2】:

    尝试使用 PHP PDO 数据库访问函数,您的代码现在很容易受到 SQL 注入的攻击! PDO 还将使调试和使用数据库变得更加容易。

    我认为您在 $_POST 中对“更新”的检查不起作用,因为更新不是表单内的字段而是提交按钮本身,请尝试检查其中一个字段。

    【讨论】:

      【解决方案3】:

      信息:

      使用mysqli_error(),您需要写下您希望哪个连接出错,如下所示:

      mysqli_error($con);
      

      对于mysqli_query(),您需要提供两个参数,connectionquery,如下所示:

      $update = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';");
      

      如何调试:

      如果您想检查 UPDATE 查询是否返回任何错误,您可以执行以下操作:

      if (!$update) {
          echo "Could not update data: " . mysqli_error($con);
      }
      

      您可以尝试使用以下方式调试您的查询:

      $sql = "UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';";
      echo $sql; // this output write in your phpMyadmin to check if there are any errors.
      $update = mysqli_query($con, $sql);
      

      我们遇到的其他问题:

      1.我认为你的代码中也应该有else,例如:

      if (!$update) {
          echo "Could not update data: " . mysqli_error($con);
      } else {
          echo "Updated data successfully\n";
      }
      

      2. 您没有从$_POST 获取数据,应该是这样的:

      $name = $_POST['nameid']; // not $row['nameid']
      $email = $_POST['emailid'];
      $rank = $_POST['rankid'];
      $birth = $_POST['birthid'];
      $joined = $_POST['joinedid'];
      $steamid = $_POST['steamidid'];
      

      更多关于使用的函数:

      PHP: mysqli::$error

      PHP: mysqli::query

      在你的情况下是程序风格

      【讨论】:

      • 谢谢,但它仍然不能完全工作。我已经更新了代码。
      • 它在你的数据库中更新了吗?
      • 不,它没有更新数据库中的任何内容
      • 检查我答案的最后一部分,尝试将echo 的输出写入您的phpmyadmin 以检查是否有任何错误。
      • 你为什么要调用两次更新$update$retval
      猜你喜欢
      • 1970-01-01
      • 2014-01-30
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2014-01-15
      • 1970-01-01
      相关资源
      最近更新 更多