[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    http://designcollector.ru/png-v1 тут о прозрачности. Перетаскивание картинки ща доделаю.
     
  2. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    Модифицировал скрипт. Теперь при щелчке на аву пнг перетаскивается. Тебе осталось только сделать кнопку "Обрезать", при щелчке на которую будет срабатывать пхп скрипт обрезания картинки по координатам.

    Code:
    <html>
    <head>
    <script>
    
    function gebi(el) {
    return document.getElementById(el);
    }
    
    // функция вычисляет координаты объекта
    function pos(el)
    {
       var r = { x: el.offsetLeft, y: el.offsetTop };
       if (el.offsetParent)
       {
           var tmp = pos(el.offsetParent);
           r.x += tmp.x;
           r.y += tmp.y;
       }
       return r;
    }
    
    // устанавливаем координаты для пнг картинки
    function setPos() {
    
    // вычислим координаты нашей авы
    var p=pos(gebi('kn'));
    
    // переместим картинку на эти же координаты
    gebi('kv').style.left=p.x;
    gebi('kv').style.top=p.y;
    
    // показываем ее
    gebi('kv').style.display='block';
    }
    
    
    // положение курсора 
    function getCursorPosition(e) {
    
    var IE = document.all?true:false;
    
    var tempX = 0; var tempY = 0;
    
    if (IE) {
    tempX = event.clientX + document.body.scrollLeft; tempY = event.clientY + document.body.scrollTop;
    } else {
    tempX = e.pageX; tempY = e.pageY;} 
    if (tempX < 0) {tempX = 0;}
    if (tempY < 0) {tempY = 0;} 
    
    return {"x":tempX, "y":tempY};
    }
    
    // функция перемещает пнг при событии онклик на картинке
    function newsetpng(cur) {
    
    // вычислим  новые координаты пнг картинки
    var left=cur.x-gebi('kv').offsetWidth/2;
    var top=cur.y-gebi('kv').offsetHeight/2;
    
    // если новые координаты вылазят за пределы авы - сдвигаем ее максимум к краю
    var p=pos(gebi('kn'));
    
    if (left<p.x) left=p.x;
    if (top<p.y) top=p.y;
    
    if (left>p.x+gebi('kn').offsetWidth-gebi('kv').offsetWidth) left=p.x+gebi('kn').offsetWidth-gebi('kv').offsetWidth;
    if (top>p.y+gebi('kn').offsetHeight-gebi('kv').offsetHeight) top=p.y+gebi('kn').offsetHeight-gebi('kv').offsetHeight;
    
    // применяем координаты
    gebi('kv').style.left=left;
    gebi('kv').style.top=top;
    }
    </script>
    
    </head>
    <body onLoad='setPos();'>
    <img src='img/avafon.png' style='display: none; position: absolute; top: 0px; left: 0px;' id='kv' onClick='var cur=getCursorPosition(event); newsetpng(cur);'>
    Content Content Content Content<br>
    Content Content Content Content<img src='img/ava.jpg' id='kn' onClick='var cur=getCursorPosition(event); newsetpng(cur);'>
    </body>
    </html>
    
    
     
    #7622 prescott, 18 Jan 2009
    Last edited: 18 Jan 2009
    1 person likes this.
  3. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    prescott Спасибо

    А как зделать чтоб он в IE работал тоже???
     
  4. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    Вырежи строку
    Code:
    if (event.button==0) moveEnd();
    
    осталась из другого скрипта у меня когда функцию копипастил =)
     
  5. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    Почему он в Фоксе прозрачный а в IE нет???
     
  6. prescott

    prescott Elder - Старейшина

    Joined:
    28 Jul 2008
    Messages:
    132
    Likes Received:
    43
    Reputations:
    5
    Почитай там все есть.

    Тебе нужен это метод
    Ссылки на скрипт есть в статье
     
    #7626 prescott, 18 Jan 2009
    Last edited: 18 Jan 2009
    1 person likes this.
  7. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    Скрипта там нет :(
     
  8. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Есть ли в пхп API ? В нэте чет не нашёл ничего стоящего =_=
     
    1 person likes this.
  9. [Raz0r]

    [Raz0r] Elder - Старейшина

    Joined:
    25 Feb 2007
    Messages:
    425
    Likes Received:
    484
    Reputations:
    295
    API - интерфейс для программирования приложений. PHP обеспечивает средства для реализации собственных API или использования других (например WinAPI с помощью соответствующего расширения). Поясни, что ты имел в виду под API в PHP.
     
    1 person likes this.
  10. -=Static=-

    -=Static=- Banned

    Joined:
    12 Nov 2006
    Messages:
    201
    Likes Received:
    40
    Reputations:
    0
    Полагаю тебе надо на http://ru2.php.net/ сходить
     
  11. Fuckel

    Fuckel Banned

    Joined:
    16 Jan 2008
    Messages:
    274
    Likes Received:
    59
    Reputations:
    6
    почитай:
    http://www.webmakerslounge.com/useful-scripts/png-ie-fix/
    ссылка на htc:
    http://www.webmakerslounge.com/files/iepngfix.htc
    на blank.gif:
    http://www.webmakerslounge.com/files/blank.gif
     
  12. geforce

    geforce Member

    Joined:
    21 Aug 2008
    Messages:
    300
    Likes Received:
    26
    Reputations:
    -5
    Не въежаю я(((( в java тем более!((( ненавижу :(
     
    1 person likes this.
  13. Fuckel

    Fuckel Banned

    Joined:
    16 Jan 2008
    Messages:
    274
    Likes Received:
    59
    Reputations:
    6
    для использование явой и не пахнет. #7964 пост прочитай, там все понятно.
     
  14. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Встала такая задача
    нужно написать небольшой скриптик который будет взависимоти от уровня доступа пользователя разрешать ему доступ к редактированию конкретных разделов либо наоброт запрещать.
    Такой вопрос...как это лучше реализовать?
    пока алогритм такой
    пользователь логинится,в сесиии деожу его уровень доступа,на кажой паге которая нужна проверяю нужный уровень доступа либо да либо нах )
    безопасно ли хранить в сесии? есть другой какойнить способ? может там класс писать или функцию
    спс.
     
  15. rudvil

    rudvil Elder - Старейшина

    Joined:
    25 Aug 2008
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    Если узеры храняться в муслке,просто добавь ячейку с названием скажем "Group" или что-то в этом роде и в дальнейшем при заходе на определенную страницу берешь оттуда его уровень доступа и пускаешь или наоборот не пускаешь...
     
  16. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339



    если нет http-авторизации, неважно, где ты будешь хранить уровень доступа, в сессии напрямую или каждый раз брать из базы (что на мой взгляд гораздо хуже, каждый F5 - новый запрос к базе, лишняя нагрузка). Если перехватят куки - так или иначе почитают, что скрыто. Независимо от метода проверки. Вывод - конечно в сессии проще хранить, или в любом другом параметре кукисов. Другое дело просто хранить можно так, чтобы не было понятно, что эта цыферька означает. Хотя и это тоже при перехвате кук никакого особого значения уже иметь не будет. Главное админку грамотно запрятать и защитить (исключительно http-авторизация, через .htaccess и .htpasswd
     
    2 people like this.
  17. [х26]VОLАND

    [х26]VОLАND Elder - Старейшина

    Joined:
    7 Jun 2006
    Messages:
    513
    Likes Received:
    756
    Reputations:
    218
    Юзай принцип ACL (Access Control List). На каждое атомарное действие (view/insert/update/delete) над каждым объектом задай уровни доступа, которые будут опираться на GroupID юзера и храниться в базе. Затем одним простым запросом вытаскивай всю таблицу ACL и сверяй права. Можешь реализовать кэширование, если напрягает постоянное обращение к базе.

    http://ru.wikipedia.org/wiki/ACL - оно. Применяй эту концепцию к ООП.

    UPD: Данный подход позволяет в дальшейшем легко управлять правами групп через админский интерфейс, не редактируя исходники.

    UPD2: Надеюсь ты в своей CMS используешь ООП, в противном случае я тебе сочувствую.
     
    #7637 [х26]VОLАND, 19 Jan 2009
    Last edited: 19 Jan 2009
    1 person likes this.
  18. w.u.n.

    w.u.n. Member

    Joined:
    13 Dec 2008
    Messages:
    40
    Likes Received:
    26
    Reputations:
    1
    хранить в сессии ua+ip
     
  19. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Всё верно говоришь, только я бы не стал задавать уровни доступа над каждым объектом - слишком много мета-описания для однотипных объектов... Слишком этом громоздко в каждой странице проверять права доступа и т.д.). Лучше хранить уровни доступа для групп объектов - ну там статьи, новости, файлы, профили пользователей и т.д., т.е. права определяют не отдельные объекты, а группу однотипных объектов.
     
  20. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    данные о правах
    PHP:
    $query "SELECT users.user_id,users.right_id,rights.* FROM users,rights WHERE users.right_id=rights.right_id and login='$name'";
            
    $res mysql_query($query) or trigger_error(mysql_error().$query);
                if (
    $row mysql_fetch_assoc($res)) {
                    
    $_SESSION['user_id'] = $row['user_id'];
                    
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
                    
    $_SESSION['priv']=$row['right_id'];
                }
    в header.inc.php
    прописываю конкретно какие права у юзера
    PHP:
    mysql_connect('localhost','calendar','123123') OR DIE("Не могу создать соединение ");
    mysql_select_db('smart_calendar') or die(mysql_error()); 
    $query "SELECT  * FROM `rights` where right_id='$_SESSION[priv]'";
    $res=mysql_query($query) or die(mysql_error());
    while(
    $row=mysql_fetch_array($res)){
    $_SESSION['rights']=$row['rights'];
    $_SESSION['holidays']=$row['holidays'];
    $_SESSION['structure']=$row['structure'];
    $_SESSION['users']=$row['users'];
    а далее на каждой странице идет проверка
    PHP:
    if($_SESSION['holidays']=='1'){
    это вообще правильно все?

    З.Ы. это не кмска )
     
Thread Status:
Not open for further replies.