单击链接时获取mysql字段数据?

时间:2012-02-29 12:16:44

标签: mysql hyperlink event-handling

如果点击了链接,我正试图从数据库中获取数据。

基本上我有一个包含这个的main.php:

$sql2="SELECT projectsid, projectname, description, 
    SUBSTRING(description,0,80) FROM projects";
$result2=mysql_query($sql2);    

while($row2 = mysql_fetch_assoc($result2)) {
    echo "<div id=\"links\">";
    echo "<ul>";
    echo "<li> <a href=\"fullproject.php\">" . $row2['projectname'];
    $_SESSION['projectname']= $row2['projectname'];
    echo "<em>" . $row2['description'] . "</em></a></li>";
    echo "</ul>";
    echo "</div>";
}

显示名称列表和简要说明。

  • Proj1
    • 描述
  • Proj2
    • 描述

我想要做的是显示项目的全部内容(如果单击该项目。)

fullproject.php

<?php
session_start(); 
$projectname= $_SESSION['projectname'];

// Connect to server.
require ("connect.php");

$sql1="SELECT projectsid, projectname, programme, difficult, requirements,
    resources, description, contact, gsize, size 
    FROM projects WHERE projectname = '$projectname'";
$result1=mysql_query($sql1);    

while($row1 = mysql_fetch_assoc($result1)) {
echo "Project Name: " . $row1['projectname']. "<br />";
echo "Programme : " . $row1['programme'] . "<br />";
echo "Difficult : " . $row1['difficult'] . "<br />";
echo "Requirements : " . $row1['requirements'] . "<br />";
echo "Resources : " . $row1['resources'] . "<br />";
echo "Description : " . $row1['description'] . "<br />";
echo "Contact : " . $row1['contact'] . "<br />";
echo "Group size : " . $row1['gsize'] . " " . $row1['size'] . "<br />";
echo "<br /> ";
}

每当我点击任何项目列表项时,它只显示列表的最后一次迭代。 我相信这种情况正在发生,因为当while循环结束时,会话变量被设置为最后一个。 谁能告诉我如何解决这个问题? 感谢

3 个答案:

答案 0 :(得分:1)

尝试使用GET变量而不是会话

在main.php中使用

    echo "<li> <a href='fullproject.php?projectname=$row2[projectname]'>";
fullproject.php中的

声明一个变量并将其初始化为get变量

   $projectname= $_GET['projectname'];

答案 1 :(得分:1)

此代码存在很多问题。

1)您正尝试通过main.php中的两种不同方法发送表的主键:在会话中以及通过URL的路径。这只是不好的做法 - 你可以访问不同的数据传输渠道的原因是它们都有不同的语义,但即使这样,发送两次相同的东西然后总是存在接收端可能看到不同值的风险并且必须先找到一种调和差异的方法。

2)您正在使用会话传递事务数据项。这是一个坏主意 - 数据项与特定过渡有关 - 而不是与会话有关。 $ _SESSION只应用于存储与sesion相关的数据 - 而不是用于导航或交易。

3)您提供的用于传递数据项的另一个管道是将其附加到URL中的路径。虽然在某些情况下这种方法有好处,但它也具有特定于Web服务器的复杂性 - 代码实现 - 您没有提供任何解释为什么使用此apporach而不是传统的$ _GET或$ _POST var。

您的代码失败的原因是您只能在$ _SESSION ['projectname']中存储单个值。即使您在会话中存储了一组值,也没有机制让Web服务器知道在将代码传递给浏览器时选择了哪些值。

您的HTML结构错误,格式也很差。

您显示的代码与您给出的描述不符(它不显示项目名称)。

您的代码也对SQL注入攻击持开放态度。

在main.php中更改它:

echo "<div id=\"links\">\n";
echo "<ul>\n";
while($row2 = mysql_fetch_assoc($result2)){
   echo "<li> <a href=\"fullproject.php?project=\"" 
      . urlencode($row2['projectname']) . "\">"
      . htmlentities($row2['projectname']) . "</a>\n";
   echo "<br /><em>" . $row2['description'] . "</em></li>";
}
echo "</ul>";
echo "</div>";

在fullproject.php中

<?php
session_start(); 
require ("connect.php");
$projectname= mysql_real_escape_string($_GET['projectname']);

答案 2 :(得分:0)

echo"<a href='fullproject.php?project_id='".$row2['project_id'].
"> $row2['projectName']</a>";
在fullproject.php中

$project_id=$_GET['project_id'];

然后您可以使用此ID显示数据库

中该项目ID的内容