За последние 24 часа нас посетили 202673 программиста и 2220 роботов. Сейчас ищут 1727 программистов ...

Подскажите оптимальный алгоритм

Тема в разделе "PHP для новичков", создана пользователем MMax, 11 окт 2008.

  1. MMax

    MMax Активный пользователь

    С нами с:
    10 окт 2008
    Сообщения:
    6
    Симпатии:
    0
    Догадываюсь что есть стандартные и оптимальные решения, поэтому решил спросить. Есть некий ресурс, который работает с MySQL - выводит из БД данные в виде таблицы. Каждую запись можно редактировать или удалить. Для этого в таблице перед каждой записью вывожу ссылки на редактирование и удаление. Но редактировать и удалять могут не все работающие с базой. Авторизация пользователей уже сделана, данные берутся из отдельной таблицы БД. В ней одно из полей - права доступа, по которому и надо ориентироваться.
    Пока я придумал три варианта:
    1. При формировании таблицы проверять права через if и в зависимости от результата выводить или нет ссылку. Но это заставит переписывать в нескольких файлах при изменении условий ограничения (вероятность небольшая, что условия изменятся, но она есть).
    2. Написать функцию, которая будет выполнять проверку и дергать ее в нужных местах.
    3. Ссылки выдавать всем, а проверку делать на страницах редактирования и удаления. Но это костыли, так не очень хочется делать.
    Все три варианта рабочие - проверил. Но ни один не кажется правельным. Подскажите, пожалуйста, как лучше?
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    2 следует из 1.
    Зачем нам повторяющиеся куски кода. Так что
     
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Завести несколько пользователей БД с разными правами.
     
  4. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    первый вариант. на уровне вывода проверяется.
     
  5. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Проверка и на уровне вывода и перед удалением!
     
  6. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    http://php.ru/forum/viewtopic.php?t=3945

    У меня 4 таблицы: Группы, Пользователи, Права, Соответствие прав, пользователей и групп

    При обновлении страницы выбираются права для пользователя и хранятся в переменной класса, и при необходимости проверяется наличие того или иного права
     
  7. MMax

    MMax Активный пользователь

    С нами с:
    10 окт 2008
    Сообщения:
    6
    Симпатии:
    0
    DarkElf Тогда при изменении условий или добавлении новой кнопки придется во всех файлах переписывать...
    Luge Я тоже так думаю, но я хотел узнать, может кроме моих вариантов есть какие-либо еще? Проверенные временем. И еще. Если писать функцию, в ней выбор как лучше организовать, через if или case?
     
  8. kostyl

    kostyl Guest

    Напиши класс вывода
    case лучше if в таком случае ну смотря как напишешь... думаю какойнить класс лучше подойдет если ты уж так беспокоишься о рефакторинге[/quote]
     
  9. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    функция и нефиг думать
     
  10. MMax

    MMax Активный пользователь

    С нами с:
    10 окт 2008
    Сообщения:
    6
    Симпатии:
    0
    Всем спасибо, функцию написал, везде где нужно прикрутил, все работает. Можно еще вопрос здесь же, чтобы новую тему не открывать?
    Начну издалека, т.к. задавая вопросы практикующим програмистам понял, что объяснять в двух словах не умею.
    Когда делаем запрос в mysql он выглядит так:
    $res=mysql_query("select * from table");
    Если надо "отфильтровать" по какому-либи полю делаем так:
    $res=mysql_query("select * from table where field1=\"test\"");
    Если по двум полям, то
    $res=mysql_query("select * from table where field1 = \"test\" && field2 = 0");

    Можно так:
    $var1="test";
    $var2=0;
    $res=mysql_query("select * from table where field1 = \"$var1\" && field2 = \"$var2\"");

    Теперь собственно сам вопрос:
    если в последнем примере понадобиться сделать такой запрос, но при этом из field2 надо взять все значения, чему должно быть равно $var2 ? Пока я делаю просто два запроса, выполняемых по условию, т.е. если надо взять все field2, то делаем
    $res=mysql_query("select * from table where field1=\"test\"");
    если из field2 надо взять отдельные значения, то
    $res=mysql_query("select * from table where field1 = \"$var1\" && field2 = \"$var2\"");
    но как-то это неправильно (ИМХО). Сейчас есть желание добавить еще одно условие, в этом случае конструкция получается очень неповоротливая.
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не видел ты ещё больших конструкций
    чем это отличается от [sql]select * from table where field1 = "test" [/sql]?

    давай ещё раз попробуй сформулировать что надо сделать
     
  12. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    логику включи.
    если тебе нужно любые field2, значит тебе посрать на field2 и значит тебе НЕ нужно его... или нужно :) думаем :)
     
  13. MMax

    MMax Активный пользователь

    С нами с:
    10 окт 2008
    Сообщения:
    6
    Симпатии:
    0
    Еще раз убедился, что объяснять я не умею. В случае если мы ищем по одному полю не учитывая остальные, у нас один запрос, если по двум полям, то у нас другой запрос. Вопрос был как сделать так, чтобы запрос был один, но в первом случае выбирались все значения одного из полей. Решение уже нашел, получилось достаточно гибкое, но если я его тут приведу, меня закидают гнилыми яблоками :) Хотя Ваше мнение было бы интересно узнать.
     
  14. karakh

    karakh Активный пользователь

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Создавай строку с запросом, дописывай where в его текст в зависимости от того что пришло и будет тебе счастье.