<?xml version="1.0" encoding="UTF-8"?>
<FotoGallery version="1.0">
<Name>Фото галерея</Name>
<Branch id="01.00.00.00.00" name="Альбомы пользователей">
<User id="01.01.00.00.00" nick_name="alekciy" password="pass" />
</Branch>
</FotoGallery>
вопрос по Java Script
Я вообще-то чайник в Java Script. у меня такой вопрос: мне нужно сделать что-то вроде яндекса, короче маленький почтовый сервер:) там самый минимум( мне не нужна полная копия яндекса ) и чтобы он работал на компе, тоесть в оффлайне. проверял логин и пароль и помещал тебя на страницу сообщений. вроде это можно организовать с помощью джава скрипт. помогите пожалуйста! только объясните по понятнее, плиз:)
Ты понимашеь значение слова "оффлайн"?
ну... как сказать-то? знвешь есть учебники оффлайн, там, журналы всякие, а мне нужна почта, а именно меня интересует создание базы данных, занесение туда данных при регистрации, проверка логина и пароля, при входе и отображение личных данных, когда войдёшь.
Тогда я совершенно не понимаю, зачем тут JavaScript? Тебе локальный mail-сервер нужен. Если ты еще хочешь почту через веб интерфейс (т.е. через браузер), то придется ещё обзавестись web-сервером (Апач к примеру), а так же написать/скачать готовый движок на каком либо языке (PHP, Perl прочее).
Опиши, пожалуйста, логическую модель конечного продукта. Т.е. кто будет писать на эту почту, КАК будет писать, на какой адрес? Для кого это все, чисто для себя или, допустим, для локальной сети?
я вообще-то программер на Visual Basice и в одном моём пректе нужен этот самый сервер, но мне не надо сервер на апаче, что нибудь попроще. мне нужно организовать виртуальный интернет, тоесть не подключаясь к нету ты выходишь в этот оффлайн интернет и серфишь его. и в нём мне нужна оффлайн почта. тоесть как установил прогу, пошёл регаться, зарегался - послал какому - нибудь сайту(по задумке оффлайн сайту) и он тебе ответит. как он будет отвечать - это я уже нашёл, с помощью специального движка с искуственным интелектом. а вот с почтой проблемы... теперь-то понятно?:)
Скажу так, JS - наихудшее средство для обработки и хранения логинов ипаролей. Дело в том, что где-то надо хранить эти записи, а т.к. JS - это открытый код, то и пути к этим записям будут видны.
На вскидку, удинственное видимое мне решение (и то далеко не лучшее) использовать cookie. А JS уже использовать в своюочередь для записи и чтения этих куков.
Не на вскидку видится другой вариант. Использование XML. Например на "сервере" создается по одному файлу XML на пользователя. Имя файла может быть в виде его пароля. Соответственно чел вводит логин, пароль, скрипт пробует открыть этот файл, читает его, сравнивает логин и пароль и т.д. В этом же файле могут хранится и личные данные.
Опять же, насчет безопасности надо думать.
А можно поподробнее, насчёт XML. А насчёт безопасности, может шифровать содержимое?
Лично я храню авторизационную информация в одном файле, а не в куче.
Ух ты, это как это? Т.е. доступ к файлу чисто скрипту с этого домена? Это значит, что просто так XML-файл не загрузить? А как это организовать, и что за 0700? Можно чуток по подробнее?
может выложишь маленький примерчик в архиве. например та же проверка пароля...
Код:
<?php
#######################
## request_xml V1.3a ##
#######################
// Автор: Сундуков Алексей aka alekciy (alekciy @ netcity.ru)
// Дата: 12.02.06
// PHP: V4.3
// Функции требующие подключения:
// XXXI. DOM XML Functions
// LIV. Функции iconv (в V5.0 не требуется, входит в ядро)
// Новое (13.02.06): V1.0 -> V1.1
// Для функции добавлены два агрумента позволяющие перекодировать возвращаемые значения.
// Новое, баг (14.02.06): V1.1 -> V1.3
// Добавлен аргумент $get_tag_content позволяющий функции возвращать или не возвращать содержимое тега.
// Добавлена логика для корректной обработки XML файлов с одинаковым содержимым.
// Баг (22.02.06): V1.3 -> V1.3a
// Исправлена логика обработки $get_tag_content = 'no' (возвращался не индексный, а ассоциативный массив с ключами none_$i).
/*
ОПИСАНИЕ:
string request_xml (string file, string name_atr, string atr_val[, string (yes|no)[, string out_charset[, string in_charset]]])
Функция запроса данных из XML файла $file с возможностью перекодирования. Запрос производится по имени тега и его атрибута.
Путь до файла $file должен быть относительным и задаваться относительно директории скрипта. Файл должен располагаться в той же
директории, что и скрипт или же в папках вложеных в эту директорию. Глубина вложений не ограничена.
Тип возращаемого одномерного массива зависит от атрибута $get_tag_content. XML файл с одинаковым содержимым для тега
обрабатывается корректно.
Атрибут $attribute должен принадлежать тегу $tag.
Предусмотрена проверка ошибок.
Если $file не является XML файлом, или его структура содержит ошибки, то ф. возвращает логическое FALSE.
Если тега с именем $tag в XML документе нет, то ф. возвращает массив c ОДНИМ элементом вида array[$tag]="none".
Если в XML файле у тега $tag нет атрибута $attribute, то ф. возращает массив c МНОЖЕСТВОМ элементов
в котором будут элементы вида array[$tag]="none".
(V1.1)
Перекодирование: аргументы являются необязательными и при вызове функции могут быть опущены.
Аргумент $out_charset определяет кодировку возвращаемых данных.
Аргумент $in_charset определяет кодировку XML файла.
(V1.3)
$get_tag_content = ('yes'|'no')
При значении этого аргумента 'yes' ф. возращает ассоциативный массив вида array['содержание_тега_$tag']='содержание_атрибута_$attribute'.
Т.е. содержимое тега $tag является ключом массива.
При значении этого аргумента 'no' ф. возращает индексный массив.
Если в XML файле имеется несколько одинаковых тегов с идеинтичным содержимым, то функция возращает содержимое только последнего из
обработанных тегов. Теперь если в файле имеются теги $tag с одинаковым содержимым, то ф. возращает такое содержимое как ключи
массива + порядковый номер. Т.е. 'содержание_тега_$tag'1, 'содержание_тега_$tag'1, ... 'содержание_тега_$tag'n
*/
function request_xml ($file, $tag, $attribute, $get_tag_content='yes', $out_charset='windows-1251', $in_charset='UTF-8') {
$xml_file=getcwd()."/$file";
if (!$doc=domxml_open_file ($xml_file)) {
return FALSE;
};
if ($get_tag_content == 'yes') {
} else if ($get_tag_content == 'no') {
} else {
$get_tag_content='yes';
};
$DomElements = $doc->document_element();
$array_elements = $DomElements->get_elements_by_tagname ($tag);
if ($array_elements == NULL ) {
$request_xml [$tag]="none";
return $request_xml;
};
$n=1;
$request_xml=array();
for ($i=0; $i < count ($array_elements); $i++) {
$element = $array_elements [$i];
if ($get_tag_content == 'yes') {
$content_tag = $element->get_content();
} else {
$content_tag = "no";
};
$atr = $element->get_attribute_node ($attribute);
if ($atr == FALSE) {
$content_atr = "none";
} else {
$content_atr = $atr->value();
};
if ($content_tag == FALSE) {
$content_tag = "none";
} else if ($content_tag == "no") {
$content_tag = $i;
};
if (!iconv ($in_charset, $out_charset, $content_atr)) {
$out_charset='windows-1251';
$in_charset='UTF-8';
};
$content_atr = iconv ($in_charset, $out_charset, $content_atr);
$content_tag = iconv ($in_charset, $out_charset, $content_tag);
if (array_key_exists ($content_tag, $request_xml)) {
$content_tag=$content_tag."_".$n;
$n++;
};
$request_xml [$content_tag]=$content_atr;
};
return $request_xml;
};
?>
#######################
## request_xml V1.3a ##
#######################
// Автор: Сундуков Алексей aka alekciy (alekciy @ netcity.ru)
// Дата: 12.02.06
// PHP: V4.3
// Функции требующие подключения:
// XXXI. DOM XML Functions
// LIV. Функции iconv (в V5.0 не требуется, входит в ядро)
// Новое (13.02.06): V1.0 -> V1.1
// Для функции добавлены два агрумента позволяющие перекодировать возвращаемые значения.
// Новое, баг (14.02.06): V1.1 -> V1.3
// Добавлен аргумент $get_tag_content позволяющий функции возвращать или не возвращать содержимое тега.
// Добавлена логика для корректной обработки XML файлов с одинаковым содержимым.
// Баг (22.02.06): V1.3 -> V1.3a
// Исправлена логика обработки $get_tag_content = 'no' (возвращался не индексный, а ассоциативный массив с ключами none_$i).
/*
ОПИСАНИЕ:
string request_xml (string file, string name_atr, string atr_val[, string (yes|no)[, string out_charset[, string in_charset]]])
Функция запроса данных из XML файла $file с возможностью перекодирования. Запрос производится по имени тега и его атрибута.
Путь до файла $file должен быть относительным и задаваться относительно директории скрипта. Файл должен располагаться в той же
директории, что и скрипт или же в папках вложеных в эту директорию. Глубина вложений не ограничена.
Тип возращаемого одномерного массива зависит от атрибута $get_tag_content. XML файл с одинаковым содержимым для тега
обрабатывается корректно.
Атрибут $attribute должен принадлежать тегу $tag.
Предусмотрена проверка ошибок.
Если $file не является XML файлом, или его структура содержит ошибки, то ф. возвращает логическое FALSE.
Если тега с именем $tag в XML документе нет, то ф. возвращает массив c ОДНИМ элементом вида array[$tag]="none".
Если в XML файле у тега $tag нет атрибута $attribute, то ф. возращает массив c МНОЖЕСТВОМ элементов
в котором будут элементы вида array[$tag]="none".
(V1.1)
Перекодирование: аргументы являются необязательными и при вызове функции могут быть опущены.
Аргумент $out_charset определяет кодировку возвращаемых данных.
Аргумент $in_charset определяет кодировку XML файла.
(V1.3)
$get_tag_content = ('yes'|'no')
При значении этого аргумента 'yes' ф. возращает ассоциативный массив вида array['содержание_тега_$tag']='содержание_атрибута_$attribute'.
Т.е. содержимое тега $tag является ключом массива.
При значении этого аргумента 'no' ф. возращает индексный массив.
Если в XML файле имеется несколько одинаковых тегов с идеинтичным содержимым, то функция возращает содержимое только последнего из
обработанных тегов. Теперь если в файле имеются теги $tag с одинаковым содержимым, то ф. возращает такое содержимое как ключи
массива + порядковый номер. Т.е. 'содержание_тега_$tag'1, 'содержание_тега_$tag'1, ... 'содержание_тега_$tag'n
*/
function request_xml ($file, $tag, $attribute, $get_tag_content='yes', $out_charset='windows-1251', $in_charset='UTF-8') {
$xml_file=getcwd()."/$file";
if (!$doc=domxml_open_file ($xml_file)) {
return FALSE;
};
if ($get_tag_content == 'yes') {
} else if ($get_tag_content == 'no') {
} else {
$get_tag_content='yes';
};
$DomElements = $doc->document_element();
$array_elements = $DomElements->get_elements_by_tagname ($tag);
if ($array_elements == NULL ) {
$request_xml [$tag]="none";
return $request_xml;
};
$n=1;
$request_xml=array();
for ($i=0; $i < count ($array_elements); $i++) {
$element = $array_elements [$i];
if ($get_tag_content == 'yes') {
$content_tag = $element->get_content();
} else {
$content_tag = "no";
};
$atr = $element->get_attribute_node ($attribute);
if ($atr == FALSE) {
$content_atr = "none";
} else {
$content_atr = $atr->value();
};
if ($content_tag == FALSE) {
$content_tag = "none";
} else if ($content_tag == "no") {
$content_tag = $i;
};
if (!iconv ($in_charset, $out_charset, $content_atr)) {
$out_charset='windows-1251';
$in_charset='UTF-8';
};
$content_atr = iconv ($in_charset, $out_charset, $content_atr);
$content_tag = iconv ($in_charset, $out_charset, $content_tag);
if (array_key_exists ($content_tag, $request_xml)) {
$content_tag=$content_tag."_".$n;
$n++;
};
$request_xml [$content_tag]=$content_atr;
};
return $request_xml;
};
?>
Которую через include-юд вставляю в другие нужные мне скрипты.
В этих скриптах обращаюсь к функции (файл с авторизационными данными foto_gallery.xml лежит в папке bd доступной для чтения и изменения только скрипту):
Код:
$nick = @request_xml ('bd/foto_gallery.xml', 'User', 'nick_name', 'no');
$password = @request_xml ('bd/foto_gallery.xml', 'User', 'password', 'no');
$password = @request_xml ('bd/foto_gallery.xml', 'User', 'password', 'no');
Пользователь в форме отправляем мне авторизационные данные ($_POST['nick'] для имени, и в ячейке $_POST['pas'] пароль). Я эти данные проверяю:
Код:
foreach ($password as $key => $val) {
if ($_POST['nick'] == $nick[$key] AND $_POST['pas'] == $password[$key]) {
$auth = 'yes';
};
};
if ($_POST['nick'] == $nick[$key] AND $_POST['pas'] == $password[$key]) {
$auth = 'yes';
};
};
И потом по флагу $auth сужу, была авторизация или нет.
Причем в цикле я проверя не просто наличия в БД такого и пользователя и пароля. Может так оказатся, что в БД есть такой пользователь и есть пароль, НО они принадлежат разным учетным записям. Поэтому если делать просто проверку на начилие записи, то скрипт авторизует пользователя, хотя были присланы и неверные данные.
Поэтому я проверку загнал в цикл с переменной $key которая мне и гарантирует, что будет проводиться не просто проверка наличия пароля и имени в БД, а будет проводиться проверка именно пары имя-пароль.
А БД значит такая была:
Код:
Фу...! Ну ты дал. Так. Как я понял надо создать файл request_xml.php. Блин а дальше вообще ни в какую:( Тут уже пхп пошёл. А страничка, то у меня HTML и как туда его вставить... опиши, пожалуйста поконкретней с хтмл куском. а то я запутался во всех этих иклуде auth или как их там. я ведь новичёк... объясни, а.
function proverka()
foreach ($password as $key => $val) {
if ($_POST['nick'] == $nick[$key] AND $_POST['pas'] == $password[$key]) {
$auth = 'yes';
};
};
я обращаюсь к ней по щелчку на кнопке вот так :
<input type=button name=vxod value=Войти onClick="proverka()">
и браузер мне пишет что на странице поизошёл script error
PHP это PHP, а HTML это HTML. У них разные задачи и цели. Если ты расчитываешь реализовать этот код на HTML+CSS+JavaScript, то глубоко ошибаешься. Вся проверка работает на PHP и ни как иначе.
Код:
function proverka()
foreach ($password as $key => $val) {
if ($_POST['nick'] == $nick[$key] AND $_POST['pas'] == $password[$key]) {
$auth = 'yes';
};
};
foreach ($password as $key => $val) {
if ($_POST['nick'] == $nick[$key] AND $_POST['pas'] == $password[$key]) {
$auth = 'yes';
};
};
я же новичёк всё-таки:(:( я прошу вас объяснить, как мне всё это организовать? скажу, даже, волшебное слово - пожалуйста...
А начать нужно с изучения PHP (знание HTML+CSS уже должно быть). По манам/хелпам или книгам. Тогда и станет понятно, как организовать.
неужели никак не льзя обойтись html и java script? тут и надо - то всего, что проверить логин и пасс, да и записать их, когда логинишься...
Нет, ни как нельзя. Учи матчасть. Вот у shaelf-а в подписи линки.
Ну хоть на этом спасибо. Буду учиться!
начал читать тутор по PHP и понял, что он мне не подойдёт! для выполнения скриптов PHP нужен установленный на компьюторе WEB - сервер, но веб сервер не входит в планы моего проекта. Мне что, ещё и сервер на Visual Basic разрабатывать, что уже проблематично! мне нужно то, что может сделать вышеописанное, если на компьюторе не установлен ни PHP ни Apache ни MySql...
Сказано же было, матчасть учи! Авторизация средствами HTML+ JS сделать нельзя! Статичные HTML страницы не могу взаимодествовать с пользователем. Должен быть серверный скрипт. Он может быть написан на чем угодно: PHP, Perl, JSP, ASP.NET и даже на C++ или же VB, но с последними двумя придятся погемороиться.
Но скрипт/программа на сервере должна быть. И WEB-сервер должне быть (готовые или самописная программа). В интрасети (интранете) тем более.
Сорри, но PHP, Perl и т.д. и т.п кроме HTML и JS мне не подходят. Чтож попробую поискать что - нибудь сам!!!
Значит ни чего у тебя не выйдет. По крайней мере безопастным это назвать будет нельзя. Потому как код HTML и JS являются публичными.
Успехов.
А кто говорил о безопасности!! в моём проекте безопасность не главное... Вот поэтому я вас и просил помочь мне именно используя HTML и JS.
Все, что тыт тут перечисляешь может работать только на сервере. Нужна БД? MySQL значит. Авторизация? WEB-сервер с движком на нем.
И на как иначе. Подругому нельзя.
JS может передать логин и пароль на какой либо сервер, установить куки, пройти авторизацию, но все это on-line происходит.
Если я правильно уловил задачу, то посредством HTML+JS её решить нельзя.
тогда придётся клепать на бейсике самопальный веб сервер :(
Нафига.... готовых решений много, не нужно изобретать велосипед. Достаточно подучить матчасть ;)
ну ладно попробую...
Матчасть - еще не главное ;)
а что главное!
Логика и здравый смысл. Ну, и конечно, умение анализировать информацию и добывать ее вообще.
Вот это и есть матчасть. Наличие у вопрошающего логике предполагаем по умолчанию. Т.к. если у пользователя нет логики и мозгов, ему ни чего не поможет.