![]() |
PHP - несколько вопросов
PHP код:
Как установить поддержку ID3_Tags и PEAR вообще? :blush: Под *math*понимается некоторая функция, которая смотрит сколько было файлов в последнем каталоге, и если он заполнен, меняет адрес каталога на новый. Как написать такую функцию? |
PHP код:
Цитата:
HTML код:
<file name="userfile" /> Цитата:
Цитата:
Насчёт id3_tags не знаю. Как-то ставится, наверное :)) Цитата:
|
С ID3 проблема решилась (кажется) - скачать функции IDv3 (и не только v3) можно на сайте www.getid3.org (это если кому-то не хочется мучаться с PEAR :) ).
Спасибо за разъяснения.. Теперь вопрос на засыпку: Как интегрировать форум vBulletin в CMS? (SilverStripeCMS v0.3.1SB, если конкретно) Я расчитываю получить минимум умный ответ на глупый вопрос :) Мне хотябы надо знать в какой последовательности и какие действия выполнять, боюсь упустить что-нибудь важное... Автоматически запихать как модуль CMS с минимальной отладкой с моей стороны не получится? Если всё-таки получится, то каким образом это примерно делается? (а лучше точно ^_^ ) |
Код:
Ошибка |
Оказалось, ошибка возникла из-за использования типа SET в поле MetaData.
Видимо, неправильно его использую... То же самое, если тип ENUM. Как правильно создавать поля таких типов? |
Русскоязычная документация по MySQL. Там есть всё, что надо. И это всё легко ищется по оглавлению.
Вкратце: ... SET ("ня", "nya", "мур", "мяу") NOT NULL ... ... ENUM ("ня", "nya", "мур", "мяу") NOT NULL ... |
Превосходно! а в чём разница между SET и ENUM? (читал на php.su, так и не понял)
Можно ли сделать так, чтобы в поле MetaData (SET или ENUM) автоматически переносились соответствующие значения из полей Title, Album, Performer? И как адекватно искать по полю типа ENUM или SET? Допустим, поиск по запросу "ня" в этом поле вернёт true или false? А по запросу "мур ня"? |
В set и enum можно заносить только те значения, которые явным образом заданы при создании таблицы.
Т.е. вы создали таблицу и указали, что могут принимать такие значения ("ня", "nya", "мур", "мяу"). Далее при добавлении строк, в это поле можно вносить только данные слова и никаких других. Это контроль со стороны СУБД. Скажем, вам нужно, чтобы в списке товаров были только Москва, Архангельск и Челябинск. И никаких Урюпинсков добавить нельзя будет. Разница между set и enum в том, что enum допускает только 1 значение в строке ("ня", например), а set - несколько (начиная от нуля). Например: "ня","nya". А зачем заносить значения из Title, Album, Performer ещё куда-то? Поиск от этого быстрее не станет, а база данных разрастётся. Вы можете искать нужное название сложным запросом. Скажем, ищем слово "coutty" среди этих полей, причём 'coutty' - это не полное слово. Может быть и 'coutty на отдыхе', и 'кот coutty': Код:
"SELECT * FROM `my_table` WHERE `Title` LIKE '%coutty%' OR `Album` LIKE '%coutty%' OR `Performer` LIKE '%coutty%' ORDER BY `Title`, `Album`, `Performer`"; |
Звучит хорошо... Попробую)
А если вернуться к закачке файлов на сервер... они у меня не закачиваются в Z:\tmp\ (хотя tmp_name возвращает адрес вид Z:\tmp\XXX.tmp, но такого файла в папке я не обнаруживаю и переместить несуществующий файл функцией move_uploaded_files соответственно тоже не получается)... в чём проблема? |
Файлы загружаются ^_^
Осталась проблема с распределением их по директориям... Не догоняю условие: PHP код:
Вообще выражение "Пока ЛОЖЬ не РАВНО <ПЕРЕМЕННАЯ> присвоить функция (параметр) делать... " меня как-то пугает... уж больно неструктурно это выглядит :) (хотя на php.su приведён именно такой пример). |
Может быть неверно задаётся адрес директории?
Выведите переменную: echo $final_path перед выполнением этого ветвления. Вообще, здесь надо использовать относительный путь, а не абсолютный. Например: opendir("./images/dir0001") Цитата:
|
Добавление в базу сделано.
Теперь надо написать поиск. Поиск должен искать слова из 1 строки сразу в 3 столбцах таблицы и выдавать результаты по их релевантности. Сколько не бился - толком ничего не вышло. Подскажите, а? ![]() И/или хотя бы обясните пословно, что здесь написано: Код:
"SELECT id FROM CoreLibrary WHERE title LIKE '%". str_replace(" ", "%' OR title LIKE '%", $good). "%'" Знак % что даёт? и кавычки как-то странно стоят, аж жуть.... А вот здесь ещё непонятнее: Код:
"SELECT *, MATCH row1 AGAINST ('$search')+MATCH row2 AGAINST ('$search')+MATCH row3 AGAINST //('$search') as relev FROM CoreLibrary ORDER BY relev DESC" AGAINST? MATCH? DESC? |
Цитата:
Но согласен, скобки стоят странно. Было бы правильнее расставить их так: Цитата:
Цитата:
SELECT *, ... - выбрать все строки, удовлетворяющие условию, и справа добавить столбец relev - релевантность поиска (по нему потом идёт сортировка). MATCH колонка AGAINST ('строка поиска') - полнотекстовый поиск по столбцу. Таблицы должны иметь индекс для полнотекстового поиска. Видимо, здесь идут три подзапроса по разным столбцам, потом им задаётся общее имя (AS relev) и по этой колонке (ORDER BY relev) уже сортируется по убыванию (DESC). Хотя странно выглядит) Подробнее о полнотекстовом поиске можете почитать здесь, если интересно. Я не совсем разобрался =~_~= |
Последний запрос (с релевантностью) возвращает таблицу целиком с дополнительным столбиком "relev", в котором одни нули... Почему? $search совпадает со значениями row1 в двух строках.
И где можно получить информацию по "ERROR: "Неизвестная строка с пунктуацией @ 96"" (cобственно, интересуют описания этих самых @96, @100 и т.д.) |
Вопрос про нолики отпал... И правда, релевантность начинает подсчитываться, когда в базе 10 и более записей...
Теперь, как с ней манипулировать? Чтобы при точных запросах по нескольким столбцам таблицы выдавала только точные ответы (как в медиапоисковиках или поиске по электронным библиотекам,например) |
При точных запросах вам не нужна релевантность. Вам нужно точное совпадение:
Код:
SELECT * FROM table_name WHERE stolb1 = 'запрос' OR stolb2 = 'запрос' OR stolb3 = 'запрос' Чтобы упорядочить выдачу, добавьте в конце ORDER BY stolb_name ASC ASC - по возрастанию (указывать не обязательно, т.к. по умолчанию), DESC - по убыванию. Можно указать несколько полей через запятую, тогда упорядочивание будет производиться сначала по первому, потом по второму и т.д.(имеется в виду, что в первом поле "автор" Пушкин будет идти после Гоголя, конечно, но у самого Пушкина произведения будут упорядочены по второму полю "название"). Прим: LIKE - странная штука. Когда я делал поиск по прайсу, она находила даже запросы длиной меньше 4 символов, но что это были за результаты... Каждый раз что-то своё. И только больше 4 символов запроса находились точно. |
С этим разобрались. Я решил пока что отказаться от LIKE и всё выполнил через MATCH AGAINST.
В SQL мой запрос работает отлично, а вот в написанном PHP'шнике - шиш. Суть php-файла: PHP код:
Может я обращение к результатам запроса неправильно делаю? или что ещё? |
Вы бы почитали руководство PHP касательно работы с MySQL. Там даже примеры есть.
mysql_query() и должно возвращать идентификатор ресурса. Теперь его надо обработать: PHP код:
|
Тьфу ты, точно... Вылетело из головы >_<
Спасибо! |
Цитата:
Поэтому придётся использовать конструкцию типа foreach ($array as $value) { *** последовательная обработка элементов строки*** } |
Цитата:
Цитата:
|
Вот и я думал, что я их знаю... А шиш.
PHP код:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in Z:\home\non-existent-host\folder01\search.php on line 25 |
ManHack, уберите кавычки
PHP код:
|
Пробовал без кавычек.
Белый экран и пусто. Нифига не выводит >_< Белый экран имеет следующий html-код: HTML код:
<table><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr> |
Так. Всё. С этим разобрались. Оказывается надо писать имена полей с точностью до регистра букв.
Теперь другой вопрос: Как вывести кусок html-куда? (около 800 строк, каждую обрамлять в echo "<строка>" задолбаюсь). Есть ли какой-нибудь быстрый и лёгкий способ это всё красиво оформить? И с точки зрения быстродействия правильный. Вообще, просвятите меня пожалуйста, лучше ли в php-файл запихивать html с использованием переменных из php или в html-страницу впихивать ссылку на php, который вернёт результаты своей работы по запросу? Второе кажется более целесообразным, т.к. не придётся для каждого запроса генерить один и тот же html (а он не маленький, 800 строк) -> нагрузка на сервер меньше, но первый вариант я не понимаю как сделать... как-бы надо запускать php-файл с параметрами и забирать обратно результаты? А как это сделать? Я делаю поиск. |
Цитата:
PHP код:
Цитата:
Цитата:
"SELECT * FROM table_name ORDER BY field_name LIMIT 0,20" Разумеется, у вас там своя выборка. SELECT * - это для примера. ORDER BY field_name - упорядочивание по столбцу, чтобы... вы и сами знаете, для чего нужно упорядочивание :) LIMIT 0, 20 - вывести 20 строк, начиная с нулевой. Или так: LIMIT 100, 20 - вывести 20 строк, начиная с 100. |
За LIMIT спасибо, пригодится :)
У меня оформление динамического (искомого) содержания страницы не маленькое... Разметка классов, описаных в CSS, да и выводить надо 5 полей не простым текстом... + к каждому результату крепится ссылка на небольшое флеш-приложение, с параметрами для просмотра этого конкретного результата. Если кликаем по другому результату, флешка исчезает в месте предыдущего клика и появляется в месте нового с параметрами для нового результата. Примерно так... В общем, на оформление вывода 1 результата уйдёт куча строчек echo "<HTML>"; Вот я и интересовался, стоит ли заниматься оформлением вывода результата (общий шаблон для всех выводимых результатов) в php-файле поиска или это делается по-другому и в другом месте? |
Можно сэкономить, используя AJAX, но здесь вы сами разбирайтесь - в двух словах не расскажешь... Тут уж вам решать - экономить ли трафик пользователей и разбираться с AJAX'ом, или же трафик не экономить, но сделать попроще. Чаще всего выбирают вариант "попроще")
Не обязательно, кстати, писать echo "<html>"; Можно делать "разрывы" в скрипте: Шаблон сделать - тоже можно. Если там меняется только заголовок, таблица и ссылки, то вместо них вставьте в заранее подготовленный файл какие-нибудь тэги вроде [[TITLE]] [[TABLE]] [[LINKS]]. А потом в этом файле "найти и заменить" скриптом. Это так, самые простые шаблоны, которых часто бывает достаточно :) |
Вот допустим в php-файле нужно вывести html строчку, которая забирает значения переменных ИЗ ЭТОГО ЖЕ php-файла.
К примеру, строчка такова: Код:
<title><?php echo $search . " results page" . " | DB search | " . $slogan; ?></title> Вопрос: КАК это сделать? Можно конечно вставку HTML-кода вынести за скобки <?php ... ?>, но тогда значения переменных потеряются безвозвратно... :( |
Цитата:
Используйте JavaScript-код или вставляйте форму со скрытыми полями <input type="hidden" name="var_name" value="var_value" />, если хотите сохранить какие-то переменные. В зависимости от целей, можно и дописывать переменные к ссылкам в виде get-запроса link.php?a=1&b=2&c=3. |
Цитата:
Как я помню, добавление переменной к ссылке делается добавлением в тег <form action="search.php"> параметра id="querty"... тогда при отправке запроса пользователем браузер выдаст ссылку вида yourhost.com/search.php?querty=введённые+пользователем+слова Правильно понимаю? А как в PHP эту ссылку обработать? |
То что делать это надо методом get, это я понял... но адекватного разъяснения в мануалах не нашёл, в одном месте вообще предлагают откомпилировать некий сценарий на Си:
Код:
#include <stdio.h> // Включаем функции ввода/вывода |
Цитата:
HTML код:
<form action="search.php" method="post"> Но ведь к каждой ссылке не приделаешь форму (да ещё и избавление от кнопки влечёт за собой добавление JavaScript'а), поэтому можно напрямую генерировать такие ссылки php-скриптом. Не понимаю, какие в этом сложности. PHP код:
|
HTML код:
<link rel="stylesheet" href="/css/lamda.css?4" type="text/css" /> |
Это обход кэша. Разработчик сайта неожиданно решил поменять дизайн, а дожидаться, пока у всех из кэша старая css'ка уйдёт - неизвестно сколько дней/месяцев/лет. Поэтому добавляет после вопроса случайное число (обычно просто на 1 больше, чем предыдущее). Адрес поменялся - браузер качает файл заново, дизайн сразу отображается новый.
И JS - то же самое. Можно и к картинкам дописывать, чтоб из кэша не брались. |
Лихо :)
Тогда другой вопрос... уж менее по PHP... Как узнать, какие у конкретного swf-флеша есть параметры для запуска (или ему ещё как-то информация извне может поступать?)... Декомпилировал swf-файл, но ответа на свой вопрос не получил, только кучу ужасающих скриптов и ресурсы... И ещё один вопрос: как запускать swf-файл с параметрами? (можно через jQuery или swfobject, если по-другому никак).... Но как это делать через библиотеку jQuery с плагином jquery.flash.js или через swfobject.js мне тоже интересно :) ПС> И ещё один вопрос... совсем не в тему... но как вКонтакте на страницах с музыкой аудиоплеер подгружается? там есть формочка с onclick="return operate (разные параметры, среди которых инфа о пользователе и медиафайле)" - это я понял. Но как плеер вызывается и как там, "внутри" параметры передаются понятно очень смутно... а главное как этот плеер исчезает, когда кликаешь по другой записи и появляется около новой? О.о http://vkontakte.ru/js/audio.js Сама флешка плеера ещё страшнее "изнутри"... Но мне всё-равно очень хочется разобраться в их индийском коде (разумеется исключительно в ознакомительно-познавательных целях), и было бы не плохо, если б вы мне подсказали... |
Кажется я задал слишком сложный или слишком глупый вопрос..... ТТ_ТТ
|
Спрошу попроще вопросик... Как сделать так, чтобы результаты поиска выдавались постранично, например, 20 результов на одну страничку?
Только сделать нормально, чтобы можно было переходить на любую страницу по их номерам, а не переключаться только между соседними. С prev- и next page я уже сделал из любопытства, надо доработать :) Как обычно постраничный вывод делают? Меня алгоритм интересует, не хочу на собственных косяках учиться)) Для пущего интереса предположим, что религия запрещает изуродовать ссылку дополнительным параметром ?page=<значение> :) Есть ли другие адекватныес способы? |
Цитата:
А вообще - если вы знаете ActionScript, то вам проще написать свой плеер на флэше. Если представления не имеете, то и рассказывать бессмысленно. Ведь так? Цитата:
Цитата:
Цитата:
Либо search5.html или что-то подобное. В этом случае mod_rewrite для apache используется. |
Время: 22:02. |
Время: 22:02.
© OSzone.net 2001-