【问题标题】:php form populating from mysql data从mysql数据填充的php表单
【发布时间】:2012-05-28 17:52:27
【问题描述】:

我有一个页面显示来自我的数据库的信息。每个数组都有一个编辑链接,该链接具有一个统一的 id (.html?id=4)。

问题: 我创建的根据 id 查询数据库的表单导致没有信息显示?

知道我需要做什么来完成这项工作吗?

<?php
    // Connect to the database
require 'include/episodelist.db.php';
    // Ask the database for the information from the table based on .html?id=#
$query="SELECT * FROM `season` WHERE `id` = $id";
    //The above query is the problem.
$result = mysql_query("SELECT * FROM 'season'");
mysql_close();
?>
<form action="include/epslist.edit.php" method="POST">
<table>
<tr>
<td>Season Number: </td><td><input type="text" name="season_sum" size="50" value="<?php echo "$season_num";?>"></td>
</tr>
<tr>
<td>Episode Number: </td><td><input type="text" name="eps_num" size="50" value="<?php echo "$eps_num";?>"></td>
</tr>
<tr>
<td>Temp Episode Number: </td><td><input type="text" name="temp_eps_num" size="50" value="<?php echo "$temp_eps_num";?>"></td>
</tr>
<tr>
<td>Title: </td><td><input type="text" name="title" size="50" value="<?php echo "$title";?>"></td>
</tr>
<tr>
<td>Description: </td><td><textarea type="text" name="descrip" cols="50" rows="7" value="<?php echo "$descrip";?>"></textarea></td>
</tr>
<tr>
<td colspan="2">
<input type="Submit" value="Update">
</td>
</tr>
</table></form>

【问题讨论】:

  • 据我在您发布的代码中可以看到,您没有为 $id 变量提供任何价值
  • 请停止使用古老的 MySQL 扩展编写新代码:它不再维护,社区已开始 deprecation process。相反,您应该使用改进的MySQLi 扩展或PDO 抽象层。也不要将变量(尤其是来自您的用户的变量)放入您的 SQL 中,因为这会使您容易受到 SQL 注入的影响。你应该使用准备好的语句,你的变量可以作为参数传递给 MySQL,而不是为 SQL 评估。
  • 您忘记从获取请求中获取 id $id = $_GET['id'];

标签: php mysql forms


【解决方案1】:

您需要检查表单是否将 $id 作为变量传递,如果是,则获取 $id 并使用数据库中的数据填充字段。如果没有,请显示一个空白表格。

<?php

if(isset($_GET['id']))
{
   // Get ID
   $id = mysql_real_escape_string($_GET['id']);

   // Do query and save data to array
   $query="SELECT * FROM `season` WHERE `id` = $id";
   $result = mysql_query("SELECT * FROM 'season'");
   $row = mysql_fetch_assoc($result);

   $fields = array('seasonid'    => $row['seasonid'],
                   'episodenum'  => $row['episodenum']
   );

   mysql_close();

}
else
{

   // No id, use blank values
   $fields = array('seasonid'    => '',
                   'episodenum'  => ''
   );
}

?>

<!-- Populate form with fields array -->
...
<td>Season Number: </td><td><input type="text" name="season_sum" size="50" value="<?php echo($fields['seasonid']); ?>"></td>
...

当然,以这种方式使用 mysql 会导致安全问题,并朝着弃用的方向发展。 PDO(PHP 数据对象)是处理数据库操作的方法。 PDO 的使用允许准备好的语句/参数化查询,看起来像这样:

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
   $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
   echo 'Connection failed: ' . $e->getMessage();
} 

$id = $_GET['id'];

// Use a prepared statement to avoid SQL injection
$sth = $dbh->prepare('SELECT * FROM `season` WHERE `id` = :id');
$sth->bindValue(':id', $id, PDO::PARAM_INT);
$sth->execute();

【讨论】:

  • 我正在试用您的代码。请给我一点时间。抱歉,我对 PDO 的了解比对 MySql 的了解少。不过我会调查的。现在,如果我可以根据我单击的编辑链接来填充字段,我会很高兴:)
  • 所以没有快乐。地址栏中的链接正在传递 id。 [EXAMPE] test.html/id=4 当我单击指向 test.html 上的表单页面的链接时,但没有 id 的 4 信息被填充到表单字段中以进行更新。他们都保持空白?
  • 我不再使用 mysql_* 函数,所以我不小心错过了使用 mysql_fetch_assoc() 函数。而且,我不知道您的数据库字段的名称是什么,因此请确保您使用正确的值。这更像是一个例子。
  • 你为什么要传递html/id=4之类的变量...应该是html?id=4
  • opps,没有它的 .html?id=4 那是我在我的评论中放 / 的笨蛋。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多