【问题标题】:Unable to get simple PHP form to add/update to MySQL table无法获取简单的 PHP 表单来添加/更新到 MySQL 表
【发布时间】:2018-06-10 17:00:25
【问题描述】:

我有一个三列的 MySQL 表;用户、产品、地址。我试图让我的表单向表中添加新的数据行更新预先存在的行。我的更新条件是如果用户和产品都已经存在,只需更改地址。但如果既不存在(用户和产品),或者只是用户,则追加新的用户、产品和地址信息。

表单使用客户 ID、产品的下拉框和新地址的文本框,但是我的 SQL 更新命令似乎使页面失败,我找不到错误...这是我的尝试MySQL 代码:

已编辑测试代码 - 仍然无法正常工作

mysqli_select_db("wp_newaddress", $con);

if(isset($_POST['submit'])) {
$id = $_POST['$userid'];
$product = $_POST['sku'];
$address = $_POST['address'];

$sql = "UPDATE wp_newaddress SET address='address' WHERE user='$userid' AND product='sku'";

echo "<p><h5>Change address:</h5>";

$loop = new WP_Query( $args );
echo '<br><select name="sku">';
    echo '<option>-- Select product--</option>';
while ( $loop->have_posts() ) : $loop->the_post();
  global $product;
    echo '<option value=' . $product->get_sku() . '>' . $product->get_sku() . ' </option>';
  endwhile;
echo '</select>';
echo '<br><input type="text" value="Insert new address here" id="address" size="40" />';
echo '<br><button type="submit" name="submit">Change address</button>';
$retval = mysqli_query( $sql, $con );
if(! $retval )
{
  die('Could not update data: ' . mysqli_error());
}
echo "Updated address successfully\n";

【问题讨论】:

  • 您正在使用mysql 以及mysqli?请注意 mysql 已弃用,您应该使用 mysqliPDO
  • @btx 我已经编辑了我的问题 - 仅使用 mysqli。我更改了我的代码,但仍然无法正常工作:(
  • 将字符串值替换到查询中会使您的代码很容易受到 SQL 注入攻击。请阅读它们,然后使用参数化查询重写您的代码。
  • 没错,这是非常危险的代码。例如。如果我输入为用户 ID:5'; DELETE FROM wp_newaddress;,它将删除您的整个表。始终使用mysqli_stmt_bind_param 绑定任何参数。如果您尝试使用面向对象的样式,您可能还会获得更多概览;-)
  • @btx 谢谢你让我知道......在 MySQL 还是新手,我在努力学习!

标签: php mysql database mysqli


【解决方案1】:

mysqli_query 的用法:mysqli_query(connection,query,resultmode);。见documentation

你必须在$retval = mysqli_query( $sql, $con );中切换$sql和$con
在我看来,您还必须将 $sql 定义为字符串。

$sql = "UPDATE wp_newaddress SET address='address' WHERE user='$userid' AND product='sku'";

【讨论】:

  • @Zoe 如果 userid 或 product 尚未在表中,UPDATE sql 命令是否也可以添加新行?谢谢!
  • @NicholasRavanelli 我不是回答者,我只是编辑了它。 Btx 写了答案,你应该 ping 他们。 :)
  • 对不起! @btx 如果用户标识或产品尚未在表中,则 UPDATE sql 命令是否也可以添加新行?谢谢!
  • @btx 我已经用我正在使用的代码更新了我的问题,但我的页面仍然无法正常工作 - 也就是说它不会将查询提交到表(并且我与表的连接没问题,因为我可以在同一页面上看到数据库中的另一个表)。
  • 您可能错过了$"UPDATE wp_newaddress SET address='address' WHERE user='$userid'。但绝对可以看到我在 SQL 注入上面的评论。您应该使用 mysqli_stmt_bind_param 在查询中绑定两个变量
【解决方案2】:
$sql = mysqli_query("UPDATE wp_newaddress SET address='address' WHERE user='$userid' AND product='sku'");

此代码执行查询。

对于成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,它将返回一个 mysqli_result 对象。对于其他成功的查询,它将返回 TRUE。失败时为 FALSE

$sql 包含上述可能的返回值。

因此,当您尝试在该行中第二次执行查询时

$retval = mysqli_query( $sql, $con );

执行的不是sql语句,而是返回值。

例如: 如果第一个mysqli_query() 的返回为 FALSE, 然后你的第二个mysqli_query('FALSE', $con)

所以要纠正它,你需要这样做

$sql = "UPDATE wp_newaddress SET address='$address' WHERE user='$userid' AND product='sku'";

【讨论】:

    猜你喜欢
    • 2011-10-26
    • 2016-12-16
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多