1

列を持つテーブルがあります

GroupID | GroupName | GroupDesc | Overs |
-----------------------------------------
1       | Test Group|Description| Yes   |

list.php というページがあり、現在、グループ テーブル (上記) の DB の各行の URL を作成しています。

コードは最もきれいではありませんが、うまくいくと思います。これは彼のコードです

list.php

<?php 
    $result = mysql_query("SELECT * FROM groups");

    while($row = mysql_fetch_array($result))
        {
            echo "<div class=\"divider\">";
            echo "<a href=\"group.php?id=";
            echo $row['GroupID'];
            echo "\">";
            echo $row['GroupName'];

            echo "</a>";
            echo "<br><br>";
            echo $row['GroupDesc'];
            echo "<br>";
            echo "Over 18's: ";
            echo $row['AgeRes'];
            echo "</div>";
        }
?>

これにより、http://domainname.com/group/group.php?id= 1 のような URL が作成されます。

これが私の質問です。URL の ID セクションを使用して、上記の DB から関連する行を選択するにはどうすればよいですか?

私の 2 番目の質問は、これが SQL インジェクタブルになるのをどのように止めるかということです。

私はこれらすべてに慣れていないので、スキルをさらに伸ばすことができるように、これと優れた読書ソースに関する回答が欲しい.

ありがとう

4

2 に答える 2

1

最初の質問に答えるには、クエリで where 句を使用する必要があります。使用した列名が正しいかどうかはわかりませんが、おわかりいただけると思います。クエリのコーディング方法のアイデアを得るために使用できる無料の優れたオンライン インタラクティブ SQL チュートリアルがたくさんあります。

2 番目の質問に答えるには、関数を使用してmysql_real_escape_string()、渡される変数を整理します。ただし、より良い方法は、データベースへの接続方法を変更することです。PDOmysqliは両方とも、データベースへの接続に関してはるかに優れた仕事をします。特に始めたばかりの場合は、代わりにそれらを学習することを検討する必要があります。

<?php 
    $id=mysql_real_escape_string($_GET['id']);
    $result = mysql_query("SELECT * FROM groups where id=".$id.";");
    // Am not 100% sure if that is the right column name to use for your database.


    while($row = mysql_fetch_array($result))
    {
        echo "<div class=\"divider\">";
        echo "<a href=\"group.php?id=";
        echo $row['GroupID']; 
        echo "\">";
        echo $row['GroupName'];

        echo "</a>";
        echo "<br><br>";
        echo $row['GroupDesc'];
        echo "<br>";
        echo "Over 18's: ";
        echo $row['AgeRes'];
        echo "</div>";
    }
?>
于 2012-07-24T22:23:01.117 に答える
1

Q1: リクエスト変数を取得し、SQL クエリに含める必要があります。

$result = mysql_query("SELECT * FROM groups WHERE id = '" . $_GET['id'] . "'");

Q2: クエリに含める前に、まず値をエスケープする必要があります。

$id = (int)mysql_real_escape_string($_GET['id']);

次に、クエリを次のように変更します。

$result = mysql_query("SELECT * FROM groups WHERE id = '" . $id . "'");
于 2012-07-24T22:23:35.000 に答える