0

何らかの理由で、SQL は必要なテーブルから必要な情報を取得しません。ユーザーIDに関連付けられたフォルダーのリストをSQLから取得するためにまったく同じコードを使用し、それが正常に機能するため、これは奇妙です。したがって、URL クエリは ?o=folder&fid=0ec741fa-e708-4314-83c4-c05966a56110 のようになります。fid はフォルダー ID であり、以下のクエリはそのようなフォルダー ID に関連付けられたファイルをプルする必要がありますが、代わりに何も返されません。エラーメッセージ/コードさえありません。

構文に問題はありますか? または、問題の原因は何ですか?

修正メモ帳++で開いているタブの束があるため、間違ったコードを使用しました

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']

しかし、あなたのURLではあなたは通り過ぎています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 に答える