【问题标题】:can't update mysql database using php无法使用 php 更新 mysql 数据库
【发布时间】:2013-05-10 22:11:14
【问题描述】:

我正在尝试更新我的客户 mysql 表上的记录。但是我收到以下错误:

注意:未定义索引:E:\EasyPHP-12.1\www\Register1.php 中的用户名 在第 313 行

注意:未定义变量:db_password in E:\EasyPHP-12.1\www\Register1.php 315行错误更新记录

我看不出我的代码有什么问题。并且一直在看它几个小时,但没有运气。

<div class="footer">
  <img src="images/gardening5.jpg" alt="Image">
  <div>
    <h1>Tips of the Week</h1>
    <form method= "get">
      <form method="get">
      <p>Username:
        <input name="username" type="text">
        </p>
      </form>
      <p>
      <form method="get">
        <p>Password:
          <input name="password" type="password">
        </p>
        <p>First Name:
          <input name="first name" type="first name">
        </p>
        <p>Last Name:
           <input name="last name" type="last name">
        </p>
        <p>1st Line of Address:
          <input name="1st line of address" type="1st line of address">
        </p>
        <p>2nd Line of Address:
          <input name="2nd line of address" type"2nd line of address">
        </p>
        <p>Town:
           <input name="town" type"town">
        </p>
        <p>PostCode:
          <input name="postcode" type="postcode">
        </p>
        <p>Phone Number
          <input name="phone_number" type="phone_number">
        </p>
        <p>
          <input name="submit3" type="submit" value="update customer record">
        </p>
       </form>
     </form>
<?php
  $host="localhost"; // Host name
  $tbl_name="customer"; // Table name
  $db_user="root";
  $db_pass="";

  $connect = mysql_connect("$host", "$db_user", "$db_pass");
  $db_name="the_shop"; // Database name
  mysql_select_db("$db_name");

  if(isset($_GET['submit3'])){

    $db_username = $_GET['username'];

    $sql3 = "UPDATE `customer` SET `Password`='.$db_password.' WHERE `Username`='.$db_username.";
    $result3 = mysql_query($sql3);

    mysql_query($sql3) or die('error updating record');
    echo $sql3;
  }
?>

【问题讨论】:

  • 您在一个父表单中嵌入了多个表单。你只需要一个。
  • 此外,您的代码容易受到 SQL 注入的攻击。此外,不需要使用像"$host" 这样的语句,而不是简单的$host
  • 请不要将 $_GET 或 $_POST 变量传递到您的 sql 字符串中。您将容易受到 sql 注入的攻击。

标签: php mysql


【解决方案1】:
  1. HTML 中的 username 字段与提交按钮的格式不同,因此它不会与其他字段一起发送。

  2. 您没有$db_password 变量;你确实有一个$db_pass 变量。这是你的意思吗?

  3. 对于修改数据的请求,你真的应该使用POST,而不是GET请求。

如 cmets 中所述:

您应该使用$db_password = $_GET['password'],并按照peterm 和Mehdi 的答案更正引号。

【讨论】:

  • 一条评论。 @Chris 应该使用 $db_password = $_GET['password']$db_pass 是数据库凭据,不是用户密码
  • 此外,查询中可能存在不恰当使用不同 qoutes 类型的串联 - 请参阅@peterm 答案
  • 4.在检查 $_GET['submit3'] 是否为真之前打开 SQL 连接。 5. 不鼓励使用已弃用的 mysql 扩展。 6. 完全没有错误检查。 7. 易受 SQL 注入攻击。
【解决方案2】:

你的代码有几个问题:

您没有使用GET 方法获得username 参数。应更正 html 标记以正确定义一个表单,而不是多个表单。

您没有定义 $db_password 变量。应该是这样的

$db_password = $_GET['password'];

$sql3中的串联无效。因此更改

$sql3 = "UPDATE `customer` SET `Password`='.$db_password.' WHERE `Username`='.$db_username.";

$sql3 = "UPDATE `customer` SET `Password`='$db_password' WHERE `Username`='$db_username'";

【讨论】:

  • $db_password 此处未定义
  • @Timur 这正是我所说的。应更正 html 标记以正确定义表单。
  • 评论时您的答案中没有$db_password = $_GET['password']; 行。你现在的回答很好,是的
  • 谢谢,我不敢相信我错过了所有这些 xD 表单嵌套的原因是因为我想区分用户输入用户名的位置和输入更改的详细信息的位置
【解决方案3】:

您的查询应如下所示:

$sql3 = "UPDATE `customer` SET `Password`='".$db_password."' 
WHERE `Username`='".$db_username."'";

【讨论】:

  • 并且 db_password 未设置,并且标记中存在嵌套表单...用户名字段是其自己的表单,因此您收到的第一个警告是因为它没有被发布跨度>
猜你喜欢
  • 2019-03-12
  • 2014-11-10
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
相关资源
最近更新 更多