3

私は自分の CMS を作成しようとしていますが、php と mysql はかなり新しいです。要点を説明しましょう:

これまでのところ、「続きを読む」パーマリンクを使用してインデックス ページにニュースを作成しました (つまり、続きを読むを押すと、他のページに移動します。たとえば/readmore.php?id=[news ID]、そのページでは、特定のニュース、つまりテーブルの特定の行のみがコンテンツになります。私が立ち往生しているのは、そのパーマリンクでその特定の行 ID を取得することです。

現在私のために機能するコードを示しましょう。

ニュースを含むインデックス ファイル:

while($row = mysql_fetch_array($result))  
   {
/*... title, news content... */
   echo "<a href='readmore.php?id=".$row['ID']."'>".$read_more_link."</a></div>";
}

正確な行を含む readmore.php (例: readmore.php?id=1201):

$params = $_SERVER['QUERY_STRING'];
$str = $params;
$id1 = $str[strlen($str)-1];
$id2 = $str[strlen($str)-2];
$id3 = $str[strlen($str)-3];
$id4 = $str[strlen($str)-4];
$news_id = "$id4$id3$id2$id1";

$query = "SELECT * FROM naujiena WHERE ID='$news_id'";

基本的には、アドレス バーの下 4 桁を復元し、その 4 桁の ID を持つニュースを検索します。

これは非常に原始的な方法ですが、私はこれで数日間立ち往生しており、解決策を見つけることができません.

私が以前に試したのは、while($row = mysql_fetch_array($result))ループ内でセッションを使用して変数を作成することです。インデックスページに ID を表示する必要がありますが、readmore ページでは最後の ID または最初の ID (desc または asc に依存) のみが表示されます。期待するのは明らか

手伝って頂けますか?私はそれをお願い申し上げます。

4

3 に答える 3

2

php でクエリ文字列のパラメーターを抽出するには、$_GET次のようにスーパーグローバルを使用します。

$_GET["id"]

また、リモート (ユーザー、ブラウザなど) によって提供されるデータは偽造される可能性があることに注意してください。そのため、攻撃者はあなた?id=0; DROP TABLE usersやそれに類するものを送る可能性があります。

SQL インジェクションの詳細をお読みください。

入力を検証することは常に良い考えです。IDは整数であると予想しているので、安全のためにチェックすることができますif(ctype_digit($_GET["id"]))) ...

最後に、SQL ステートメントで使用している入力をサニタイズすることもお勧めします。を使用するmysql_real_escape_string()か、使用を検討してくださいPDO

于 2012-04-07T21:48:41.193 に答える
2

配列内の名前でクエリ文字列の値にアクセスできます$_GET

たとえば、クエリ文字列$_GET['id']の一部の値になります。id=<ID>クエリ文字列のすべてのフィールドで機能します。

// url : readmore.php?id=1201
$news_id = intval($_GET['id']);
// now, $news_id contains the value 1201
$query = "SELECT * FROM naujiena WHERE ID='$news_id'";

公式ヘルプを読むことができます:$_GETまたは Web で見つけることができるさまざまなチュートリアルの 1 つ: http://www.w3schools.com/php/php_get.asp

アップデート

あなたが私の答えを受け入れてくれたので、SQL インジェクションについて一言言わなければならないと感じています。を使用して SQL クエリで使用している入力は常にサニタイズする必要がありますmysql_real_escape_string。詳細については、ウィキペディア: SQL インジェクションまたは PHP のドキュメント: SQL インジェクションを参照してください。

ID は数値であるため、それを確認することもできます。でこれを行うようにコード スニペットを更新しましたintval

于 2012-04-07T21:50:12.780 に答える
1

特定の HTTP-GET 変数を取得するには、$_GET["variableName"]. あなたの場合、次のように ID を取得できます。

$news_id = $_GET["id"];

于 2012-04-07T21:49:57.853 に答える