【问题标题】:updating a record in database not working更新数据库中的记录不起作用
【发布时间】:2012-04-09 14:13:51
【问题描述】:

我再次尝试研究 php mysql,似乎我尝试了所有事情来解决问题.. 但似乎互联网上的初学者代码没有帮助.. 我真的无法更新记录在数据库中。

<html>
<body>
<?php
$db = mysql_connect("localhost", "root");
mysql_select_db("dbtry",$db);
$id = isset($_GET['id']) ? $_GET['id'] : null;
$submit = isset($_POST['submit']);
if ($id) {
if ($submit) {

        $result = mysql_query("select * from employees where id = " . mysql_real_escape_string($_GET['id']) );
        $row = mysql_num_rows($result);

if ($myrow != 0) {
mysql_query ("UPDATE employees SET firstname='$first',lastname='$last',address='$address',position='$position' WHERE id = '$id'");

}


echo "Thank you! Information updated.\n";
} else {
// query the DB
$result = mysql_query("SELECT * FROM `employees` WHERE `id` = " . mysql_real_escape_string($_GET['id']), $db);

$myrow = mysql_fetch_array($result);
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
First name:<input type="Text" name="first" value="<?php echo $myrow["firstname"] ?>"><br>
Last name:<input type="Text" name="last" value="<?php echo $myrow["lastname"] ?>"><br>
Address:<input type="Text" name="address" value="<?php echo $myrow["address"]
?>"><br>
Position:<input type="Text" name="position" value="<?php echo $myrow["position"]
?>"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
<?php
}
} else {
// display list of employees
$result = mysql_query("SELECT * FROM employees",$db);
while ($myrow = mysql_fetch_array($result)) {
printf("<a href=\"%s?id=%s\">%s %s</a><br>\n",  $_SERVER['PHP_SELF'], $myrow["id"],
$myrow["firstname"], $myrow["lastname"]);
}
}
?>
</body>
</html>

【问题讨论】:

  • 对于 MySQL 中的此类问题,通常还需要说明该表是什么引擎类型(InnoDB?MyISAM?)。
  • 我应该使用什么类型我使用innodb..
  • 您使用的类型取决于您要执行的操作。

标签: php


【解决方案1】:

有两件事可能会导致您出现问题:首先,您尝试设置的值是尚未定义的变量。我假设你发现的初学者代码假设你启用了注册全局变量,你真的不想这样做!

第二个问题是,如果您确实启用了注册全局变量,则数据不会被清理,因此引号可能会使更新出错。

试试这个:

$first = mysql_real_escape_string( $_POST['first'] );
$last = mysql_real_escape_string( $_POST['last'] );
$address= mysql_real_escape_string( $_POST['address'] );
$position = mysql_real_escape_string( $_POST['position'] );

mysql_query ("UPDATE employees SET firstname='$first',lastname='$last',address='$address',position='$position' WHERE id = '$id'");

这至少应该让您启动并运行。我强烈建议您使用 MySQLi 库或 PHP PDO,并考虑使用准备好的语句来增加安全性。

【讨论】:

  • 我已经尝试过了,但它仍然无法正常工作..是否有可能是我的计算机的安全性或我使用的服务器或浏览器的安全性,我尝试添加、删除、搜索和查看并且代码运行良好..但是编辑我真的面临很大的困惑:)
【解决方案2】:
mysql_query("UPDATE `employees` SET `firstname`='".$first."', `lastname`='".$last."',
`address`='".$address."', `position`='".$position."' WHERE `id` = '".$id".' ; ", $db) or 
die(mysql_error());

【讨论】:

    【解决方案3】:

    我认为问题可能在于您与数据库的连接。 mysql_connect 函数的第三个参数是密码。因此:

    $db = mysql_connect("localhost", "root");
    

    应该是:

    $db = mysql_connect("localhost", "root", "yourPassword");
    

    如果您发布您遇到的错误类型也会有很大帮助。

    【讨论】:

      【解决方案4】:

      您需要区分发布和获取。按照下面的工作示例。它会帮你解决的:D

      <html>
      <body>
      <?php
      $db = mysql_connect("localhost", "root","");
      mysql_select_db("test",$db);
      
      if($_SERVER['REQUEST_METHOD']=='POST')
      {
          //SUBMIT FORM
          $id=isset($_POST['id'])?$_POST['id']:0;
          if ($id) {
              $result = mysql_query("select * from parameter where id = " . mysql_real_escape_string($id) );
              $rows = mysql_num_rows($result);
              if ($rows != 0) {
              mysql_query ("UPDATE parameter SET name='".$_POST['name']."',value='".$_POST['value']."' WHERE id = '".$id."'");
              echo "Thank you! Information updated.\n";
          }
          }
      }
      
      if($_SERVER['REQUEST_METHOD']=='GET')
      {
          //SELECT WHERE ID=GER VAR AND DISPLAY   
          $id = isset($_GET['id']) ? $_GET['id'] :0;// 
          if ($id) {
          // query the DB
          $result = mysql_query("SELECT * FROM parameter WHERE `id` = " . mysql_real_escape_string($_GET['id']), $db);
          $myrow = mysql_fetch_array($result);
          ?>
          <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
          <input type=hidden name="id" value="<?php echo $myrow["id"] ?>">
          First name:<input type="Text" name="name" value="<?php echo $myrow["name"] ?>"><br>
          Last name:<input type="Text" name="value" value="<?php echo $myrow["value"] ?>"><br>
          <input type="Submit" name="submit" value="Enter information">
          </form>
          <?php
          }
          else {
          // display list of employees
          $result = mysql_query("SELECT * FROM parameter",$db);
          while ($myrow = mysql_fetch_array($result)) {
          echo "<a href='".$_SERVER['PHP_SELF']."?id=".$myrow['id']."'>".$myrow['name'].": ".$myrow['value']."</a><br>";
      }
      }
      }
      ?>
      </body>
      </html>
      

      【讨论】:

      • 我会试试这个.. 很难学习更新,因为我真的不能在互联网样本上:)
      • 哇哦!感谢这个例子,我将把它作为我未来程序的基础。你回答了我 2 天前的问题 :)
      【解决方案5】:

      通常当我遇到这个问题时,这是因为自动提交已关闭,我忘了明确告诉连接提交。

      编辑:你试过这个:How can I implement commit/rollback for MySQL in PHP??根据您的设置,可以将 InnoDB 设置为关闭自动提交,这意味着您需要明确告诉 MySQL 在完成后提交更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 2021-04-06
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多