【问题标题】:Update certain fields in a mysql table if an input value is equal to a value in the table如果输入值等于表中的值,则更新 mysql 表中的某些字段
【发布时间】:2015-02-11 19:27:07
【问题描述】:

我目前正在尝试为私人教练创建一个仪表板,他们可以在其中更新客户记录。我有一个 mySQL 数据库,我使用 PHP 作为脚本语言。

我想做的事:能够通过HTML输入框更新客户信息。 (我已经创建了)。第一个是用户名 - 它应该对应于 mySQL 数据库中的用户名。那么接下来三个输入框中的信息应该被插入到数据库中正确的字段中。

问题:我目前无法让 SQL 语句正常工作,因为无法识别客户端用户名。这是我目前收到的错误消息:

错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ') WHERE Client_username = JSmith' 附近使用正确的语法

JSMith 是数据库中的有效用户名。

以下是我尝试使用的 PHP:

//insert

$value1 = $_POST['height1'];
$value2 = $_POST['weight1'];
$value3 = $_POST['bodyfat1'];
$value4 = $_POST['username'];

        $sql = "UPDATE client SET Height='$value1', Weight='$value2', Body_fat='$value3') WHERE Client_username = $value4";

if (!mysqli_query($con,$sql))
  {
    die('Error: ' . mysqli_error($con));
  }

mysqli_close($con);

 ?>

我的连接等工作正常。

如果有人可以帮助我,那就太好了!

【问题讨论】:

  • SQL 告诉你出了什么问题。删除支架'$value3') $value4,如果它是一个似乎最有可能的字符串。 $_POST['username']
  • 删除Body_fat='$value3')中的两个括号和你的问题
  • ^ 我同意 ^ (u_mulder's) 只是删除这个。在 cmets 中回答。
  • 错误信息,噗。
  • 我们已经停止警告人们@EdGibbs,似乎他们无论如何都不听(或读)。

标签: php html mysql database


【解决方案1】:

这是交易。

第一个错误来自where 子句之前的括号:

$sql = "UPDATE client SET Height='$value1', Weight='$value2', Body_fat='$value3') WHERE...
                                                                                ^ there

删除它。

MySQL 告诉你:

...在 ') WHERE 附近使用正确的语法 ^

然后,作为字符串的“用户名”需要被这样对待,因此在 where 子句中用引号将 $value4 变量包装起来。

WHERE Client_username = '$value4'

但是,我需要指出您当前的代码对SQL injection 开放。使用mysqli with prepared statementsPDO with prepared statements它们更安全


洞察力:

确保您的表单包含与您的 POST 一起使用的名称属性,并且不包含拼写错误,并且字母大小写匹配。

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应该只在暂存阶段完成,而不是在生产阶段。

【讨论】:

    猜你喜欢
    • 2021-12-03
    • 2011-11-29
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多