ASP или с чем его едят...

(данный мануал был извлечен на свет из древнего архива, авось кому пригодится)

Оглавление:

ASP и VBScript:
Вступление.
Первые шаги.
Другие способы вывода данных.
Как же ввести данные для обработки?
Обработка данных. (условия)
Обработка данных. (циклы)
Преобразование переменных.
Работа со временем и датами.
Работа со строками.
Серверные переменные и чем они полезны.
Повторяющиеся элементы на страницах или SUB (Подпрограммы).
Повторяющиеся элементы на страницах или SSI.
Немного JavaScript:
Что можно и полезно.
Скрипты для работы с формами.
Еще немного JS.
Немного о стилях.

ASP и SQL:
С чего начать (чтение).
Продолжение (изменение, удаление, запись).
Чего можно добиться от SQL при помощи MSO XP Access (.mht)
Дополнительные приложения:
Почта на сайте.
Управление через WEB интерфейс:
Active Directory, Ping, Event Log и Services


    Все материалы были собраны на сайте библиотеке http://msdn.microsoft.com


ASP и VBScript:

Вступление:

ASP - это в общем-то простой язык, для начала достаточно знать всего насколько комманд. Позволяет создавать динамические страницы на сайте, или же целиком динамические сайты (главное условие - иметь свой сервак или хостинг с поддержкой ASP). В отличие от скриптов, написанных при помощи Java или VB Script, ASP выполняется полностью на стороне сервера, и исходный текст не виден конечному пользователю. Как яркий пример - Microsoft. com. Вообще-то, самым выгодным вариантом, на мой взгляд, это совмещение, ASP-Java-VB-SQL, а если учесть, что VBScript вообще является основой для ASP, то отсюда можно сделать соответствующие выводы.

Есть много статей а-ля ASP ' vs ' PHP, где PHP выигрывает по многим параметрам, но я для себя сделал выбор. ASP проще, а соответственно и удобнее. Так вот, дальше я буду описывать весь процесс борьбы самого себя с ASP.

И так, приступим. Что же можно сваять при помощи совмещения ASP-Java-VB-SQL.



Первые шаги:

Первый вопрос, который возникает у начинающих общатся с ASP, как же его воткнуть в страницу?

Существует 2 метода, с выводом и без:

<% ***** %> , где ***** - команды ASP и VBS или JS
<%= ***** %> , где ***** - переменные или константы для вывода
Прим. name.asp файла:
<html>
<head>
<title>Здесь кто-то был</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>
<% name="Вася" %>
<H1> Здесь был <%= name %>!</H1>
</body></html>
Результат:

Здесь был Вася!

А так прописываются коментарии:
<% name="Вася" ' имя посетившего эту страницу%>

Другие способы вывода данных:

Использование команды Response ( только в теге <% %>):

Response.End () - После указания данной команды вывод и обработка страницы прекращается (ну если на ней нет ошибок)
Response.Redirect (url string) - Позволяет сделать переход на другую страницу
Response.Write (string) - Выводит строку заданную string

Вообще самый удобный вариант, если нужно вывести много информайии, это сшить ее из нескольких строковых переменных:

<%
st1="Здесь был " 'присвоение значений переменным
st2="Вася"
str=st1 & st2 & "!" ' соединение их воедино
response.Write ("<H1>" & str & "</H1>") ' непосредственно вывод в документ
%>

Чаще всего такой способ я использую при составлении SQL запросов, но об это чуть позжее...

А еще есть вот такой способ:

<%
response.Write "<H1>" & vbNewLine & "Здесь был" &_
"Вася!" & vbNewLine & "</H1>"
%>


где &_ - перенос на следующую asp строку (удобно использовать, если выводить нужно много информации - нет надобности каждый раз прописывать response.Write),
vbNewLine - вставляет перенос на следующую строку в html странице

Иными словами, если в предыдущих случаях html код при его просмотре выглядел бытак:

<H1>Здесь был Вася!</H1>

то в последнем случае он выглядит так:

<H1>
Здесь был Вася!
</H1>


Очень удобно при генерации таблицы или SQL запросов с помощью asp... Чтобы потом не запутаться самому в коде...

Как же ввести данные для обработки?

Все оч. просто, для этих целей существует комманда Request

<%
a=Request("a") ' простой запрос
a=Request.Form("a") ' запрос, если передавались данные из формы
%>

Так вот, таким образом мы эти данные берем, но, спрашивается откуда, отвечаю, из адресной строки:

В теле документа, как обычно создается ссылка, но в нее заносятся параметры:
<A href="name.asp?a=Вася">Пришел Вася</A> - параметры заносятся после вопросительного знака "?", а если их много, то разделяются знаком "&" без пробелов, лучше и правельнее если использовать "&amp;".

Прим.: name.asp?a=1&amp;b=2&amp;c=3
таким образом мы передали значения параметрам a = 1, b = 2, c = 3.
Либо, если у нас есть форма, то можно передать данные через нее, причем количество и объем данных почти неагроничено, в то время как простая ссылка ограничевается 255 символами (может чуть поболее, но стараться не стоит). К тому же, при передачи данных из формы, они не видны пользоватедю, а при передачи данных из ссылки, они будут отображаться в адресной строке.
<form action="name.asp" method="post">
  <input name="a" type="text" maxlength="150">
  <input name="" type="submit" value="Отправить">
</form>
И так, при нажатии на кнопку "Отправить", у нас передадуться данные в файл name.asp

Есть еще способ получить данные, но он будет чуть ниже

Обработка данных: (условия)

Для этого существует несколько команд: If Then Else

Ее синтаксис таков:

<% If Then %>
<% ElseIf Then %>
<% Else %>
<% End If %>

Естесственно, для обработки каких-то событий нужны как сами переменные, так и то, что называется реакцией на действие:
Прим.:
<%
name=Request("a")
If name="Вася" Then
%>
Здравствуй Вася.
<% Else %>
Вы не Вася, Вас сдесь не ждут!!!
<% End If %>

Другая команда: Select Case

Ее синтаксис таков:

<% Select Case Request("a") %>
<% Case "Вася" %>
Здравствуй Вася.
<% Case Else %>
Вы не Вася, Вас сдесь не ждут!!!
<% End Select %>

Тут уже начинается полет фантазии, вариантов множество...

Обработка данных: (циклы)

Бывает так, и очень часто, что нужно вывести много данных. Спрашивается как это сделать? Оч просто, нужны циклы:

1. Do While Loop
<%
Do While i < 10
  Response.Write(i & "<BR>")
  i = i + 1
  If i > 8 Then
    Exit Do
  End If
Loop
%>
2. For To Next
<%
For i = 0 To 10 Step 1 ' Step - не обязательный параметр
  Response.Write(i & "<BR>")
  If i > 8 Then
    Exit For
  End If
Next
%>

В результате, в обоих случаях, будут выведены числа от 0 до 9 в столбик.



Преобразование переменных:

Что делать, если нужно передать числовое значение, а передается текст, или наоборот?

В VB есть замечательные команды преобразования одних переменных в другие:

CInt("12345678") - возвращает целое вместо строки

CStr(1234.5678) - возвращает строку вместо числового значения

CDate(***) - Возвращает число в формате времени из строки (день/месяц/год), где день, месяц и год - это числа

Болшее количество функций описано на сайте MSDN, здесь я привожу наиболее употребимые функции...


Работа со временем и датами:

Иногда надо вывести текущую дату или день недели, ну или еще чего нить...

1. Как узнать дату? - Для этого есть функции:
Now() - возвращает: сегодняшнее число и время
Date() - возвращает: October 19, 2003
Time() - возвращает: текущее время
Year(Date()) - возвращает: год
Month(Date()) - возвращает: месяц, по счету
Weekday(Date()) - возвращает: день недели, по счету
Day(Date()) - возвращает: число
Hour(Now()) - возвращает: час
Minute(Now()) - возвращает: минуту
Second(Now()) - возвращает: секунду
Прим.:
<%
Dim weak
weak = Array("Понедельник" , "Вторник" , "Среда" , "Четверг" , "Пятница" , "Суббота" , "Воскресенье")
Dim mons
mons = Array("Январь" , "Февраль" , "Март" , "Апрель" , "Май" , "Июнь" , "Июль" , "Август" , "Сентябрь" , "Октябрь" , "Ноябрь" , "Декабрь")
%>

<H2>Сегодня: <%= weak(Weekday(Date(),0)-1) %>, <%= Day(Date())%>,
<%= monsa(Month(Date())-1) %>, <%= Year(Date()) %></H2>
В принципе, я работал только с функциями касающимися только дат и чисел. Что касается времени, то сдесь уже все посложней, т.к. страница не обновляется постоянно, то выводить время можно в случае задействования скриптов на клиентской стороне, самый простой вариант - это использовать флеш-элемент на странице, коих примеров в сети очень много. Если есть желание можете взять один отсюда , вместе с исходником.

Работа со строками и текстом:

Как обработать ту или иную строку? Ну, это смотря что Вы с ней хотите сделать...

1. Если нужно из нее что-то вырезать, то:
Есть строка: str="Сдесь был Вася!"

Len(str) - вернет 15 - количество символов в строке
Mid(str,6,3) - вернет "был" - c 6 символа 3 символа
Left(str,3) - вернет "Сде" - 3 символа слева
Right(str,3) - вернет "ся!" - 3 символа справа
2. Если нужно сравнить:
Есть строка: str="Вася"

StrComp(str, "ВАСЯ", 1)
1 означает, что будет происходить текстовое сравнение (без учета регистра), если поставить 0, от будет происходить бинарное сравнение, т.е. знак в знак. В данном случае будет возвращен 0 - т.е. произойдет совпадение, 1 или -1 - если строки не совпали...
3. Если текст:
Если вы имеете данные, полученные из текстовой формы (<textarea name="tex"> </textarea>) и в этих данных есть переносы с помощью Enter, то:

Request("tex")
Replace(tex,chr(13) & chr(10),"<br>") ' где chr(13) & chr(10)
- двойной символ перехода на следующую строку (переход и возврат корретки).

Т.е. при выводе уже непосредственно в html выводимая строка не будет упираться в конец таблицы или самого документа, а будут вставлятся переносы строк точно также, как и вводились в форме...


Серверные переменные и чем они полезны:

Иногда для обеспечения безопасности, или просто закрытой зоны сайта, желательно производить идентификацию. Для самой идентификации нужно настроить на сервере соответствующие уровни безопастности, в настройках сайта IIS. Но это другая история, я рассматриваю только как те данные, что были внесены при входе на сайт получить...

Существует команда: Request.ServerVariables("LOGON_USER") которая и выдает информацию о зашедшем. А далее сравниваем ее с имеющимися переменными...

На самом деле Request.ServerVariables не заканчивается на LOGON_USER, существует множество переменных которые можно от тудова достать, более подробно можно посмотреть сдесь

Повторяющиеся элементы на страницах или SUB: (Подпрограммы)

Если у вас на странице повторяется по многу раз нечто, на подобии обработки запроса(ов) и вывода чего-либо на его основе, то лучше всего использовать подпрограммы.

Пример:

Есть у Вас
<%
if x<>y then
response.write "<a href="&your_link&">"&your_link_text&"</a>"
else
response.write "<b>"&your_link_text&"</b>"
ens if
%>
И надо это вывести много раз. Тогда делаем следующее:
    Пишем SUB:
<%
SUB links(your_link,your_link_text)
if x<>y then
response.write "<a href="&your_link&">"&your_link_text&"</a>"
else
response.write "<b>"&your_link_text&"</b>"
ens if
end SUB %>
А в теле, где надо вывести это все дело вставляем:
<% links "link1.asp", "link1" %>
Вот и все...

Повторяющиеся элементы на страницах или SSI: (Server Side Include)

Если у Вас на каждой странице есть повторяющийся код, будь то банер или какая другая весч, необязательно ее прописывать на каждой странице, достаточно сделать отдельный файл и прикреплять его в последствии...

Делается это так:

<!--#include virtual="banner.asp"-->

В результате если Вы его решите изменить, Вам больше не придется переписывать его на всех страницах, а только один раз.

Вставлять же его можно в любом месте на сайте...

Дополнительно, можно сделать так чтобы при определенных условиях вставлялся тот или иной файл, т.е.:

<% If a="Вася" then %>
<!--#include virtual="vasya.asp"-->
<% ElseIf a="Петя" then %>
<!--#include virtual="petya.asp"-->
<% End If %>

При этом включаемые файлы не обязательно должны быть asp файлами, могут быть и html и txt. Естественно, если вставить туда какойнибудь zip или еще чего, получиться такая ерунда, о которой Вы и не мечтали :)...

Внимание! Данная команда вставит все файлы в Вашу страницу до того как произойдет обработка всех остальных команд. Т.е. в примере выше сервер сгенерирует страницу, в которую будут включены файлы vasya.asp и petya.asp, и только после этого приступит выполнять их содержимое! (Данное поведение сервера определяется сущностью IIS, а главное это то, что начинается повышенная загрузка памяти сервера. Будьте остарожны при использовании данной связки...)



Немного JavaScript:

Что можно и полезно:

В страницах ASP, также как и в HTML, легко можно использовать JS. Я дам Вам несколько полезных, на мой взгляд, штук.

В первую очередь, это открытие страницы или запуск какого либо скрипта, во время загрузки страницы:
Используется так:

<BODY onLoad="javascript:****"> - где **** - скрипт для запуска,
<BODY onLoad="url"> - где url - адрес страницы для запуска.

В качестве скрипта, я использовал:

window.print() - запускает печать страницы таким образом, как если бы Вы запустили печать из меню Файл.
Еще один вариант - ASP в связке с JS:
До тега <body>:

<%
users=Request("users")
action=Request("action")
if users="Вася" then
  st1="scrollbars=yes,toolbar=no,location=no,directories=no,"
  st2="status=no,menubar=no,resizable=yes,"
  st3="copyhistory=yes,width=700,height=400,left=20,top=50,"
  st4="screenX=50,screenY=50,marginheight=0,marginwidth=0"
  style=st1&st2&st3&st4
  popwindow="onLoad=javascript:window.open("&action&"','','"&style&"')"
end if
%>


Сдесь action - адрес страницы для запуска...
Далее в теле <body> пишем следующее:


<body <% Response.Write(popwindow) %>>
Теперь, при вводе соответственно имен пользователя и файла запуск страницы будет сопровождаться запуском дополнительного окна...
Еще можно открыть окно следующим образом:
Пишем скрипт:
<script language="JavaScript" type="text/JavaScript">
function messageWindow(title, msg)
{
var width=(screen.width)-30 ;//"780",
var height=(screen.height)-90; //"510";
var left =(screen.width/2) - (width/2) - 5;
var top =20; //(screen.height/2) - height/2;
var styleStr = 'scrollbars=yes, toolbar=no, location=no, directories=no, status=no, menubar=no, resizable=yes, copyhistory=yes, width='+width+', height='+height+', left='+left+', top='+top+', screenX='+left+', screenY='+top+', marginheight=0, marginwidth=0';
var msgWindow = window.open("","msgWindow", styleStr);
var head = '<head><title>'+title+'</title> <link href="/vs.css" rel="stylesheet" type="text/css"></head>';
var body = '<body marginheight=0 marginwidth=0><center>'+msg+'<br><p><form><input type="button" value=" Закрыть " onClick="self.close()"></form>';
msgWindow.document.write(head + body);
}
</script>
А в теле пишем:
<a href="javascript:messageWindow('Здрасте...','Добрый день')">
Здрасте</a>
Теперь при нажатии на ссылку, появиться дополнительное окно...
Еще очень полезным бывает динамически наполнить какойнибудь скрипт, к примеру командой window.open("&action&"','','"&style&"') для открытия нескольких окон. Делается это примерно так:
<script>
/*     Все что находится в данном теге будет игнорироваться при выполнении скрипта, но сервер выполнит все asp комманды внутри собственного тега...
<%
action="" ' как в примере выше
style="" ' как в примере выше
Response.Write "*" & "/   " & " window.open('" & action & "','','" & style & "'); " & "   /" & "*"
%>
*/
</script>


В данном примере в ява скрипте стоят теги комментария, а в asp скрипте они закрываются...

Естесствено, что такую структуру удобнее и целесообразнее создавать в цикле, например сверяя имя пользователя с именем сохраненном в БД.

Скрипты для работы с формами:

Еще хочется добавить одну оочень большую штуку, - форматирование в формах, точнее вставка различной лабуды в нее...


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

<!-- Во первых - скрипт проверки (т.е. если в форму введены неверные данные или не заполнены необходимые поля, то появится сообщение об ошибке, а сома форма не сработает): -->

<SCRIPT LANGUAGE="JScript">
function proverka() {
formErrors = false;
if (document.REPLIER.body.value.length < 2) {
formErrors = "Вы должны ввести текст объявления!";
}
if (document.REPLIER.body.value.length > 100000) {
formErrors = "Вы превысили лимит в 100000 символов!";
}
if (formErrors) {
alert(formErrors);
return false;
} else {
//alert(document.REPLIER.body.value.length)
return true;
}
}
</SCRIPT>


<!-- Во вторых - выяснение количества символов в форме (допустим если у Вас ограничено количество символов, то пользователю полезно будет знать, сколько же он уже набрал символов): -->

<SCRIPT LANGUAGE="JScript">
function kolvo(){
formbody=document.REPLIER.body.value.length
alert("Длина вашего объявления "+formbody+" символов.")
}
</SCRIPT>


<!-- В третьих - простая вставка текста в форму: -->

<script language="javascript">
<!--
// Вставка ссылки, картинки, мейла в текст
// Передача данных
function PostWrite(NewCode) {
document.REPLIER.body.value+=NewCode;
document.REPLIER.body.focus();
return;
}
// Создание ссылки
var text_enter_url = "Введите полный адрес (URL)";
var text_enter_url_name = "Введите название странички";
var error_no_url = "Вы должны указать адрес (URL)";
var error_no_title = "Вы должны указать название странички";
function IBCurl() {
var FoundErrors = '';
var enterURL = prompt(text_enter_url, "http://");
var enterTITLE = prompt(text_enter_url_name, "My Webpage");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (!enterTITLE) {
FoundErrors += "\n" + error_no_title;
}
if (FoundErrors) {
alert("Error!"+FoundErrors);
return;
}
var ToAdd = "<a href="+enterURL+">"+enterTITLE+"</a>";
PostWrite(ToAdd);
}
// вставка картинки
var text_enter_image = "Ввведите полный адрес картинки (URL)";
function IBCimage() {
var FoundErrors = '';
var enterURL = prompt(text_enter_image, "http://");
if (!enterURL) {
FoundErrors += "\n" + error_no_url;
}
if (FoundErrors) {
alert("Error!"+FoundErrors);
return;
}
var ToAdd = "<img src="+enterURL+">";
PostWrite(ToAdd);
}
// вставка e-maila
var text_enter_email = "Введите email адрес до @";
var text_of_confirm1 = "Адрес @Yandex.RU ?";
var text_of_confirm2 = "Введите то что должно быть после @";
var error_no_email = "Вы должны ввести email адрес";
var emailDom00 = "@yandex.ru";
function IBCemail() {
var emailAddress = prompt(text_enter_email,"");
if (confirm(text_of_confirm1)) {
var emailDom =emailDom00;
}
else {
var emailDom = prompt(text_of_confirm2,"@");
}
if (!emailAddress) { alert(error_no_email); return; }
var ToAdd = "<a href=mailto:"+emailAddress+emailDom+">Написать письмо...</a>";
PostWrite(ToAdd);
}
//-->
</script>


<!-- Всавка сложного форматирования, т.е. вставка перед и после выделеного текста, а также закрытие тегов: -->

<script language="JavaScript" type="text/javascript">
<!--
// Форматирование текста как в ворде
// bbCode control by
// subBlue design
// www.subBlue.com
// Startup variables
var imageTag = false;
var theSelection = false;
// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
&& (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);
// Подсказки
b_help = "Жирный текст: <B>текст</B> (Alt+B)";
i_help = "Наклонный текст: <I>текст</I> (Alt+I)";
u_help = "Подчёркнутый текст: <U>текст</U> (Alt+U)";
q_help = "Кавычки: ''текст'' (Alt+Q)";
p_help = "Вставить картинку: (Alt+P)";
w_help = "Вставить ссылку: (Alt+W)";
e_help = "Вставить e-Mail: (Alt+E)"
a_help = "Закрыть все открытые теги";
s_help = "Цвет шрифта: <font color=red>текст</font>";
f_help = "Размер шрифта: <font size=-1>маленький текст</font>";
d_help = "Подсказка: Можно быстро применить стили к выделенному тексту";
ud_help = "Ваши данные";
add_help = "Нажмите после ввода и форматирования текста, чтобы добавить свое объявление";
rem_help = "Нажмите, чтобы очистить поле ввода";
cou_help = "Нажмите, чтобы подсчитать количество символов в объявлении";
// Define the bbCode tags
bbcode = new Array();
bbtags = new Array('<B>','</B>','<I>','</I>','<U>','</U>','&quot;','&quot;');
imageTag = false;
// Вывод подсказки в поле подсказок
function helpline(help) {
document.REPLIER.helpbox.value = eval(help + "_help");
}
// Replacement for arrayname.length property
function getarraysize(thearray) {
for (i = 0; i < thearray.length; i++) {
if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
return i;
}
return thearray.length;
}
// Replacement for arrayname.push(value) not implemented in IE until version 5.5
// Appends element to the array
function arraypush(thearray,value) {
thearray[ getarraysize(thearray) ] = value;
}
// Replacement for arrayname.pop() not implemented in IE until version 5.5
// Removes and returns the last element of an array
function arraypop(thearray) {
thearraysize = getarraysize(thearray);
retval = thearray[thearraysize - 1];
delete thearray[thearraysize - 1];
return retval;
}
function bbfontstyle(bbopen, bbclose) {
if ((clientVer >= 4) && is_ie && is_win) {
theSelection = document.selection.createRange().text;
if (!theSelection) {
document.REPLIER.body.value += bbopen + bbclose;
document.REPLIER.selectcolor.selectedIndex=0
document.REPLIER.selectsize.selectedIndex=2
document.REPLIER.body.focus();
return;
}
document.selection.createRange().text = bbopen + theSelection + bbclose;
document.REPLIER.selectcolor.selectedIndex=0
document.REPLIER.selectsize.selectedIndex=2
document.REPLIER.body.focus();
return;
} else {
document.REPLIER.body.value += bbopen + bbclose;
document.REPLIER.selectcolor.selectedIndex=0
document.REPLIER.selectsize.selectedIndex=2
document.REPLIER.body.focus();
return;
}
storeCaret(document.REPLIER.body);
}
function bbstyle(bbnumber) {
donotinsert = false;
theSelection = false;
bblast = 0;
if (bbnumber == -1) { // Close all open tags & default button names
while (bbcode[0]) {
butnumber = arraypop(bbcode) - 1;
document.REPLIER.body.value += bbtags[butnumber + 1];
buttext = eval('document.REPLIER.addbbcode' + butnumber + '.value');
eval('document.REPLIER.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
}
imageTag = false; // All tags are closed including image tags :D
document.REPLIER.body.focus();
return;
}
if ((clientVer >= 4) && is_ie && is_win)
theSelection = document.selection.createRange().text; // Get text selection
if (theSelection) {
// Add tags around selection
document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
document.REPLIER.body.focus();
theSelection = '';
return;
}
// Find last occurance of an open tag the same as the one just clicked
for (i = 0; i < bbcode.length; i++) {
if (bbcode[i] == bbnumber+1) {
bblast = i;
donotinsert = true;
}
}
if (donotinsert) { // Close all open tags up to the one just clicked & default button names
while (bbcode[bblast]) {
butnumber = arraypop(bbcode) - 1;
document.REPLIER.body.value += bbtags[butnumber + 1];
buttext = eval('document.REPLIER.addbbcode' + butnumber + '.value');
eval('document.REPLIER.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
imageTag = false;
}
document.REPLIER.body.focus();
return;
} else { // Open tags
if (imageTag && (bbnumber != 14)) { // Close image tag before adding another
document.REPLIER.body.value += bbtags[15];
lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the list
document.REPLIER.addbbcode14.value = "Img"; // Return button back to normal state
imageTag = false;
}
// Open tag
document.REPLIER.body.value += bbtags[bbnumber];
if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
arraypush(bbcode,bbnumber+1);
eval('document.REPLIER.addbbcode'+bbnumber+'.value += "*"');
document.REPLIER.body.focus();
return;
}
storeCaret(document.REPLIER.body);
}
// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
function storeCaret(textEl) {
if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}
//-->
</script>


<!-- Наконец форма, над которой производятся все измывания:
т.к. форма писалась для работы с SQL, то в ней присутствуют элементы, а если быть точнее переменные, от SQL таблиц. Я оставляю в том виде в котором оно есть на самом деле, ну а в последствии Мы с Вами разберем SQL по подрбнее. -->

<form action="***.asp" method="post" name="REPLIER" onSubmit="return proverka()">
<table width="95%" border="0" align="center" bgcolor="#fafafa" cellspacing="1" cellpadding="1">
<tr>
<td bgcolor="#FFFFFF" onMouseOver="helpline('ud')" onMouseOut="helpline('d')">
&nbsp;Дата: <em><%= dt %></em>
<input type="hidden" name="dt" value="<%= dt %>">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<em><%= who %></em>
<input name="who" type="hidden" value="<%= who %>">
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" onMouseOver="helpline('ud')" onMouseOut="helpline('d')">
&nbsp;&nbsp;&nbsp;&nbsp;Ваш e-Mail:&nbsp;<em><%= mail %></em>
<input name="mail" type="hidden" value="<%= mail %>">
</td>
</tr>
<tr valign="top">
<td bgcolor="#FFFFFF" align="right"> <font size="-2">Форматировать:</font>&nbsp;
<input tabindex="1" type="button" accesskey="b" name="addbbcode0" value=" B " style="font-weight:bold;width:30px;color:blue" onClick="bbstyle(0)" onMouseOver="helpline('b')" onMouseOut="helpline('d')">
<input tabindex="1" type="button" accesskey="i" name="addbbcode2" value=" I " style="font-style:italic;width:30px;color:blue" onClick="bbstyle(2)" onMouseOver="helpline('i')" onMouseOut="helpline('d')">
<input tabindex="1" type="button" accesskey="u" name="addbbcode4" value=" U " style="text-decoration:underline;width:30p;color:blue" onClick="bbstyle(4)" onMouseOver="helpline('u')" onMouseOut="helpline('d')">
&nbsp;&nbsp; &nbsp; <font size="-2">Вставить:</font>&nbsp;
<input tabindex="1" type="button" accesskey="q" name="addbbcode6" value=" '' " style="width:30px;color:blue" onClick="bbstyle(6)" onMouseOver="helpline('q')" onMouseOut="helpline('d')">
<input tabindex="1" type='button' accesskey="h" name="button" value='http://' style="color:blue" onClick='IBCurl()' onMouseOver="helpline('w')" onMouseOut="helpline('d')">
<input tabindex="1" type='button' accesskey="p" name="button3" value='Image' style="color:blue" onClick='IBCimage()' onMouseOver="helpline('p')" onMouseOut="helpline('d')">
<input tabindex="1" type='button' accesskey="e" name="button2" value=' @ ' style="color:blue" onClick='IBCemail()' onMouseOver="helpline('e')" onMouseOut="helpline('d')">
&nbsp;&nbsp;&nbsp;
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="right"> &nbsp;<font size="-2">Цвет шрифта:</font>
<strong>
<select id="selectcolor" name="addbbcode18" onChange="bbfontstyle('<font color=' + this.form.addbbcode18.options[this.form.addbbcode18.selectedIndex].value + '>', '</font>')" onMouseOver="helpline('s')" onMouseOut="helpline('d')">
<option style="color:black; background-color:#FAFAFA" value="#444444" selected id="0">По
умолчанию</option>
<option style="color:darkred; background-color:#FAFAFA" value="darkred">Тёмно-красный</option>
<option style="color:red; background-color:#FAFAFA" value="red">Красный</option>
<option style="color:orange; background-color:#FAFAFA" value="orange">Оранжевый</option>
<option style="color:brown; background-color:#FAFAFA" value="brown">Коричневый</option>
<option style="color:yellow; background-color:#FAFAFA" value="yellow">Жёлтый</option>
<option style="color:green; background-color:#FAFAFA" value="green">Зелёный</option>
<option style="color:olive; background-color:#FAFAFA" value="olive">Оливковый</option>
<option style="color:cyan; background-color:#FAFAFA" value="cyan">Голубой</option>
<option style="color:blue; background-color:#FAFAFA" value="blue">Синий</option>
<option style="color:darkblue; background-color:#FAFAFA" value="darkblue">Тёмно-синий</option>
<option style="color:indigo; background-color:#FAFAFA" value="indigo">Индиго</option>
<option style="color:violet; background-color:#FAFAFA" value="violet">Фиолетовый</option>
<option style="color:black; background-color:#FAFAFA" value="black">Чёрный</option>
</select>
</strong> &nbsp;<font size="-2">Размер шрифта:</font>
<select id="selectsize" name="addbbcode20" onChange="bbfontstyle('<font size=' + this.form.addbbcode20.options[this.form.addbbcode20.selectedIndex].value + '>', '</font>')" onMouseOver="helpline('f')" onMouseOut="helpline('d')">
<option value="-2">Очень маленький</option>
<option value="-1">Маленький</option>
<option value="0" selected>Обычный</option>
<option value="+2">Большой</option>
<option value="+4">Огромный</option>
</select>
<a href="javascript:bbstyle(-1)" onMouseOver="helpline('a')" onMouseOut="helpline('d')" style="font-weight:bold;font-size:10px">Закрыть&nbsp;теги</a>
&nbsp;&nbsp;&nbsp;
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF"> &nbsp;<font size="-2">Подсказки:</font>&nbsp;
<input type="text" name="helpbox" size="45" style="width:84%; font-size:10px" value="Подсказка: Можно быстро применить стили к выделенному тексту" readonly="">
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF">


<!-- А вот и сам элемент формы, в котором и будут отображатся все действия - текстовое поле -->

<textarea name="body" style="HEIGHT: 130px; WIDTH: 100%; overflow: auto;" tabindex="0"></textarea>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" align="center">
<input type="Submit" value="Добавить объявление" tabindex="0" onMouseOver="helpline('add')" onMouseOut="helpline('d')"><br>
<input type="reset" value="Очистить поле ввода" tabindex="0" onMouseOver="helpline('rem')" onMouseOut="helpline('d')"><br>
<input type="button" onClick="kolvo()" value="Подсчитать количество символов" tabindex="0" onMouseOver="helpline('cou')" onMouseOut="helpline('d')">
</td>
</tr>
</table>
</form>

Да простят меня те люди, у которых я немного повзаимствовал этот код, в первую очередь это Авакс, на чьем форуме я и обнаружил почти все скрипты по работе с формами, конечно же и он их откуда-то повзаимствовал, но, все равно я прошу прощения.

От меня сдесь только то, что мне пришлось перелопатить все эти скрипты под работу c ASP, т.к. они были изначально написаны под PHP. + Мне пришлось внедрить кое какие дополнения, для того чтобы эти скрипты работали так, как они должны работать...



Еще немного JS:

Бывает иногда нужно выкинуть предупреждение, о чем нибудь, а потом перекинуть на другую страницу.

Делается это элементарно:
<script>
alert("ВЫ НЕ ИМЕЕТЕ ПРАВ ДОСТУПА К ЭТОЙ СТРАНИЦЕ!!!")
document.location="http://www.ru"
</script>

Немного о стилях:

Была в свое время потребность в них разобраться, так вот даю самое интересное:

Все пишется в тегах style="" или <STYLE></STYLE>, сдесь я привожу интересные свойства:

1. Элемент <body>:
scrollbar-face-color : #FFF3D1;
scrollbar-highlight-color : White;
scrollbar-shadow-color : #FFC25E;
scrollbar-3dlight-color : White;
scrollbar-arrow-color : #918A74;
scrollbar-track-color : #FFF3D1;
scrollbar-darkshadow-color : #FFF3D1;
scrollbar-base-color : White;

В рез-те, получится красивый скролл, но он будет красивым только в IE, а в других браузерах нет. К тому же, данные элементы не поддерживаются W3C, т.е. не соответствуют стандарту...


2. Для элементов input, textarea, select:
color: Navy;
font: normal 90% Verdana, Geneva, Arial, Helvetica, sans-serif;
background-color: #FAFAFA;
border-color: #FFB333 #FFE1AE #FFE1AE #FFB333;
border-style: solid;
border-left-width: 1px;
border-top-width: 1px;
border-right-width: 1px;
border-bottom-width: 1px;

В рез-те, получятся не выступающие элементы форм...


3. Для многих других:
overflow:auto; - определяет, авто, нужны ли скролы или нет (в основном для текстовых полей)
scrollbars=yes; - жестко задает отображение скролов
resizable=yes; - позволяет или нет менять размер окна
width=123px; - ширина
height=123px; - высота
color=#FFFFFF - цвет
 
Да, чуть не забыл, при указании каких либо размеров, обязательно ставте в чем Вы их измеряете px , em или еще чем...

И на последок, это и многое другое (в отношении стилей), можно узнать при поиске: Каскадные таблицы стилей второго уровня (Спецификация CSS2), где все написанно по-русски.



ASP и SQL:

С чего начать (чтение):

Во первых, надо иметь настроенный SQL сервер с учетной записью администратора, отличающейся от основной...

Во вторых, нужно иметь базу данных, с которой Вы будете работать, ну и конечноже надо иметь таблицы в Вашей базе данных...

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

И так, чтобы открыть ту или иную таблицу из ASP в БД на чтение надо (так делаю я):

<%
app1="DRIVER=SQL Server;"
app2="SERVER=PROXY;"
  ' - имя сервера
app3="UId=***;"
  ' - логин администратора
app4="APP=Microsoft(R) Windows NT(TM) Operating System;"
app5="DATABASE=***;"
  ' - имя БД
app6="UseProcForPrepare=0;"
app7="User Id=***;"
  ' - логин администратора
app8="PASSWORD=***;"
  ' - пароль администратора
Application("order_ConnectionString") = app1&_
app2&app3&app4&app5&app6&app7&app8
  ' - сшиваем переменные
set rsscore = Server.CreateObject("ADODB.Recordset")
  ' - если мы хотим узнать количество записей в одной из таблиц БД, применяя при этом условия, то используем эту команду. (необязательно)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("order_ConnectionString")
  ' - эти 2 строки обязательны, они открывают доступ...

sql = "SELECT * FROM table1 WHERE znach=1 ORDER BY id DESC"
' эта строка описывает следующие команды SQL:
SELECT - выбор
* - все, можно использовать конкретные названия столбцов, перечисляя их через запятую
FROM table1 - соответственно из таблицы table1
WHERE znach=1 - ГДЕ znach (значения в столбце znach) равен 1 (необязательно)
ORDER BY ident DESC - упорядочить по значениям столбца id по убыванию (если не писать DESC, то по умолчанию идет возрастание) (необязательно)
Set rs = Conn.Execute(sql) ' непосредственное выполнение SQL комманд rsscore.Open sql,conn,3,1
dbcount=0
dbcount=rsscore.RecordCount
' последние 3 строки присваивают dbcount значение количества записей
%>
Конечно же, чтобы эти данные увидеть, нужно следующее:
Удобнее всего использовать таблицы:

<table>
<%
Do while not RS.EOF ' организуем цикл до тех пор, пока не достигним конца данных
fio=RS("fio") ' вызываем значение из столбца fio
bday = RS("bday") ' вызываем значение из столбца bday

' Все данные беруться по очереди...

%>
<tr>
  <td>&nbsp;</td>
  <td width="20" height="25">&nbsp;</td>
  <td width="336"><%= fio %></td>
  <td><%= bday %></td>
</tr>
<% RS.MoveNext ' Переходим к следующей записи
Loop%>
</table>

Еще иногда бывает необходимо сделать перекрестный запрос, т.е. когда данные беруться из нескольких таблиц, по определенному принципу. Самый удобный вариант - это использовать MS Access для этого. Так нагляднее делается запрос, а потом просто вставляете строки из него в ASP страницу. Я именно таким способом и пользуюсь, на самом деле он самый удобный из всех, а к тому же если использовать Office XP, то получаешь много полезных фичей. В частности, возможность удаленного управления БД. Мануал по этому вопросу можно найти Здесь (ссылка пока не работает)


Продолжение (изменение, удаление, запись):

Так же в SQL можно и записывать данные:

sql="UPDATE table1 SET users='" & Request.form("users") & "', action='" & Request.form("action") & "' WHERE id=" & Request("id") ' обновление, замена одних данных на другие с данным ID

sql="DELETE FROM table1 WHERE id=" & request("id") ' удаление строки данных в таблице с данным ID

sql="INSERT INTO table1(users,action) VALUES('" & Request.form("users") & "','" & Request.form("action") & "')" ' вставка новых данных


Дополнительные приложения

Почта на сайте:

В частности, бывает нужно организовать почту прямо на сайте, исключая почтовые программы полностью... Для этих целей есть один замечательный проэкт, JMail (взять можно сдесь), он бесплатен, и многое чего еще. Но там вся документация на английском, я приведу пример с коментариями, а Вы решайте сами...

В первую очередь необходимо сделать файл с формой, в которой будут вводиться все данные, кто кому и что, а потом файл обработки, который и будет отправлять:

Файл mail.asp

<form action="smail.asp" method="post">
Ваша фамилия: <input name="fio" type="text"><br>
Ваш e-Mail: <input name="from" type="text"><br>
Кому фамилия: <input name="toon" type="text"><br>
Кому e-Mail: <input name="too" type="text"><br>
Тема: <input name="theme" type="text"><br>
<textarea name="body" style="HEIGHT: 130px; WIDTH: 90%; overflow: auto;"></textarea><br>
<input name="" type="submit" value="Отправить"><br>
<input name="" type="reset" value="Очистить все"><br>
<input name="return" type="hidden" value="mail.asp">
</form>


Файл smail.asp

<%
set msg = Server.CreateOBject( "JMail.Message" ) ' запуск приложения сервера
msg.Logging = true
msg.Silent = true
' запрос всех переменных
return=Request.Form("return")
from = Request.Form("from")
fio = Request.Form("fio")
too = Request.Form("too")
toon = Request.Form("toon")
theme = Request.Form("theme")
text=Request.Form("body")
body = fio & chr(13) & chr(10) & "------------------------------------" & chr(13) & chr(10) & chr(13) & chr(10) & text

msg.Charset = "windows-1251" ' кодировка письма
msg.From = from ' от кого
msg.FromName = fio ' мейл от кого
msg.AddRecipient too, toon ' кому и мейл
msg.Subject = theme ' тема
msg.Body = body ' текст письма
' Дабы избежать ошибок при отправке вводится следующа строка
If not msg.Send( " *** " ) then ' адрес вашего почтового сервера
    Response.write "<pre>" & msg.log & "</pre>" ' вывод полного лога ошибки
    Response.Write("<br><br><h1>Mail error.<br>Ошибка сервера!<br>Сообщите администратору.</h1>")
    Response.Write("<br><br><a href="&return&">Вернуться назад</a>")
else
    response.Redirect(return) ' возврат к написанию
end if
%>

Управление через WEB интерфейс: Active Directory, Ping, Event Log и Services

Иногда бывает нужно изменить учетную запись пользователя, а сервер далеко, или другая ситуация - существует система с БД, где фиксируются учетные записи пользователе, есть Active Directory, и еще чего нибудь, а надо сделать так, чтобы ввел один раз и больше не заморачивался...

Для этих целей административного управления системой с удаленным доступом можно использовать данный компонент. Под общим названием NT Utilities for ASP. Сайт разработчиков Здесь.


Последний раз редактировалось 6 апреля 2004г.
Comments