0

由于某种原因,SQL 不会从所需的表中提取所需的信息。这很奇怪,因为我使用完全相同的代码从 SQL 中提取与用户 id 关联的文件夹列表,并且它的工作方式应该如此。因此,URL 查询看起来像这样 ?o=folder&fid=0ec741fa-e708-4314-83c4-c05966a56110,fid 是文件夹 ID,下面的查询应该提取与此类文件夹 ID 关联的所有文件,但没有返回任何内容,甚至没有错误消息/代码。

语法有问题吗?或者问题的原因是什么?

更正我使用了错误的代码,因为我在 NOTEPAD++ 中打开了一堆标签

这是用 SQL PDO 编写的实际代码

require ("sql/pdo.php");

    // Lets get user's folder information
    $query = " SELECT * FROM files WHERE fid = ".$_REQUEST['fid']." "; 

    try 
    { 
        // These two statements run the query against your database table. 
        $stmt = $db->prepare($query); 
        $stmt->execute(); 
    } 
    catch(PDOException $ex) 
    { 
        // Note: On a production website, you should not output $ex->getMessage(). 
        // It may provide an attacker with helpful information about your code.  
        die("Failed to run query: " . $ex->getMessage()); 
    } 

    // Finally, we can retrieve all of the found rows into an array using fetchAll 
    $rows = $stmt->fetchAll(); 

?>
<table width="100%"> 
    <?php foreach($rows as $row): ?> 
        <tr onclick="window.location = 'file.php?fid=<?php echo htmlentities($row['id'], ENT_QUOTES, 'UTF-8')."'"> 
            <td style="width:4%;"><img src="ast/images/fs-directory.png" /></td>
            <td style="width:86%;text-align:left;"><?php echo htmlentities($row['name'], ENT_QUOTES, 'UTF-8'); ?></td>
            <td style="width:10%;text-align:center;"><?php echo htmlentities($row['privacy'], ENT_QUOTES, 'UTF-8'); ?></td> 
        </tr> 
    <?php endforeach; ?> 
</table> 
4

2 回答 2

3

在您的查询中,您正在使用$_GET['f']

但是在您的网址中,您正在传递fid

当您替换为时,代码可能会$_GET['f']起作用$_GET['fid']

<?php

             $sql = mysql_query("SELECT * FROM `fs_files` WHERE fid = '".$_GET['fid']."'") or die(mysql_error());


             while($row = mysql_fetch_array( $sql )) {

                 if (in_array($row['file_type'], array('jpeg', 'jpg', 'png', 'gif'))) { 

                 $img = "obj.php?id=".base64_encode($row['file_path'])."&mode;thumb";

                 } else {

                 $img = "assets/filesystem/file_extension_".$row['file_type'].".png";

                 }

                 $type = $row['file_type'];



                 $file_name = substr($row['file_name'], 0, 50);
                 $file_path = "view/".$_GET['fid']."/".$row['id']."/".$row['file_name'];

                 echo '<a href="?p=view&f='.$row['id'].'&q='.$file_path.'"><img src="'.$img.'" />'.$file_name.'
                 <span style="float:right;">'.$type.'</span></a>';
             } 
             ?>
于 2012-12-25T18:11:36.827 回答
2

代码基本上是正确的,你应该使用 PHPmyadmin 或其他工具来检查数据库的内容,看看它正在检索什么。

请小心,因为直接从 GET 参数将值放入 SQL 查询中是危险的,在您的情况下,有人(或自动脚本)可能会使用 'f' GET 参数注入任意 SQL 代码。您应该对其进行转义,删除您的案例未严格使用的所有字符(例如,仅保留字母和数字)。
这同样适用于内部的相同参数$file_path,它可以用于插入来自互联网任何地方的任意图像,甚至是脚本或任意 HTML 代码。

您应该描述您的表模式以了解此处发生的情况。

于 2012-12-25T18:16:36.460 回答