yura3d |
Отправлено: 28 ноября 2009 — 20:38
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Светлана пишет:Юра!!! Да вы же текст файла поправили, а не сообщили
У меня и без правки работало. Я там исправил только синтаксические ляпы
Светлана пишет:Ещё бы ограничение на кол-во открываемых счетов (регулируется админом) одним пользователем
Так ведь для одного пользователя не может быть более одного файла <N>.php и <N>_data.php (в данном варианте скрипта при попытке 2-ой регистрации старые данные затрутся, и в файлы запишутся новые данные)
Светлана пишет:запрет на повтор ай-пи адресов, а то ведь хитрых много и они для открытия дополнительных аккаунтов (чтоб на удачу получить деньги инвестора) будут регистрироваться как новые пользователи форума
Бесполезное это занятие, существует бесконечное множество прокси-серверов, используя которые, даже не самые сведущие в области Интернета люди (например, нынешние школьнеги-спамеры-и-тролли) спокойно обойдут подобное ограничение. Более того, это создаёт дополнительные проблемы пользователям с доступом в Интернет через NAT-шлюзы (а этим сейчас страдают все провайдеры, когда один-два-три IP адреса распределены на несколько десятков-сотен-тысяч компьютеров). Бан по маске IP адреса тоже далеко не лучший вариант, поскольку существует вероятность риска забанить всю сеть. Злоумышленник воспользуется прокси и всё равно получит доступ к Вашему форуму, а вот другие пользователи сети - возможно Ваши потенциальные клиенты - останутся заблокированными |
|
|
Светлана |
Отправлено: 28 ноября 2009 — 20:53
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
yura3d пишет:Так ведь для одного пользователя не может быть более одного файла <N>.php и <N>_data.php (в данном варианте скрипта при попытке 2-ой регистрации старые данные затрутся, и в файлы запишутся новые данные) Понятно, спасибо.
CODE:Бесполезное это занятие, существует бесконечное множество прокси-серверов, используя ..... Ну... тоже понятно...
Я, наверно, чересчур поторопилась и сохранила у себя вот этот вариант. Впредь буду терпеливее... если будет "впредь" Спасибо, Юра, раз, ещё раз, ещё много, много раз Просто гора с плеч! И всё же, что насчёт ссылки... Наверняка буду обращаться ещё не раз за помощью... Неудобно за совсем "просто так". Прикреплено изображение
|
|
|
yura3d |
Отправлено: 28 ноября 2009 — 21:37
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Светлана
Для того, чтобы запретить повторную регистрацию счёта одним и тем же пользователем (и как результат избежать перезаписывания данных) в файле reg_table.php нужно найти строку:
CODE:$fm->_GetVars(); // Получаем входящие данные
И за ней вставить строки:
CODE:// Ищем файлы с данными о пользователе в папках R и D
if (file_exists('accounts/R/'.$fm->user['id'].'.php') || file_exists('accounts/D/'.$fm->user['id'].'.php'))
// Если в одной из папок файл найден, выводим ошибку и останавливаем регистрацию
$fm->_Message('Регистрация счёта', 'Повторная регистрация счёта запрещена'); |
|
|
Светлана |
Отправлено: 28 ноября 2009 — 22:16
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
Т.е. вместо CODE:if (!$fm->user['id']) // Если пользователь не авторизован
$fm->_Message('Регистрация счёта', 'Гости не могут регистрировать счета'); // Ошибка: гости не могут регистрировать счета или перед? или после? |
|
|
Светлана |
Отправлено: 30 декабря 2009 — 10:32
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
Какую литературу можете посоветовать новичку в программировании для, хотя бы, понимания элементарных процессов в рнр и их связей? (Об освоении речи не веду.) Читая разные источники пришла к выводу, что они могут лишь запутать и публикуются лишь с целью саморекламы проггеров. И каждый из этих авторов предлагает "свой" рнр. С форумами ещё хуже: максимум "знатоков" и максимум же мусорной информации. Даже на простейший, казалось бы, вопрос, связанный с получением значений массива в таблицу, получила не нужные наставления и споры между собой "специалистов"... и всё. Может быть встречалась кому-нибудь ТОЛКОВАЯ книга, понятная для освоения даже гуманитарием и написанная о рнр, а не о личном "видении" рнр автором и очень желательно, чтобы на русском языке? Подчеркну, на русском. Спасибо.
===========================
Юрий, Александр и иже... не пора книгу написать? |
|
|
Светлана |
Отправлено: 2 января 2010 — 13:56
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
Прошу написать файл за меня. Есть вновь создаваемые файлы х.php и x_data.php. вида
CODE:<?die;?>a:2:{s:4:"name";s:5:"Raga";s:7:"regtime";i:1261317604;}
и
CODE:<?die;?>a:15:{s:4:"open";i:0;s:8:"currency";i:0;s:8:"bbalance";i:0;s:8:"recharge";i:0;s:10:
"withdr
awal";i:0;s:7:"ttrades";i:0;s:7:"balance";i:0;s:9:"chbalance";i:0;s:6:"
equity";i:0;s:8:"
chequity";i:0;s:5:"maxdd";i:0;s:5:"reldd";i:0;s:8:"prfactor";i:0;s:9:"exppayoff";
i:0;s:6:"K%stab";i:0;}
Данные из этих файлов нужно собрать в таблицу, наподобие списка пользователей на этом форуме (tools.php?action=members). По каждому из типов данных ( "open", "currency" и т.д.,) нужна сортировка. Спасибо.
С наступившим! (Отредактировано автором: 2 января 2010 — 14:23) |
|
|
yura3d |
Отправлено: 2 января 2010 — 14:12
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Светлана пишет:Какую литературу можете посоветовать новичку в программировании для, хотя бы, понимания элементарных процессов в рнр и их связей? (Об освоении речи не веду.) Читая разные источники пришла к выводу, что они могут лишь запутать и публикуются лишь с целью саморекламы проггеров. И каждый из этих авторов предлагает "свой" рнр. С форумами ещё хуже: максимум "знатоков" и максимум же мусорной информации. Даже на простейший, казалось бы, вопрос, связанный с получением значений массива в таблицу, получила не нужные наставления и споры между собой "специалистов"... и всё. Может быть встречалась кому-нибудь ТОЛКОВАЯ книга, понятная для освоения даже гуманитарием и написанная о рнр, а не о личном "видении" рнр автором и очень желательно, чтобы на русском языке? Подчеркну, на русском. Спасибо.
Смотря что понимается под элементарными процессами. Я нисколько не удивлён, что Вам на форумах предлагали различные варианты решения одной и той же задачи, поскольку в программировании в принципе подходов к реализации той или иной задачи можно предложить множество, и уже из них выбирается наиболее предпочтительный исходя из конкретных требований к работе будущей программы (или её составной части). Таковыми требованиями могут быть быстродействие, модульность, масштабируемость и т.д. Из книг даже не знаю, что можно Вам посоветовать. Наверное самым простым вариантом будет "Изучаем PHP и MySQL" (авторы Дэвис М., Филлипс Д.) В этой книге авторы полностью абстрагировались от технической стороны вопроса, поэтому, возможно, Вам такой подход будет проще. В то же время многие вопросы в этой книге не рассмотрены или рассмотрены недостаточно (а пример, приведённый для демонстрации загрузки файлов на сервер средствами PHP, вообще некорректен с точки зрения безопасности). Лучшим же вариантом литературы по PHP, на мой взгляд, являются книги Д.Котерова (в том числе и в соавторстве с другими авторами). На мой взгляд дедуктивный метод изучения, начиная от общих технических основ организации Интернета и заканчивая частными применениями PHP, позволит понять (а не просто применять то, чего не понимаешь - отсюда и Ваше представление о нелогичной организации PHP) работу PHP
Светлана пишет:Юрий, Александр и иже... не пора книгу написать?
Это вопрос не настоящего времени, по крайней мере сейчас такой цели не стоит. Тем более, как уже сказал выше, хорошей литературы по PHP, нацеленной на разные уровни подготовки изучающих, хватает (в т.ч. и в электронном виде)
Светлана пишет:Есть вновь создаваемые файлы х.php и x_data.php. вида
Вам бы желательно объединить Ваши файлы общим списком (т.е. фактически создать ещё один файл, в котором будет хранится массив с номерами x). В ExBB список пользователей (id, имя, e-mail) не генерируется на основе файлов из папки members. Этот список хранится в файле data/users.php, при открытии которого считываются первые n элементов списочного массива (в зависимости от установленного кол-ва вывода пользователей на страницу) и уже далее открываются файл вида members/N.php для заполнения таблицы оставшимися данными (город, адрес сайта, номер аськи и т.д.) Генерировать таблицу можно и без общего списка, однако в этом случае данный процесс будет более ресурсоёмким |
|
|
Светлана |
Отправлено: 2 января 2010 — 14:59
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
Спасибо за ответ.
yura3d пишет:Это вопрос не настоящего времени, по крайней мере сейчас такой цели не стоит. Тем более, как уже сказал выше, хорошей литературы по PHP, нацеленной на разные уровни подготовки изучающих, хватает (в т.ч. и в электронном виде)
Точка зрения потребителя этой литературы, того самого, на которого "нацелена" вся эта макулатура (в т.ч. в электронном виде), всё же вернее. Она не для начинающих, а уже знающих. Обыкновенное, детальное описание работы (процессов) ЕхВВ даст новичку много больше для познания РНР.
Мы, с вашей подачи, уже рассматривали коммерческую сторону проекта. Форум на мускуле, который вы сейчас ваяете с Алексанром, значительно выиграет, если подобное описание будет выпущено в виде книги (возможно, что и приложения). Тогда беспокоившее вас место на рынке будет занято сразу и без оговорок, и при минимуме затрат на раскрутку. Надеюсь, в моём скромном мнении вы увидите рационал. Цена книги (описания, как угодно) - 15-45 мин. в день... Те самые, что вы потеряете в большем кол-ве(причём - в космос) на раскручивание проекта и ответы на "идиотские" вопросы, коих будет великое множество после запуска пробной версии.
Кроме того, поклонников быстрой файловой версии для средненьких форумов не убудет, думается...
С уважением. |
|
|
Светлана |
Отправлено: 2 января 2010 — 20:51
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
yura3d пишет:Светлана
Уточните, у Вас реализация работы со списком сделана в рамках ExBB (подобно ранее выложенному мной примеру) или отдельно? Да, в рамках ЕхВВ. Изменения примерного кода минимальны:
CODE:<?php
define('IN_EXBB', 1); // Скрипт относится к ExBB
require_once('include/common.php'); // Подключаем ядро ExBB
$fm->_LoadLang('accounts');
$fm->_GetVars(); // Получаем входящие данные
if (!$fm->user['id']) // Если пользователь не авторизован
$fm->_Message($fm->LANG['Reg_acc_D'], $fm->LANG['GoNot']); // Ошибка: гости не могут регистрировать счета
// Ищем файлы с данными о пользователе в папке acc_demo
if (file_exists('acc_demo/'.$fm->user['id'].'.php'))
// Если в одной из папок файл найден, выводим ошибку и останавливаем регистрацию
$fm->_Message($fm->LANG['Reg_acc_D'], $fm->LANG['NO_Reg_D']);
if ($fm->_POST !== true) { // Если форма не отправлена
// Выводим форму
// Далее идёт подключение шаблонов
include('./templates/'.DEF_SKIN.'/all_header.tpl');
include('./templates/'.DEF_SKIN.'/logos.tpl');
include('./templates/'.DEF_SKIN.'/reg_acc_demo.tpl');
include('./templates/'.DEF_SKIN.'/footer.tpl');
}
else {
// Форма отправлена
// Действия, если форма отправлена
$l = $fm->_String('L'); // Получаем значение поля L
$p = $fm->_String('P'); // Тоже самое для поля P
$s = $fm->_String('S'); // Для
// Получаем текущие дату и время на сервере, которые будут использоваться как регистрационные для счёта
$regtime = $fm->_Nowtime;
// Создание ассоциативного массива с данными для 1-го файла
$data = array(
'name' => $fm->user['name'], // Имя пользователя на форуме
'regtime' => $regtime // Дата регистрации счёта
);
// Создание файла counts
$fm->_Read2Write($fp, 'acc_demo/'.$fm->user['id'].'.php');
// Запись содержимого массива в файл
$fm->_Write($fp, $data);
// Создание ассоциативного массива с данными для 2-го файла
$data = array(
'open' => 0,
'currency' => 0,
'bbalance' => 0,
'recharge' => 0,
'withdrawal' => 0,
'ttrades' => 0,
'balance' => 0,
'chbalance' => 0,
'equity' => 0,
'chequity' => 0,
'maxdd' => 0,
'reldd' => 0,
'prfactor' => 0,
'exppayoff' => 0,
'K%stab' => 0
);
// Создание файла acc_demo/<N>_data.php ( N - id пользователя на форуме)
$fm->_Read2Write($fp, 'acc_demo/'.$fm->user['id'].'_data.php');
// Запись содержимого массива в файл
$fm->_Write($fp, $data);
// Создаём переменную с текстом для отправки админу
$email = sprintf('Имя пользователя: %s
Логин: %s
Пароль: %s
Сервер: %s
Дата регистрации счёта: %s',
$fm->user['name'], $l, $p, $s, date('H:i:s, d.m.Y', $regtime));
// Отправка админу почты с информацией о регистрации
$fm->_Mail($fm->exbb['boardname'], $fm->exbb['adminemail'], $fm->exbb['adminemail'], $fm->LANG['Reg_acc_D'], $email);
// Вывод сообщения о завершении регистрации
$fm->_Message($fm->LANG['Reg_acc_D'], $fm->LANG['ОК_Reg_D'], 'index.php');
}
require_once('include/page_tail.php'); // Подключение части ядра ExBB, выполняющей вывод данных
?> Убрали радиокнопку и сделали регистрацию счетов отдельно - "реал" и "демо".(Отредактировано автором: 2 января 2010 — 20:59) |
|
|
Светлана |
Отправлено: 21 января 2010 — 09:24
|
Забанен
Покинул форум
Сообщений всего: 240
Дата рег-ции: Июнь 2009
Репутация: 8
[+]
|
При написании скрипта торгового терминала, отправляющего файл в папку на сервер, возник вопрос.
"Как я понимаю
a:15: - это количество "параметров" которые буду дальше в списке
дальше идет
s:4: - описание названия параметра (точнее - его длинна в символах)
"open"; - собственно название параметра
i:0; - значение параметра и тут вопрос i - это значит целое? для double должно быть d? а для строки s? а для времени? или там просто вырезается текстовая строка до ";" и подставляется как есть? или как...?"(Отредактировано автором: 21 января 2010 — 09:25) |
|
|
1Bot |
Отправлено: 21 января 2010 — 14:37
|
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009
Откуда: Днепропетровск
Репутация: 69
|
Светлана пишет:При написании скрипта торгового терминала, отправляющего файл в папку на сервер, возник вопрос.
"Как я понимаю
a:15: - это количество "параметров" которые буду дальше в списке
дальше идет
s:4: - описание названия параметра (точнее - его длинна в символах)
"open"; - собственно название параметра
i:0; - значение параметра и тут вопрос i - это значит целое? для double должно быть d? а для строки s? а для времени? или там просто вырезается текстовая строка до ";" и подставляется как есть? или как...?"
Ваш вопрос связан с алгоритмом работы функции serialize().
Чтобы понять алгоритм работы этой функции, ниже пример алгоритма этой функции, написанный на JavaScript
Спойлер (Отобразить)CODE:
1. function serialize( mixed_value ) {
2. // http://kevin.vanzonneveld.net
3. // original by: Arpad Ray (mailto:arpad@php.net)
4. // improved by: Dino
5. // bugfixed by: Andrej Pavlovic
6. // % note: We feel the main purpose of this function should be to ease the transport of data between php & js
7. // % note: Aiming for PHP-compatibility, we have to translate objects to arrays
8. // * example 1: serialize(['Kevin', 'van', 'Zonneveld']);
9. // * returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
10. // * example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
11. // * returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
12.
13. var _getType = function( inp ) {
14. var type = typeof inp, match;
15. var key;
16. if (type == 'object' && !inp) {
17. return 'null';
18. }
19. if (type == "object") {
20. if (!inp.constructor) {
21. return 'object';
22. }
23. var cons = inp.constructor.toString();
24. if (match = cons.match(/(w )(/)) {
25. cons = match[1].toLowerCase();
26. }
27. var types = ["boolean", "number", "string", "array"];
28. for (key in types) {
29. if (cons == types[key]) {
30. type = types[key];
31. break;
32. }
33. }
34. }
35. return type;
36. };
37. var type = _getType(mixed_value);
38. var val, ktype = '';
39.
40. switch (type) {
41. case "function":
42. val = "";
43. break;
44. case "undefined":
45. val = "N";
46. break;
47. case "boolean":
48. val = "b:" (mixed_value ? "1" : "0");
49. break;
50. case "number":
51. val = (Math.round(mixed_value) == mixed_value ? "i" : "d") ":" mixed_value;
52. break;
53. case "string":
54. val = "s:" mixed_value.length ":"" mixed_value """;
55. break;
56. case "array":
57. case "object":
58. val = "a";
59. /*
60. if (type == "object") {
61. var objname = mixed_value.constructor.toString().match(/(w )()/);
62. if (objname == undefined) {
63. return;
64. }
65. objname[1] = serialize(objname[1]);
66. val = "O" objname[1].substring(1, objname[1].length - 1);
67. }
68. */
69. var count = 0;
70. var vals = "";
71. var okey;
72. var key;
73. for (key in mixed_value) {
74. ktype = _getType(mixed_value[key]);
75. if (ktype == "function" && ktype == "object") {
76. continue;
77. }
78.
79. okey = (key.match(/^[0-9] $/) ? parseInt(key) : key);
80. vals = serialize(okey)
81. serialize(mixed_value[key]);
82. count ;
83. }
84. val = ":" count ":{" vals "}";
85. break;
86. }
87. if (type != "object" && type != "array") val = ";";
88. return val;
89. }
|
|
|
|