(данный мануал был извлечен на свет из древнего архива, авось кому пригодится)
Оглавление:
ASP и VBScript:
Как же ввести данные для обработки?
Серверные переменные и чем они полезны.
Повторяющиеся элементы на страницах или SUB (Подпрограммы).
Повторяющиеся элементы на страницах или SSI.
Немного JavaScript:
ASP и SQL:
Продолжение (изменение, удаление, запись).
Чего можно добиться от SQL при помощи MSO XP Access (.mht)
Дополнительные приложения:
Управление через WEB интерфейс:
Active Directory, Ping, Event Log и Services
Все материалы были собраны на сайте библиотеке http://msdn.microsoft.com
Вступление:
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> - параметры заносятся после вопросительного знака "?", а если их много, то разделяются знаком "&" без пробелов, лучше и правельнее если использовать "&".
Прим.: name.asp?a=1&b=2&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 IfLoop%>2. For To Next
<%For i = 0 To 10 Step 1 ' Step - не обязательный параметр Response.Write(i & "<BR>") If i > 8 Then Exit For End IfNext%>В результате, в обоих случаях, будут выведены числа от 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 weakweak = Array("Понедельник" , "Вторник" , "Среда" , "Четверг" , "Пятница" , "Суббота" , "Воскресенье")Dim monsmons = 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 thenresponse.write "<a href="&your_link&">"&your_link_text&"</a>"elseresponse.write "<b>"&your_link_text&"</b>"ens if%>И надо это вывести много раз. Тогда делаем следующее:
Пишем SUB:
<%SUB links(your_link,your_link_text)if x<>y thenresponse.write "<a href="&your_link&">"&your_link_text&"</a>"elseresponse.write "<b>"&your_link_text&"</b>"ens ifend 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, а главное это то, что начинается повышенная загрузка памяти сервера. Будьте остарожны при использовании данной связки...)
Что можно и полезно:
В страницах 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.lengthalert("Длина вашего объявления "+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-mailavar 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 variablesvar 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.htmlvar clientPC = navigator.userAgent.toLowerCase(); // Get client infovar clientVer = parseInt(navigator.appVersion); // Get browser versionvar 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 tagsbbcode = new Array();bbtags = new Array('<B>','</B>','<I>','</I>','<U>','</U>','"','"');imageTag = false;// Вывод подсказки в поле подсказокfunction helpline(help) {document.REPLIER.helpbox.value = eval(help + "_help");}// Replacement for arrayname.length propertyfunction 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 arrayfunction 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 arrayfunction 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=0document.REPLIER.selectsize.selectedIndex=2document.REPLIER.body.focus();return;}document.selection.createRange().text = bbopen + theSelection + bbclose;document.REPLIER.selectcolor.selectedIndex=0document.REPLIER.selectsize.selectedIndex=2document.REPLIER.body.focus();return;} else {document.REPLIER.body.value += bbopen + bbclose;document.REPLIER.selectcolor.selectedIndex=0document.REPLIER.selectsize.selectedIndex=2document.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 nameswhile (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 :Ddocument.REPLIER.body.focus();return;}if ((clientVer >= 4) && is_ie && is_win)theSelection = document.selection.createRange().text; // Get text selectionif (theSelection) {// Add tags around selectiondocument.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 clickedfor (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 nameswhile (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 tagsif (imageTag && (bbnumber != 14)) { // Close image tag before adding anotherdocument.REPLIER.body.value += bbtags[15];lastValue = arraypop(bbcode) - 1; // Remove the close image tag from the listdocument.REPLIER.addbbcode14.value = "Img"; // Return button back to normal stateimageTag = false;}// Open tagdocument.REPLIER.body.value += bbtags[bbnumber];if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tagarraypush(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/130function 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')"> Дата: <em><%= dt %></em><input type="hidden" name="dt" value="<%= dt %>"> <em><%= who %></em><input name="who" type="hidden" value="<%= who %>"></td></tr><tr><td bgcolor="#FFFFFF" onMouseOver="helpline('ud')" onMouseOut="helpline('d')"> Ваш e-Mail: <em><%= mail %></em><input name="mail" type="hidden" value="<%= mail %>"></td></tr><tr valign="top"><td bgcolor="#FFFFFF" align="right"> <font size="-2">Форматировать:</font> <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')"> <font size="-2">Вставить:</font> <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')"> </td></tr><tr><td bgcolor="#FFFFFF" align="right"> <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> <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">Закрыть теги</a> </td></tr><tr><td bgcolor="#FFFFFF"> <font size="-2">Подсказки:</font> <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), где все написанно по-русски.
С чего начать (чтение):
Во первых, надо иметь настроенный 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=0dbcount=rsscore.RecordCount ' последние 3 строки присваивают dbcount значение количества записей
%>Конечно же, чтобы эти данные увидеть, нужно следующее:
Удобнее всего использовать таблицы:
<table><%Do while not RS.EOF ' организуем цикл до тех пор, пока не достигним конца данныхfio=RS("fio") ' вызываем значение из столбца fiobday = RS("bday") ' вызываем значение из столбца bday' Все данные беруться по очереди...
%><tr> <td> </td> <td width="20" height="25"> </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 = truemsg.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) & textmsg.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г.