![]() |
PHP & MySQL вопросы
вопросов наверно будет много:), поэтому так назвал тему.
пока окончательно созрел только один. есть база. надо вывести определенное количество строк (например 10) начиная с определенной (номер ее записан в переменной) вверх по таблице. Если че-нить непонятно, попробую объяснить:). |
добавление:
лучше это делать через цикл - в переменную поочереди чтобы записывались строки как массив и можно было бы в этом же цикле выводить определенные поля строки. Т.е вся проблема в функции доступа к базе. |
SELECT * from table WHERE id<$i-1 AND id>$i+1
|
или
SELECT * from table LIMIT $id-1, 3; (выбрать 3 ряда начиная с предстоящего номеру $id) кстати, по моему Стас перепутал порядок - то что он написал выберет все ряды кроме $id и двух рядом с ним. |
Вчера, пока не прочитал ваши предложения придумал свое решение с помощью функции:
Цитата:
Это с помощью вашего запроса: PHP код:
PHP код:
В первом же варианте плохо, что вывод идет вниз по таблице начиная с определенной строчки и если вывод начать с несуществующей строки, то ничего не выйдет. Так будет при выводе последних записей. Я уже сам запутался:). Кстати, как проверить за сколько сгенерировалась страница? Я тогда сам и посмотрю что быстрее... |
вынимать каждый раз всю таблицу? чувак, да у тебя база шлёпнется при хоть сколько-то значительной нагрузке как котёнок с двадцатого этажа, даже и не мявкнет.
во первых. правильно узнать количество записей с минимальной затратой времени и ресурсов можно так: PHP код:
PHP код:
|
Ой, да.. сорри
|
Кстати LIMIT дает не всегда желаемый результат.
|
Aeon
Спасибо.Да именно это я и хотел сделать. Меня тоже смущало постоянно вынимать базу, еще раз спасибо что подсказал как сделать:). Кстати, допустим у меня есть 18 записей, когда я перейду на вторую страницу архива $offset==20, как поведет себя скрипт - он же будет запршивать строки начиная с 20? Нормально себя ведет...:) |
medved2002
будь чуть-чуть многословнее пожалуйста;) что это за случаи? |
|
d0rM03D
нет, смотри на то как я сделал навигацию - если ты показываешь 20 записей на страницу и у тебя всего 18 записей, у тебя просто не будет показан линк на следующую страницу. |
Aeon
Я малость переделал этот кусок кода, мне надо чтобы показывались ссылки на все страницы архива. В последствие хочу сделать сортировку и ссылки на строки( да что тут говорить, это будет скрипт новостей), на новости по месяцам года. Вот как я сделал. PHP код:
А вот и вывод самих ссылок: PHP код:
|
есть, конечно. floor() для округления вниз, ceil() для округления вверх. делаем так
PHP код:
|
Почти дописал систему администрирования новостей. ВОзник следующий вопрос.
Как лучше с точки зрения безопасности и быстродействия организовать эту систему: 1. Все скрипты (удаление, изменение etc.) засунуть в главный файл администрирования. В этом файле сделать ссылки на самого себя и в зависимости например от $QUERY_STRING или других переменных переданных GET'om уже производить действия. 2. Отличается от предыдущего что код скриптов удаления, изменения новостей etc. находиться в отдельных файлах. И в зависимости все от того же вставляеться includ'om. 3. Ссылки из основного файла будут вести не на самого себя, а на те скрипты передавая различные параметры все тем же Get'om. Или стоит сделать как-то иначе? И параллельно овзникает вопрос о том как лучше ограничить доступ к этим скриптам? .htaccess, сессии, coockies, 401? |
d0rM03D
imho, зависит от личного предпочтения больше чем от чего-либо другого. Для безопасности один вариант ничем не предпочтительнее другого - могу посоветовать лишь все переменные настроек (как то, паролями для базы, итд.) положить в отдельный файл вне www-директории и использовать include() с абсолютной тропой для того чтобы его включать - таким образом даже при какой-нибудь грубой ошибке никто не сможет получить прямой доступ к файлу с паролями и чувствительной инфой. Все запросы от пользователей хорошо бы проверять на соответствие ожиданиям - не очень хорошо давать им возможность как-то ввести произвольный исполнимый код в систему... но это уже зависит от обстоятельств. А так, флаг в руки. Тут где-то пробегала ссылочка от Programmer`a на книжку "Secure PHP Development", советую скачать и прочитать, там много чего интересного и полезного... А насчёт того держать в одном файле или в нескольких, по моему просто зависит от твоего личного удобства. В более сложных проектах (особенно если над проектом работает несколько человек) бывает удобнее разбить код на отдельные файлы - легче разбираться что отвечает за что. Если проект небольшой, можно всё сделать и одним файлом - главное всегда хорошо комментировать секции чтобы через пять месяцев вернувшись к коду можно было разобратся что к чему. А для прямого ограничения доступа в Апаче ничего проще и удобнее .htaccess/.htpasswd ещё не придумано. Сессии и кукисы, это хорошо если ты пишешь свою собственную систему опознания и регистрации пользователей, но если нужно лишь ограничить доступ на страничку администрации, обычно .htaccess/.htpasswd хватает с головой. |
Цитата:
|
RaZEr
а что по твоему проще или удобнее? .htaccess/.htpasswd я могу настроить чтобы закрыть любую директорию на сервере меньше чем за пять минут... покажи мне какую-то систему которую я могу поставить так-же быстро... Я не говорю что это самый лёгкий метод для новичка, но если знаешь как это делается, он действительно самый быстрый и наименее трудоёмкий. |
Я говорю применительно к сайтам ... нередко нужно ограничить доступ к script.php?action=modify, но разрешить к script.php?action=show ... так вот тут твой htpasswd отдыхает ...
|
RaZEr
пфф... я почти всегда разбиваю административную и клиентскую секции на независимые скрипты... потому что если что-то криво написано в твоей системе (тьфу-тьфу-тьфу, не к ночи будь сказано), человек сразу получает возможность всё редактировать... а так, если оно в отдельном скрипте в отдельной директории под .htpasswd, всё таки безопасность выше... о чём собственно и спрашивал наш уважаемый d0rM03D.... (а мы с тобой тут в оффтоп ударились :grin: ) |
Цитата:
|
Цитата:
Я все-таки решил разделять... Если вы не против, то еще вопрос. Для изменения новости я вывожу форму и в ней хочу показать значения заголовка и текста новости оригинала: PHP код:
Второй вопрос если вы не против:). Есть index.php в него includ'om включены два скрипта, в каждый из которых включен один и тот же скрипт конфигурации, в котором параметры для соединения с базой и одна функция для подсчета строк в базе(функция используется в обоих скриптах). Запускаю index.php - первый скрипт вызывается нормально, а на месте второго возникает ошибка: Цитата:
|
Нельзя декларировать одну ф-ию два раза ...
|
RaZEr
т.е нельзя вставлять два раза файл в котором эта функция объявлена? Добавлено через 25 минут: Да, похоже нельзя. Ну и фиг с ним, меня спасла ф-ция include_once :) Кто-нибудь что-нибудь знает насчет первого вопроса? |
В том коде который ты запостил такого быть не может ... посмотри что ты в базу записал ... скорей всего это не "Введите текст", а только "Введите" ...
|
однако так получается... проверял не один раз.
|
Ну тогда ХЗ ... проверь поле в базе, мож длинны мало ...
|
d0rM03D
RaZEr прав, твой код должен работать нормально... можешь проверить что у тебя выходит из базы так: PHP код:
|
Вложений: 1
Прям беда. Привожу _скопированный_ кусок кода со вставкой от Aeon'a:
PHP код:
Добавлено через 3 минуты: Кстати, еще вопрос вдогонку. Хочу включать взависимости от передаваемой GETom переменной включать определенный файл. Сначала хотел использовать if и исходя из переданного значения открывать файл. Но потом подумал, что проще будет использовать такую конструкцию: PHP код:
|
Цитата:
Цитата:
|
RaZEr
хех:), я дурить вас не собираюсь, да и с графикой не умею работать:). а выложить не смогу - нет пока хоста с мускулом. Добавлено через 1 минуту: решаемая задача - меню. в зависимости от нажатого пункта вставляется скрипт раздела. |
Да понятно, что меню ... проекты разные бывают (по навороченности) ... сойдет и для меню, но используй лучше, не что написал, а:
Код:
<? include (!empty($content) && preg_match('/^\w{1,255}$/',$content) && file_exists($content.'.inc'))?$content.'.inc':'default.inc'; ?> |
d0rM03D
епсть. глюк. попробуй увеличить maxlenght=50 size=20 на скажем 100 и 60... может он просто не показывает... но Razer прав, так не бывает... |
вечно у меня все не как у людей:). При добавление новости я делаю всякие проверки:
PHP код:
|
Ты же сказал что в базе у тебя именно "Введите текст" ... и print_r вывел именно это ... причем здесь добавление ...
|
хз, я уже просто не знаю в чем дело...
|
Тфу, ты епт ... кто бы мог подумать:
Код:
maxlenght=50 size=20 value=".$row[1]."></tr> |
RaZEr
ептыыыыть, а ты ведь прав, паря... Добавлено через 5 минут: d0rM03D меняй PHP код:
PHP код:
|
нда, насколько все просто %)
RaZEr пасиб огромный! Aeon Цитата:
Я просто добавил \" вместо того чтобы вставлять html. Или html лучше не выводить через php? |
d0rM03D
дело вкуса больше чем чего-либо иного... я лично предпочитаю такие здоровые блоки через php не пихать, а кидать прямым текстом - нагрузка на сервер немного меньше, да и дебаг делать проще - например эта проблема скорее всего даже не появилась бы если бы php и html писались отдельными блоками... а так сам видишь как бывает, поди разберись где там кавычки не хватает или точка не с той стороны стоит... |
| Часовой пояс GMT +4, время: 00:35. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.