Вторник, 26 Ноября 2024, 18:15

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
возникло 2 не больших вопроса (запросы к БД и скрытие сылок)
InsaneДата: Суббота, 20 Августа 2011, 12:17 | Сообщение # 1
был не раз
Сейчас нет на сайте
Доброе время суток !
Во-второй раз решил заняться написанием браузерки и вот пока переписывал ранее написаный код увидел две проблемы (не знаю, или знаний стало больше или зрение лучше smile ... но не в этом суть) ... так вот:
1. Появилась необходимость полностью скрыть от пользователя пути к файлам (то бишь сылки)
Теперь более подробно ... переходы по локациям построены просто на сылках с прикрученым к ним таймером (для задержки переходов), но проблема в том, что путь к файлу отображается в строке состояния и если его (файл) вызвать в отдельной вкладке, то игрок перенесётся к примеру на другой конец города в обход всех локаций, так как при вызове файла происходит update поля в БД которое отвечает за местонахождение игрока.
Пример: Игрок находится в "Арене", ему надо в магазин ... по нормальному ему придёться с начала перейти на "Центральную площадь" (задержка n-секунд), затем на "Торговую площадь" (задержка n-секунд) и уже потом в магазин. Но если он вызовет в отдельной вкладке файл shop.php то сразу окажется в магазине.
С начала думал прикрутить к строке состояния какую-нибудь бегущую строку (детский сад какой-то smile но всё же) ... но это не решение так как путь к файлу всё равно хоть на 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.: Если не туда и не так написал, то извеняйте нуба smile ... на форумах редко пишу ... но обязательно научусь )

Добавлено (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'];
      }
    }
}
?>
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг