Классический ASP: как я могу использовать значение из SQL дважды? - PullRequest
2 голосов
/ 10 февраля 2009

Я очень новичок в веб-разработке, но собираю простой каталог программного обеспечения с классическим ASP. Все выглядит хорошо, за исключением того, что я хочу использовать значение из моей базы данных SQL дважды на странице. Например, как в заголовке страницы, так и в теле страницы, я могу использовать каждое значение только один раз:

....
Set nItem = Request.QueryString("ID")

strSQL = "SELECT * "_
    & "FROM [Packages] "_
    & "WHERE id='" & nItem & "';" 

Set rstSearch = cnnSearch.Execute(strSQL)

<title><%=rstSearch.Fields("Software") %></title>
<body>
<center>Software Information</center>
<%=rstSearch.Fields("Software")%> <br />
<%=rstSearch.Fields("Version")%> <br />
<%=rstSearch.Fields("ID")%> <br />
<%=rstSearch.Fields("Licence")%> <br />
...

Ответы [ 5 ]

5 голосов
/ 10 февраля 2009

назначить его переменной; не просто извлекайте значение из набора записей.

Set nItem = Request.QueryString("ID")

strSQL = "SELECT * "_
    & "FROM [Packages] "_
    & "WHERE id='" & nItem & "';" 

Set rstSearch = cnnSearch.Execute(strSQL)

Dim software
software = rstSearch("Software")
' set your other fields as variables...

<title><%= software %></title>
<body>
<center>Software Information</center>
<%= software %> <br />

Должно работать нормально для вас.

3 голосов
/ 10 февраля 2009

Во-первых, быстрое предупреждение: вы открыты для внедрения SQL-кода при включении nItem в запрос. Просто в стороне, но один смотреть:)

Кроме того, не должно быть проблем со ссылкой на столбец в вашем наборе записей дважды. Я бы рискнул предположить, что у вас другая проблема в коде. Это может помочь, если вы опубликуете поведение / ошибки, которые вы получаете при попытке этой страницы. Но я думаю, что может быть какой-то другой код, который мы не видим в приведенном выше фрагменте, который вызывает проблему.

Одна вещь, которая поможет вам запустить контрольные тесты, состоит в замене «select *» на «select Software, Version, ID, License» и т. Д. Тогда вы можете ссылаться на столбец числовым порядковым номером, что может помочь.

Удачи с этим.

1 голос
/ 10 февраля 2009

Некоторые комментарии:

1. Possibly call rstSearch.MoveFirst before the second 
   rstSearch.Fields("Software")
2. If that doesn't work write <%=Err.Description%> right after the 
   second rstSearch.Fields("Software") line.
3. Try not to ever use Select * for selecting columns. 
   Always specify which columns you want.
4. Please try and use ASP.Net. It's much better then ASP3.
1 голос
/ 10 февраля 2009

Может потребоваться просто извлечь значение в локальный Var и использовать его дважды. Я видел странные вещи, как это раньше, давным-давно.

0 голосов
/ 10 февраля 2009

Извините, не могу помочь с фактическим ответом, но это выглядит как основной пример атаки SQL-инъекцией:

Set nItem = Request.QueryString("ID")

strSQL = "SELECT * "_
    & "FROM [Packages] "_
    & "WHERE id='" & nItem & "';" 

Похоже, я мог бы просто изменить URL-адрес на "? ID = 1 '; DROP TABLE STUDENTS; -", чтобы все испортить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...