0

我正在构建一个简单的错误跟踪工具。您可以创建新项目,当您创建项目时,您必须填写一个表单,该表单发布到 project.class.php (即此代码)

$name        = $_POST['name'];
$descr       = $_POST['description'];   
$leader      = $_POST['leader'];    
$email       = $_POST['email'];

$sql="INSERT INTO projects (name, description, leader, email, registration_date)
VALUES ('$name', '$descr', '$leader', '$email', NOW())";

$result = mysql_real_escape_string($sql);
$result = mysql_query($sql); 

if($result){
header('Location: ../projectpage.php?id='.mysql_insert_id());
}
else {
echo "There is something wrong. Try again later.";
}

mysql_close();

(还没有证明s​​ql注入,远未完成……)

最终,您将被重定向到唯一的项目页面,该页面链接到存储在 MySQL 数据库中的 id。我想在页面上显示该项目的名称,但它始终显示数据库中第一个项目的名称。

(这里我从 MySQL db 中选择数据。)

$query = 'SELECT CONCAT(name) 
AS name FROM projects';

$result = mysql_real_escape_string($query);
$result = mysql_query ($query);

(这里我在我的页面上显示了项目的名称,但它始终是 MySQL db 中第一个项目的名称)

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

如何显示正确项目的名称?与id相关联的那个?我有使用 WHERE .... 吗?

4

3 回答 3

0

是的,您必须使用 WHERE 来指定您想要获取的项目。当您只想获得一个项目时,我也不确定为什么要使用 CONCAT 功能。

另一个重要的事情是,在将参数放入查询字符串之前,您必须对参数使用 mysql_real_escape_string() 函数。并对您收到的特定类型的数据使用适当的功能。

因此,您获取项目的声明应如下所示:

SELECT name FROM projects WHERE id = ' . intval($_GET['id'])

另外,在您使用 mysql_fetch_assoc() 函数之前,请检查结果中是否有任何记录

if(mysql_num_rows($result) > 0)
{
  $project = mysql_fetch_assoc($result);
  /* $project['name'] */
}
于 2013-08-03T13:38:26.630 回答
0

尝试这个

// first get the id, if from the url use $_GET['id']
$id = "2";  
$query = "SELECT `name` FROM `projects` WHERE `id`='".intval($id). "'";
$result = mysql_query(mysql_real_escape_string($query));

使用mysql_fetch_row,这里你不必遍历每条记录,只返回单行

// if you want to fetch single record from db
// then use mysql_fetch_row()
$row = mysql_fetch_row($result);
if($row) {
    echo '<h5>'.$row[0].'</h5>';
}

$row[0]表示您的选择查询中提到的第一个字段,这里是name

于 2013-08-03T13:41:43.113 回答
-1

可能有帮助:

您当前正在分配查询字符串参数projectpage.php?id=

当您访问页面时,sql 必须提取并过滤查询字符串参数,如下所示:

$query = 'SELECT CONCAT(name) AS name FROM projects WHERE projectid ='. $_GET["id"];

$result = mysql_real_escape_string($query);
$result = mysql_query ($query);

为了安全起见,也可以在分配结果后将 mysql_insert_id() 移动到右侧。

$result = mysql_query($sql);
$insertId = mysql_insert_id();

然后,当您将其分配给查询字符串时,只需使用参数以及

header('Location: ../projectpage.php?id='.$insertId);
于 2013-08-03T13:28:37.643 回答