0

データベースや他のプロジェクト (ASPMaker の読み取り/書き込みレコードを使用) から読み取ることができますが、ごまかすのではなく手を汚すと思っていましたが、レコードを更新しようとすると 500 エラーが発生します。ディレクトリには読み書き権限があります。誰かが私のコードをチェックして、最初に私が間違いを犯したことを確認できますか?

<!--#include file="Connection.asp"-->

<%
Dim DeleteRS, Query
Set DeleteRS = Server.CreateObject("ADODB.Recordset")
Query = "Select * From notices Where [notice].[approved] = False AND [notice].[Notice_ID] = " & Request.qureystring("n")
response.write(Query)

DeleteRS.Open Query, adoCon, adOpenStatic, adLockOptimistic
DeleteRS.Delete

DeleteRS.Close
Set DeleteRS = Nothing
Set Query = Nothing

%>
4

1 に答える 1

2

500 エラーだけでなく、より多くの情報を取得できるように、Web サーバーで詳細なエラー メッセージの表示を有効にする必要があります。

あなたのコードには複数の問題があります:

  • ユーザー入力を信頼します。SQL コードを動的に構築し、提供された値を使用しますRequest.querystring("n")SQL インジェクションを参照してパラメーターを使用する
  • スペルミス:
    • リクエスト。クエリ文字列
    • Select * From notifications Where [ notice ].[a...
      (結合を行わない限り、すべての列でテーブル名を繰り返す必要はありません)
  • HTTP GET リクエストに基づいてデータを変更しないでください。行を削除 (または更新) する場合は、HTML フォームを作成し、削除する必要がある ID を POST します。
  • 行を削除するためにレコードセット オブジェクトを使用する必要はありません。ここで、データベースと 2 回通信しています。1 回目は行を取得するため、もう 1 回は削除するためです。削除ステートメントを作成するだけです:

    Dim command
    
    command = Server.CreateObject("adodb.command")
    command.ActiveConnection = adoCon
    command.Execute "DELETE FROM notices WHERE approved = False AND id = ?", array(Request.querystring("n"))
    command.Close
    
    Set command = Nothing
    

疑問符はパラメーターであり、値は配列で提供されます。

于 2013-02-10T20:21:28.680 に答える