Member 13741482 Ответов: 1

Классический ASP-код внутри HTML формы текстовое поле ввода возвращает как текст из базы данных Access


Я хочу вставить с помощью формы textarea input html с кодом asp в базу данных acces 2000.

Это нормально, но при извлечении набора записей со страницы asp часть кода asp-это просто текст. Что я делаю не так.

Что я уже пробовал:

Код Вставки:
<%
    Set MM_editCmd = Server.CreateObject ("ADODB.Command")
    MM_editCmd.ActiveConnection = MM_conn_STRING
    MM_editCmd.CommandText = "INSERT INTO KioskLayout (KioskHtml) VALUES (?)" 
    MM_editCmd.Prepared = true

    MM_editCmd.Parameters.Append MM_editCmd.CreateParameter("param5", 203, 1, 536870910, Request.Form("KioskLayHtml")) ' adLongVarWChar
    MM_editCmd.Execute
    MM_editCmd.ActiveConnection.Close
%>


Код Html - Формы:
<form METHOD="POST" name="Layout" action="<%=MM_editAction%>" class="center">
  <textarea class="form-control" id="KioskLayHtml" name="KioskLayHtml">
<!--This is The TextArea field Input --> 
  <div class="grid-container">
<div class="main"><%=rs("today")%></div>
<div class="Left"><%=rs("tomorrow")%></div>
<div class="Bottom"><%=rs("yesterday")%></div>
</div>
<!--End Of TextArea field Input --> 
  </textarea>
<input type="hidden" name="MM_insert" value="Layout">
<input type="submit" name="button" id="button" value="Submit">
</form>


Но при извлечении набора записей из asp-страницы это видно.

<%=rs("сегодня")%>
<%=rs("завтра")%>
<%=rs(вчера")%>

в текстовом виде,
и просмотр источника показывает это.

 <div class="grid-container">
<div class="main"><%=rs("today")%></div>
<div class="Left"><%=rs("tomorrow")%></div>
<div class="Bottom"><%=rs("yesterday")%></div>
</div>


Кто-нибудь поможет? Заранее спасибо

Richard Deeming

Похоже, что ваш код "HTML-формы" находится на HTML-странице, а не на странице ASP.

Member 13741482

Нет, это моя страница .asp
Содержимое request.form("KioskLayHtml") - это html и asp код.

MadMyche

Как это происходит Форма Действия рендеринг; он тоже испорчен или рендеринг был сделан правильно? Действительно ли эта страница сохранена с расширением ASP? Сработало ли это раньше? Есть ли у вас функционирующие ASP-страницы на сайте? И вы действительно используете DreamWeaver?

Member 13741482

Форма вставки работает нормально. да, это страница asp на локальном iis в windows 7, и да, я использую Dreamweaver 4.0

Richard Deeming

Или это код HTML-формы, загруженный из базы данных? Если вы запишете значение поля базы данных, код ASP, встроенный в это значение базы данных, не будет выполнен.

Member 13741482

Вот почему этот встроенный код asp не будет выполнен. И как можно сделать так, чтобы это работало, или какие-то идеи.
Спасибо вам всем за помощь.

1 Ответов

Рейтинг:
2

DerekT-P

При выписке сохраненного кода asp из базы данных вам необходимо выполнять это скорее, чем просто копирование "источника", который, насколько известно ASP, просто некоторый текст.
Есть способ сделать это: использовать eval() функция. Видеть Функция eval VBScript[^]

Хотя это может решить вашу проблему, это (а) очень неэффективно и (Б) очень опасно - с точки зрения безопасности. Если у вас нет контроля над этим кодом ASP, хранящимся в базе данных, он может делать практически все, что угодно на вашем сервере. Если это не жестко закрепленное приложение с контролем доступа, я бы посоветовал не делать этого и переосмыслить дизайн вашего приложения.


Member 13741482

я пытался, но ничего не вышло. Моя переменная - <%=rs("KioskHtml")%> где внутри держится
значение базы данных



<%=rs("сегодня")%>
<%=rs("завтра")%>
<%=rs("вчера")%>


с этим кодом

```
&низкотемпературный;%
Var1 = (Rs("KioskHtml"))

ответ.писать(функции eval("переменная var1"))
%>
```
результат тот же, только текст.
Спасибо, что ответили! Ценить это.

DerekT-P

Поэтому вы должны оценивать код, а не текст. Если текст содержит такие вещи, как <%, то это не код VBScript, поэтому он не может быть оценен никаким другим способом, кроме текста. <% - это просто контекстное переключение между HTML и VBScript. Кроме того, в вашем операторе Eval вы заключили имя переменной в кавычки, поэтому вычисление текстовой строки просто вернет текст.
Изменение текста в базе данных:
Ответ.Напишите rs("сегодня")
Ответ.Напишите rs("завтра")
Ответ.Напишите rs("вчера")

Тогда вы можете сделать что-то вроде
&низкотемпературный;%
var1=rs("KioskHtml")
Ответ.Написать Eval(var1)
%>
Теперь, поскольку вы оцениваете VBScript, если вам нужно создать HTML, вы не можете просто встроить его или переключить контекст с VBScript на HTML; вам нужно написать VBScript, который будет его создавать. Так, например, если вы хотите, чтобы эти три значения находились в отдельных строках, измените значение базы данных на (например):
Ответ.Напишите rs("сегодня") & ""
Ответ.Напишите rs("завтра") & ""
Ответ.Напишите rs("вчера") & ""
Если вы не совсем согласны с этой концепцией, просто создайте простую тестовую страницу и экспериментируйте, пока не поймете, что вы делаете.

DerekT-P

ха-ха... редактор потерял код [br /] в этих последних строках; так и должно быть
Ответ.Напишите rs("сегодня") & "[br /]"
Ответ.Напишите rs("завтра") & "[br /]"
Ответ.Напишите rs("вчера") & "[br /]"
.. но, конечно, измените эти квадратные скобки на угловые скобки. Извините, если это все перепутало!

Member 13741482

Если понять, что вы упомянули, потому что это смешанный html с кодом <%%>, то нет никакого решения, я прав?
Редактор каким-то образом удалил какой-то код из моего примера.

На моем первом посту вы можете увидеть весь код textarea, причем смешанный.

И это то, что я хочу вставить в базу данных в качестве одного значения.
Спасибо вам за ваше время и счастливой жизни

DerekT-P

Ну что ж, спасибо вам за добрые пожелания! Если код в базе данных смешан, но имеет только теги <% %>, то просто удалите их перед вычислением (например, eval(replace(replace(var1,"<%=",""),"%>","")). Если между тегами есть другой HTML, то это немного сложнее, и вам нужно будет использовать что-то вроде RegEx, чтобы отделить код ASP от HTML, а затем выполнить цикл по частям, либо испуская их неизмененными (биты HTML), либо испуская вычисленные биты кода. Немного сложнее, но вполне выполнимо.