0

現在のアクティブユーザーのユーザーIDを割り当てた「フォルダー」をフェッチする前のページでスクリプトが機能したため、何が問題なのかわかりません。

これで私がやろうとしていることは以前と同じですが、割り当てられたuser_idに基づいてSQLからフォルダー情報をフェッチする代わりに、フォルダーIDが割り当てられたファイルをフェッチしようとしています。

クエリの例を次に示します。?o = folder&fid = 0ec741fa-e708-4314-83c4-c05966a56110#!/ New_Folder

?o = folderは、すべての内部ファイルを提供するindex.phpにfolder.phpを渡します。

&fid = 0ec741fa-e708-4314-83c4-c05966a56110はフォルダIDであり、フォルダテーブルIDとFIDに2つのフィールドがあるため、実際のIDではありません。これは、ユーザーが新しいフォルダを作成するときに一意に生成されたFIDであり、IDは自動的に割り当てられます。 AUTO_INCR+テーブルの主キーとして。

そしてこれが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> 

エラーや返されるものはなく、erro_logファイルにも何もありません。これは、フォルダーでは機能しますが、ファイルテーブルでは機能しないため、奇妙です。私はそれが彼らがデータを扱う方法に関係しているかもしれないと思っています。フォルダからデータをフェッチするために、uid(user_id)に割り当てられた任意のフォルダを要求します。これは、用語では数値です。ここでは、数値ではなく、ランダム化されたフォルダ文字列を使用しています。これが問題の原因である可能性がありますが、それは本当にすべきではありません。

コードのどこが間違っているのかについての提案はありますか?

4

1 に答える 1

3

ご覧のとおりfid、文字列としてではなくクエリに英数字値を追加しているときに含まれています。

また、コードで許可されているSQLインジェクションを知っていることを願っています。

したがって、直接配置をプリペアドステートメントの使用に変更することをお勧めします。このタグの下には、たくさんの例があります。

于 2012-12-25T18:47:46.973 に答える