1

我有file1.php 和file1.php。我想要一个从 file1.php 到 file2.php 的 ID(存储在数据库中),但我通过一个链接到第二页<a href=必须转到 file2.php 的 ID 号取决于我单击的链接。所以SESSIONS可能不会这样做。我试过了,SESSIONS但当我测试它时它只记得 1 个 ID 号。

这是 file1.php 中的所有内容:

while ($thread = mysqli_fetch_assoc($sql_result)) {
<a href="thread.php?thread_id={$thread['thread_id']}"> {$thread['title']} </a>
}

这个while循环确保我的数据库中每个不同的标题都获得一个链接(指向file2.php),其中包含属于thread_id的必要信息。(thread_id 是我数据库中唯一必须与其他数据库不同的东西)

所以现在要在 file2.php 中显示它,我得到了这个:

$sql_result = $mysqli2->query("SELECT * FROM questions WHERE thread_id = '".The ID Number of the link of file1.php."'");
    while ($thread = mysqli_fetch_assoc($sql_result)) {
echo <<<EOT
        <table>
            <tr>
                <tr><td> {$thread['title']}</td></tr>
                <tr><td> {$thread['description']}</td></tr>
                <tr><td> {$thread['username']}</td></tr>
                <tr><td> {$thread['date_made']}</td></tr>
            </tr>       
</table>
EOT;

显示属于 thread_id 的信息。我该怎么做呢?

4

3 回答 3

1

通过单击该链接,您不会在会话中存储任何内容。

你需要使用$_GET

例子:

$thread_id = $_GET['thread_id'];

if(!is_numeric($thread_id)){
   // Exit the script as the Thread ID isn't numeric or do something else
   echo 'THREAD ID NOT NUMERIC';
   exit;
}

$sql_result = $mysqli2->query("SELECT * FROM questions WHERE thread_id = '".$thread_id."'");
    while ($thread = mysqli_fetch_assoc($sql_result)) {
echo <<<EOT
        <table>
            <tr>
                <tr><td> {$thread['title']}</td></tr>
                <tr><td> {$thread['description']}</td></tr>
                <tr><td> {$thread['username']}</td></tr>
                <tr><td> {$thread['date_made']}</td></tr>
            </tr>       
</table>
EOT;

您必须过滤来自$_GET变量的输入,因为这是一个简单的 SQL 注入向量。

于 2013-09-26T11:02:29.477 回答
0

使用$_SESSION来解决这样的问题不是最好的主意,但是您没有对代码中的会话做任何事情,所以我假设您已经发现了这一点。

基本上你在正确的道路上,你创建链接列表的方式很好!

现在,在新页面上,您想再次从查询字符串中检索该 ID,这就是$_GET全局数组发挥作用的地方。

使用查询字符串中的参数从数据库中检索数据的正确方法是:

if (!isset($_GET['thread_id'])) {
    // route back to the list or throw an error or something
}

// cast the param to int to sanitize it, 
// no real_escape_string needed in the int case
$thread_id = (int) $_GET['thread_id'];

// get the info from the database BUT use parameterized queries!
$stmt = $mysqli2->prepare("SELECT * FROM questions WHERE thread_id = ?");
$stmt->bind_param($thread_id);
$stmt->execute();
于 2013-09-26T11:25:23.193 回答
0
$link=$mysqli2->real_escape_string($_GET['thread_id']);
$sql_result = $mysqli2->query("SELECT * FROM questions WHERE thread_id = '$link'");
于 2013-09-26T11:02:07.170 回答