0

我正在构建一个简单的错误跟踪工具。当您创建一个新项目时,您在表单中填写的所有信息都会存储在数据库中。

当您创建新项目时,您会被重定向到一个独特的项目页面。在页面顶部显示项目的名称,但它不是我刚刚创建的项目的名称,它始终显示 MySQL 表中第一个项目的名称。

如何显示我刚刚创建的项目的名称?

通过这个查询,我从数据库中检索数据。

$query = "SELECT CONCAT(name) 
AS name FROM projects";
$result = @mysql_query ($query)

我用这个显示项目名称,但它总是显示表中第一条记录的名称。

    <?php 
    if ($row = mysql_fetch_array ($result))
        echo '<h5>' . $row['name'] . '</h5>'; 
    ?>

它还没有被 SQL 注入证明并且远未完成......但我真的在努力解决这个问题。

4

2 回答 2

1

您需要AUTO_INCREMENT在您的表中使用一个字段作为唯一标识符(至少,您确实应该这样做)。然后你可以做这样的事情:

<?php
$sql = new MySQLi('localhost', 'root', '', 'database');

$sql->query('INSERT INTO `projects` (`name`) VALUES ("Test Project");');
$projectID = $sql->insert_id; // Returns the auto_increment field value of the last insert query performed
// So this assumes you have a field in your table called "id" in this example

$res = $sql->query('SELECT CONCAT(`name`) AS `name` FROM `projects` WHERE `id` = '.$projectID.';');

if ($row = $res->fetch_assoc()) {
    echo '<h5>'.$row['name'].'</h5>';
}
?>

由于您要求重定向到唯一的项目页面,因此您应该具有以下内容:header("Location: project.php?id=$projectID");

然后,在 project.php 上,您可以尝试使用上面的查询来获取项目,只有您的查询的 WHERE 子句应该类似于:

'`id` = '.intval($_GET['id']).';'

从技术上讲,您可以将所有项目信息作为请求或会话 cookie 传递到下一页,并完全为自己保存一个查询。只需确保您随身id携带,以便轻松更新记录。

于 2013-08-02T21:17:56.130 回答
0

尝试使用ORDER BY.

$query = "SELECT CONCAT(name) 
AS name FROM projects ORDER BY id DESC";

这将显示最近的项目(假设您有一个 ID 列)。

但是,更好的方法是在页面上设置一个 ID 变量。

$query = "SELECT CONCAT(name) 
AS name FROM projects WHERE id=?";
于 2013-08-02T21:02:31.307 回答