возникло 2 не больших вопроса (запросы к БД и скрытие сылок)
|
|
Insane | Дата: Суббота, 20 Августа 2011, 12:17 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Доброе время суток ! Во-второй раз решил заняться написанием браузерки и вот пока переписывал ранее написаный код увидел две проблемы (не знаю, или знаний стало больше или зрение лучше ... но не в этом суть) ... так вот: 1. Появилась необходимость полностью скрыть от пользователя пути к файлам (то бишь сылки) Теперь более подробно ... переходы по локациям построены просто на сылках с прикрученым к ним таймером (для задержки переходов), но проблема в том, что путь к файлу отображается в строке состояния и если его (файл) вызвать в отдельной вкладке, то игрок перенесётся к примеру на другой конец города в обход всех локаций, так как при вызове файла происходит update поля в БД которое отвечает за местонахождение игрока. Пример: Игрок находится в "Арене", ему надо в магазин ... по нормальному ему придёться с начала перейти на "Центральную площадь" (задержка n-секунд), затем на "Торговую площадь" (задержка n-секунд) и уже потом в магазин. Но если он вызовет в отдельной вкладке файл shop.php то сразу окажется в магазине. С начала думал прикрутить к строке состояния какую-нибудь бегущую строку (детский сад какой-то но всё же) ... но это не решение так как путь к файлу всё равно хоть на 1 секунду но проскакивает.
2. Ну и второй вопрос по поводу запросов к БД. Есть таблица "users" - думаю, зачем она нужна, объяснять не стоит ) Есть таблица "items" - хранит описание всех предметов в игре Есть таблица "items_user" - хранит предметы которые находятся у игроков в инвентаре, надетый шмот и оружие, а так же предметы игроков которые выставлены на продажу. Есть таблица "slots" - хранит id надетого шмота на перса, если слот пустой то там записан 0 Так вот ... при открытии инвентаря или инфы перса отправляется запрос к таблице "slots" оттуда получаем id шмота и в каком слоте, что находится. И вот тут получается 15 запросов один за другим, чтобы вывести из "items" картинки и описание шмота. Пример: Code if ($slot1 > 0) { // тут запрос к "items" } else { $s1 = '<img src="путь к картинке пустого слота">'; } И так 15 раз )) Но при онлайне 1000 человек это уже будет не 15 запросов, а 15000 ... плюс будет ещё и не один элемент в игре работающий на AJAX ... к примеру тот же чат. Вот я и думаю ... не многова-то ли получается ? ... и что по этому поводу будет думать сервер ))
Хотелось бы узнать Ваше мнение по этим двум вопросам.
P.S.: Если не туда и не так написал, то извеняйте нуба ... на форумах редко пишу ... но обязательно научусь )Добавлено (20.08.2011, 12:17) --------------------------------------------- Мда ... что-то многова-то букв как-то написал ) ... ну да ладно ... как всегда, стоило написать где-нибудь как тут же пришла идея по поводу решения первого вопроса ... решил прикрутить к сылкам onClick и через JS перенаправлять пользователей. Вопрос как бы снимается, но всё равно хотелось бы узнать Ваше мнение по этому поводу ... возможно есть более правильный вариант. )
|
|
| |
Ogneved | Дата: Суббота, 20 Августа 2011, 14:15 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| я не программист, я продюсер проектов, но у нас тоже стоял такой вопрос и решением стало использование классов и модулей кода php, что-то типа ООП, так очень легко делать фальшивые ссылки - как бы маскировка получается например site.ru/играть - вот ссылка которую видит игрок а по факту там обращение идет в файлу game.php, и также при ссылка например ссылка site.ru/trade/shop.php может быть заменена на site.ru/магазин .
П.С. прошу прощения за мой корявый сленг...
|
|
| |
Zeleboba | Дата: Суббота, 20 Августа 2011, 16:16 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Insane, У тебя логика хромает. 1. Скрывать ссылки ненужно, достаточно поставить проверки которые запрещают переход через несколько локаций. 2. Нужно делать один запрос в начале работы скрипта, далее в зависимости от результатов запроса через цикл выводить информацию.
Оставь контактные данные я тебе объясню как все лучше сделать.
Ogneved, Скорее всего вы использовали mod_rewrite, от него толку мало, если человек знает как это работает он все равно обойдет защиту.
|
|
| |
Insane | Дата: Суббота, 20 Августа 2011, 20:10 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Zeleboba По поводу сылок, то с начала думал сделать проверку, но решил, что всё-таки лучше один раз скрыть сылки, чем постояно потом проверять может ли пользователь туда перейти или нет ) ... но всё-таки согласен, что проверку делать надо всё равно.
А по поводу цикла, что-то не совсем понял ... если честно )
|
|
| |
Посредник | Дата: Понедельник, 22 Августа 2011, 01:41 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Приветствую!
Наверное самый нубский вопрос в этом сезоне. Есть два фрейма, в одном поля авторизации, другой фрейм, рабочая область. Вопрос, как после верификации с базой данных сделать вывод респектов и уважух, а так же ошибок во второй фрейм.
А имеем мы конструкцию типа этой:
Code { print('<SCRIPT>location.href="test.php?name='.$name.'";</SCRIPT>'); } else { echo "<p>Неверное имя или пароль.</p>"; }
Все потуги зацепится за target="frame_2" во всех проявлениях со всеми возможными кавычками провалилось. Заранее спасибо.
|
|
| |
Assasin | Дата: Вторник, 23 Августа 2011, 14:01 | Сообщение # 6 |
web-coder
Сейчас нет на сайте
| Посредник, С фреймами не работал, зато с div'ами это будет проще. Используя библиотеку jQuery Замена фреймов на div Code <div id='stage'></div> <div id='work'> <input type='text' id='userName'><input type='password' id='userPass'><input type='button' id='sendData' value='Войти'> </div> js код Code $(function(){ $("#sendData").click(function(){ var name=$("#userName").val(), pass=$("#userPass").val(); $.ajax({ type: 'POST', url: 'event.php', data: 'act=login&name='+name+'&pass='+pass, success: function(data) { $("#stage").html(data); } }); }); }); event.php Code <?php if (!empty($_POST['act'])) { if ($_POST['act'] == 'login') { $sql = mysql_query("SELECT * FROM `user` WHERE `name`='".$_POST['name']."' AND `pass`='".$_POST['pass']."'"); if (mysql_num_rows($sql) == 0) { echo "Данные введены не верно либо игрока не существует"; } else { echo "Добро пожаловать ".$_POST['name']; } } } ?>
|
|
| |