Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   PHP - несколько вопросов (http://forum.oszone.net/showthread.php?t=144298)

ManHack 05-07-2009 20:19 1159611

PHP - несколько вопросов
 
PHP код:

<?php 


$tmp_name 
' *math* '// реальный (относительный, а не абсолютный, естессно) адрес файла на сервере
$final_path $tmp_name// копия предыдущей переменной с более красивым именем


if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { // Как поля USERFILE и TMP_NAME берут свои значения? пробовал вписывать вместо tmp_name следующее: $tmp_name и final_path, что приводило к ошибке (если можно, объясни мне синтаксис процедуры is_uploaded_files, я работаю с php5)
   
echo "File "$_FILES['userfile']['name'] ." uploaded successfully.\n"// Как берётся значение NAME? это тоже стандартная переменная... и что значит \n в конце строки??
   
echo "Displaying contents\n";
   
readfile($_FILES['userfile']['tmp_name']); // что делается в этой строке?
} else {
   echo 
"Possible file upload attack: "// Что имеется ввиду под атакой? Я не совсем понимаю условия процедуры is_uploaded_files. Поясните пожалуйста.
   
echo "filename '"$_FILES['userfile']['tmp_name'] . "'.";
}
move_uploaded_file($_FILES['userfile']['tmp_name'], "$final_path"); // после исполнения php-файла, загруженных файлов в указаном каталоге (допустим, папка "content") не обнаружена, т.е. процедура move не работает или я чего-то не понимаю...

$file $_FILES['$userfile']['$tmp_name'];
$getTime date("H:i:s");
$filestat = @stat($file);
$meta id3_get_tag($file); // ID3 не установлен по умолчанию в PHP. Кажется, он устанавливается из дистрибутива PEAR? Как установить PEAR на PHP5 ? (используемый php5 встроен в Denver и используется так)
$query "INSERT INTO MediaLib(id, folder, title, albumn, performer, date, filesize, link, metadata) VALUES (NULL, " $file_dir ", " $meta['title'] . "," $meta['album'] . "," $meta['artist'] . ", " $getTime ", " $filestat['size'] . ", " $final_path ", " $meta ")";
mysql_query ($query); // должна создаться новая строка в БД (2 строки подключения к MySQL-серверу и к БД в начале скрипта я пропустил, я про них помню), где id, folder, и т.д. названия заголовков столбцов в таблице, а $file_dir - это, например, значение в столбике folder таблицы.. я правильно понимая? тут нет никаких подводных камней?

?>

В итоге, как сделать, чтобы MOVE перемещала файл в папку, адрес которой задаётся из переменной $final_path, а не выводила на экран (сейчас файл загружается в текстовом виде в окно браузера).
Как установить поддержку ID3_Tags и PEAR вообще? :blush:
Под *math*понимается некоторая функция, которая смотрит сколько было файлов в последнем каталоге, и если он заполнен, меняет адрес каталога на новый. Как написать такую функцию?

Coutty 05-07-2009 20:35 1159618

PHP код:

function count_files() {
  global 
$final_path;
  
$nya 0;
  if (
$handle opendir($final_path)) {
    while (
false !== ($file readdir($handle))) { 
        
$nya++;
    }
  if (
$nya 100) return $final_path "_new"// если та папка содержит больше 100 файлов, добавляем в конец имени _new
  
else return $final_path// иначе не добавляем
}

// а теперь вызываем эту функцию:
$tmp_name count_files(); 

Цитата:

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { // Как поля USERFILE и TMP_NAME берут свои значения? пробовал вписывать вместо tmp_name следующее: $tmp_name и final_path, что приводило к ошибке (если можно, объясни мне синтаксис процедуры is_uploaded_files, я работаю с php5)
userfile - это браузер посылает:
HTML код:

<file name="userfile" />
tmp_name - когда файл закачивается на сервер, он закачивается во временную папку под временным именем. И в этой переменной как раз содержится этот временный путь.

Цитата:

echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n"; // Как берётся значение NAME? это тоже стандартная переменная... и что значит \n в конце строки??
name - это оригинальное имя файла. \n - перенос строки.

Цитата:

readfile($_FILES['userfile']['tmp_name']); // что делается в этой строке?
Функция readfile() выводит файл на экран. Если не надо выводить - удалите эту строку.

Насчёт id3_tags не знаю. Как-то ставится, наверное :))

Цитата:

echo "Possible file upload attack: "; // Что имеется ввиду под атакой? Я не совсем понимаю условия процедуры is_uploaded_files. Поясните пожалуйста.
Если файл загружен не полностью, то выполняется код из этого блока. Здесь просто выводится сообщение "Может быть вы злобный хацкер?" :)

ManHack 06-07-2009 22:45 1160580

С ID3 проблема решилась (кажется) - скачать функции IDv3 (и не только v3) можно на сайте www.getid3.org (это если кому-то не хочется мучаться с PEAR :) ).

Спасибо за разъяснения..
Теперь вопрос на засыпку:
Как интегрировать форум vBulletin в CMS? (SilverStripeCMS v0.3.1SB, если конкретно)
Я расчитываю получить минимум умный ответ на глупый вопрос :)
Мне хотябы надо знать в какой последовательности и какие действия выполнять, боюсь упустить что-нибудь важное...
Автоматически запихать как модуль CMS с минимальной отладкой с моей стороны не получится? Если всё-таки получится, то каким образом это примерно делается? (а лучше точно ^_^ )

ManHack 07-07-2009 12:56 1160977

Код:

Ошибка

SQL-запрос:

CREATE TABLE `CoreLibrary` (
`ID` INT( 5 ) UNSIGNED AUTO_INCREMENT ,
`Folder` TEXT NOT NULL ,
`Title` TEXT NOT NULL ,
`Album` TEXT NOT NULL ,
`Performer` TEXT NOT NULL ,
`Date` DATE NOT NULL ,
`FileSize` FLOAT NOT NULL ,
`Link` TEXT NOT NULL ,
`MetaData` SET NOT NULL ,
PRIMARY KEY ( `ID` )
)

Ответ MySQL: Документация
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL ,
PRIMARY KEY ( `ID` )
)' at line 10

Что за неведома ошибка возникает при создании БД в MySQL? И как от неё избавиться?

ManHack 07-07-2009 15:38 1161110

Оказалось, ошибка возникла из-за использования типа SET в поле MetaData.
Видимо, неправильно его использую... То же самое, если тип ENUM.
Как правильно создавать поля таких типов?

Coutty 07-07-2009 18:11 1161259

Русскоязычная документация по MySQL. Там есть всё, что надо. И это всё легко ищется по оглавлению.

Вкратце:
... SET ("ня", "nya", "мур", "мяу") NOT NULL ...
... ENUM ("ня", "nya", "мур", "мяу") NOT NULL ...

ManHack 07-07-2009 20:27 1161438

Превосходно! а в чём разница между SET и ENUM? (читал на php.su, так и не понял)

Можно ли сделать так, чтобы в поле MetaData (SET или ENUM) автоматически переносились соответствующие значения из полей Title, Album, Performer?
И как адекватно искать по полю типа ENUM или SET?

Допустим, поиск по запросу "ня" в этом поле вернёт true или false?
А по запросу "мур ня"?

Coutty 07-07-2009 20:42 1161448

В 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`";

ManHack 07-07-2009 22:34 1161531

Звучит хорошо... Попробую)

А если вернуться к закачке файлов на сервер... они у меня не закачиваются в Z:\tmp\ (хотя tmp_name возвращает адрес вид Z:\tmp\XXX.tmp, но такого файла в папке я не обнаруживаю и переместить несуществующий файл функцией move_uploaded_files соответственно тоже не получается)... в чём проблема?

ManHack 08-07-2009 02:11 1161644

Файлы загружаются ^_^
Осталась проблема с распределением их по директориям... Не догоняю условие:
PHP код:

if ($handle opendir($final_path)) {
    while (
false !== ($file readdir($handle))) { 
        
$nya++; 

Проблема в том, что $nya++ никогда не происходит (хотя по логике должно) и $nya всегда остаётся в начальном значении (т.е. в нуле).

Вообще выражение "Пока ЛОЖЬ не РАВНО <ПЕРЕМЕННАЯ> присвоить функция (параметр) делать... " меня как-то пугает... уж больно неструктурно это выглядит :) (хотя на php.su приведён именно такой пример).

Coutty 08-07-2009 08:10 1161723

Может быть неверно задаётся адрес директории?
Выведите переменную: echo $final_path перед выполнением этого ветвления.
Вообще, здесь надо использовать относительный путь, а не абсолютный. Например: opendir("./images/dir0001")

Цитата:

Цитата ManHack
Вообще выражение "Пока ЛОЖЬ не РАВНО <ПЕРЕМЕННАЯ> присвоить функция (параметр) делать... " меня как-то пугает... уж больно неструктурно это выглядит (хотя на php.su приведён именно такой пример). »

Это пример из официальной документации php. От перемены мест сравниваемых, результат не меняется. Но исключается возможность присваивания вместо сравнения (иногда по ошибке можно написать if ($a = false) { ... }. А вот обратное присваивание точно выдаст ошибку: if (false = $a) { ... } ).

ManHack 09-08-2009 21:11 1189617

Добавление в базу сделано.

Теперь надо написать поиск.
Поиск должен искать слова из 1 строки сразу в 3 столбцах таблицы и выдавать результаты по их релевантности.
Сколько не бился - толком ничего не вышло.
Подскажите, а?

И/или хотя бы обясните пословно, что здесь написано:
Код:

"SELECT id FROM CoreLibrary WHERE title LIKE '%". str_replace(" ", "%' OR title LIKE '%", $good). "%'"
($good - данные из строки поиска)
Знак % что даёт? и кавычки как-то странно стоят, аж жуть....

А вот здесь ещё непонятнее:
Код:

"SELECT *, MATCH row1 AGAINST ('$search')+MATCH row2 AGAINST ('$search')+MATCH row3 AGAINST //('$search') as relev FROM CoreLibrary ORDER BY relev DESC"
здесь $search = $good в пред. случае.
AGAINST? MATCH? DESC?

Coutty 10-08-2009 04:14 1189819

Цитата:

"SELECT id FROM CoreLibrary WHERE title LIKE '%". str_replace(" ", "%' OR title LIKE '%", $good). "%'"
Выбрать столбец id из таблицы CoreLibrary, где запись в столбце title совпадает с маской поиска (LIKE). Маска поиска состоит из строки запроса ($good), где функцией php str_replace() заменяются пробелы на знаки процента, которые дополнительно добавляются в начале и в конце строки. Знак процента в SQL означает "любые символы". Как * в Windows. Также к результатам добавляются строки (OR), где идёт поиск только по заданной строке, хотя я не вижу в этом смысла - всё равно ведь % их найдёт.
Но согласен, скобки стоят странно. Было бы правильнее расставить их так:
Цитата:

"SELECT id FROM CoreLibrary WHERE title LIKE '%". str_replace(" ", "%", $good) . "%' 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"
Да, здесь посложнее.
SELECT *, ... - выбрать все строки, удовлетворяющие условию, и справа добавить столбец relev - релевантность поиска (по нему потом идёт сортировка).
MATCH колонка AGAINST ('строка поиска') - полнотекстовый поиск по столбцу. Таблицы должны иметь индекс для полнотекстового поиска. Видимо, здесь идут три подзапроса по разным столбцам, потом им задаётся общее имя (AS relev) и по этой колонке (ORDER BY relev) уже сортируется по убыванию (DESC).
Хотя странно выглядит)

Подробнее о полнотекстовом поиске можете почитать здесь, если интересно. Я не совсем разобрался =~_~=

ManHack 10-08-2009 20:59 1190405

Последний запрос (с релевантностью) возвращает таблицу целиком с дополнительным столбиком "relev", в котором одни нули... Почему? $search совпадает со значениями row1 в двух строках.

И где можно получить информацию по "ERROR: "Неизвестная строка с пунктуацией @ 96"" (cобственно, интересуют описания этих самых @96, @100 и т.д.)

ManHack 10-08-2009 21:58 1190447

Вопрос про нолики отпал... И правда, релевантность начинает подсчитываться, когда в базе 10 и более записей...

Теперь, как с ней манипулировать? Чтобы при точных запросах по нескольким столбцам таблицы выдавала только точные ответы (как в медиапоисковиках или поиске по электронным библиотекам,например)

Coutty 11-08-2009 04:05 1190668

При точных запросах вам не нужна релевантность. Вам нужно точное совпадение:
Код:

SELECT * FROM table_name WHERE stolb1 = 'запрос' OR  stolb2 = 'запрос' OR stolb3 = 'запрос'
Но обычно полную строку никто не ищет, поэтому вместо stolb = 'запрос' пишите stolb LIKE '%запрос%'. Т.е. пробелы внутри запроса будут обрабатываться как есть, но сама подстрока будет обнаруживаться как в начале, так в середине и конце строк.
Чтобы упорядочить выдачу, добавьте в конце ORDER BY stolb_name ASC
ASC - по возрастанию (указывать не обязательно, т.к. по умолчанию), DESC - по убыванию. Можно указать несколько полей через запятую, тогда упорядочивание будет производиться сначала по первому, потом по второму и т.д.(имеется в виду, что в первом поле "автор" Пушкин будет идти после Гоголя, конечно, но у самого Пушкина произведения будут упорядочены по второму полю "название").

Прим: LIKE - странная штука. Когда я делал поиск по прайсу, она находила даже запросы длиной меньше 4 символов, но что это были за результаты... Каждый раз что-то своё. И только больше 4 символов запроса находились точно.

ManHack 11-08-2009 19:49 1191280

С этим разобрались. Я решил пока что отказаться от LIKE и всё выполнил через MATCH AGAINST.
В SQL мой запрос работает отлично, а вот в написанном PHP'шнике - шиш.

Суть php-файла:
PHP код:

// забираем данные из формы в переменную $search и обрабатываем её
$good trim(preg_replace("/\s(\S{1,1})\s/"" "ereg_replace(" +""  "," $search ")));
// вывод $good на экран показал, что выводится она правильно (в соответствии с запросом в $search)

// ...

$sql "SELECT *, MATCH title AGAINST ('$good')+MATCH avtor AGAINST ('$good')+MATCH genre AGAINST ('$good') AS Relev FROM $table WHERE MATCH (avtor) AGAINST ('$good') ORDER BY Relev DESC"// в SQL это работало!!
$result mysql_query($sql) or die ("err_code = " mysql_error()); //ошибки не выдаёт
echo $result// возвращает[b] Resource id 3[/b], пробовал [b]count($result)[/b] как для массива, вернуло значение 1 (1 элемент в переменной $result) 

В чём теперь дело?
Может я обращение к результатам запроса неправильно делаю? или что ещё?

Coutty 12-08-2009 03:57 1191554

Вы бы почитали руководство PHP касательно работы с MySQL. Там даже примеры есть.
mysql_query() и должно возвращать идентификатор ресурса. Теперь его надо обработать:
PHP код:

echo "<table>";
while (
$line mysql_fetch_assoc($result)) // возвращает одну строку из ресурса в виде ассоциативного массива
   
{
   echo 
"<tr><td>$line['stolb1']</td><td>$line['stolb2']</td><td>$line['stolb3']</td></tr>";
   } 


ManHack 13-08-2009 09:49 1192513

Тьфу ты, точно... Вылетело из головы >_<
Спасибо!

ManHack 13-08-2009 12:11 1192645

Цитата:

Цитата Coutty
echo "<table>";
while ($line = mysql_fetch_assoc($result)) // возвращает одну строку из ресурса в виде ассоциативного массива
{
echo "<tr><td>$line['stolb1']</td><td>$line['stolb2']</td><td>$line['stolb3']</td></tr>";
} »

Вот только так не прокатит на самом деле. Ассоциированные массивы не имеют индексов.
Поэтому придётся использовать конструкцию типа foreach ($array as $value) { *** последовательная обработка элементов строки*** }

Coutty 13-08-2009 16:42 1192865

Цитата:

Цитата ManHack
Ассоциированные массивы не имеют индексов. »

Я специально использую ассоциативные массивы для того, чтобы не ковыряться с индексами. Можете написать mysql_fetch_array() и тогда будет и ассоциативный, и нумерованный массив. У этой функции есть и параметры (можно глянуть в справке ;)), чтобы выбирать нужные: асс, нум или оба сразу (в одном).
Цитата:

Цитата ManHack
Поэтому придётся использовать конструкцию типа foreach ($array as $value) »

Если вы знаете названия полей, то по полям и обращайтесь, зачем вам ещё foreach? Если названия полей не знаете, то см.выше - по индексам в нумерованном массиве.

ManHack 14-08-2009 11:35 1193421

Вот и я думал, что я их знаю... А шиш.

PHP код:

23   echo "<table>"
24   while ($line mysql_fetch_assoc($result)) { 
25       echo "<tr><td>$line['title']</td><td>$line['album']</td><td>$line['artist']</td></tr>"
26   

выдаёт следующее сообщение в браузере:

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

Strange_V 14-08-2009 15:49 1193592

ManHack, уберите кавычки

PHP код:

25       echo "<tr><td>$line[title]</td><td>$line[album]</td><td>$line[artist]</td></tr>"


ManHack 15-08-2009 21:03 1194374

Пробовал без кавычек.
Белый экран и пусто. Нифига не выводит >_<
Белый экран имеет следующий 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>

ManHack 15-08-2009 22:58 1194438

Так. Всё. С этим разобрались. Оказывается надо писать имена полей с точностью до регистра букв.

Теперь другой вопрос:
Как вывести кусок html-куда? (около 800 строк, каждую обрамлять в echo "<строка>" задолбаюсь).
Есть ли какой-нибудь быстрый и лёгкий способ это всё красиво оформить? И с точки зрения быстродействия правильный.

Вообще, просвятите меня пожалуйста, лучше ли в php-файл запихивать html с использованием переменных из php или в html-страницу впихивать ссылку на php, который вернёт результаты своей работы по запросу? Второе кажется более целесообразным, т.к. не придётся для каждого запроса генерить один и тот же html (а он не маленький, 800 строк) -> нагрузка на сервер меньше, но первый вариант я не понимаю как сделать... как-бы надо запускать php-файл с параметрами и забирать обратно результаты? А как это сделать?
Я делаю поиск.

Coutty 16-08-2009 08:12 1194604

Цитата:

Цитата ManHack
Как вывести кусок html-куда? (около 800 строк, каждую обрамлять в echo "<строка>" задолбаюсь).
Есть ли какой-нибудь быстрый и лёгкий способ это всё красиво оформить? И с точки зрения быстродействия правильный. »

800 строк в выводе по SQL-запросу? Так вот тот же код и есть:
PHP код:

echo "<table>";  
while (
$line mysql_fetch_assoc($result)) {  
   echo 
"<tr><td>$line['title']</td><td>...</td></tr>";  

echo 
"</table>"

Пока есть строки в SQL-выдаче, цикл while будет выводить их. Можете проверить на запросе "SELECT * FROM table_name".

Цитата:

Цитата ManHack
лучше ли в php-файл запихивать html с использованием переменных из php или в html-страницу впихивать ссылку на php, который вернёт результаты своей работы по запросу? »

Не понял, что требуется сделать, т.ч. не могу посоветовать, как сделать лучше)
Цитата:

Цитата ManHack
Я делаю поиск. »

Другими словами - вам требуется выводить, скажем, по 20 строк на страницу, а вы не хотите, чтобы SQL-сервер выдавал вам их сразу все? Используйте такой запрос:
"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.

ManHack 16-08-2009 22:04 1195146

За LIMIT спасибо, пригодится :)

У меня оформление динамического (искомого) содержания страницы не маленькое...
Разметка классов, описаных в CSS, да и выводить надо 5 полей не простым текстом...
+ к каждому результату крепится ссылка на небольшое флеш-приложение, с параметрами для просмотра этого конкретного результата. Если кликаем по другому результату, флешка исчезает в месте предыдущего клика и появляется в месте нового с параметрами для нового результата. Примерно так...
В общем, на оформление вывода 1 результата уйдёт куча строчек echo "<HTML>";
Вот я и интересовался, стоит ли заниматься оформлением вывода результата (общий шаблон для всех выводимых результатов) в php-файле поиска или это делается по-другому и в другом месте?

Coutty 17-08-2009 04:08 1195298

Можно сэкономить, используя AJAX, но здесь вы сами разбирайтесь - в двух словах не расскажешь... Тут уж вам решать - экономить ли трафик пользователей и разбираться с AJAX'ом, или же трафик не экономить, но сделать попроще. Чаще всего выбирают вариант "попроще")

Не обязательно, кстати, писать echo "<html>";
Можно делать "разрывы" в скрипте:
читать дальше »
PHP код:

<html>
<head>
<title><?php echo $_GET['title']; ?></title>
</head>
<body>
<table>
<?php
mysql_connect
(...);
...
while(...) {
   echo 
"<tr><td>...</td><td>...</td></tr>";
}
?>
</table>
</body>
</html>



Шаблон сделать - тоже можно. Если там меняется только заголовок, таблица и ссылки, то вместо них вставьте в заранее подготовленный файл какие-нибудь тэги вроде [[TITLE]] [[TABLE]] [[LINKS]]. А потом в этом файле "найти и заменить" скриптом. Это так, самые простые шаблоны, которых часто бывает достаточно :)

ManHack 18-08-2009 12:01 1196497

Вот допустим в php-файле нужно вывести html строчку, которая забирает значения переменных ИЗ ЭТОГО ЖЕ php-файла.
К примеру, строчка такова:
Код:

<title><?php echo $search . " results page" . " | DB search | " . $slogan; ?></title>
Т.е. получается из php-файла мы выплёвываем юзеру в браузер html-код, внутри которого содержится php-код, завязанный на коде исходного ("внешнего") php-файла...
Вопрос: КАК это сделать?

Можно конечно вставку HTML-кода вынести за скобки <?php ... ?>, но тогда значения переменных потеряются безвозвратно... :(

Coutty 18-08-2009 17:44 1196806

Цитата:

Цитата ManHack
Т.е. получается из php-файла мы выплёвываем юзеру в браузер html-код, внутри которого содержится php-код, завязанный на коде исходного ("внешнего") php-файла...
Вопрос: КАК это сделать? »

Вопрос: зачем так делать? От этого php на стороне клиента не будет никакого проку.
Используйте JavaScript-код или вставляйте форму со скрытыми полями <input type="hidden" name="var_name" value="var_value" />, если хотите сохранить какие-то переменные. В зависимости от целей, можно и дописывать переменные к ссылкам в виде get-запроса link.php?a=1&b=2&c=3.

ManHack 18-08-2009 21:22 1196970

Цитата:

дописывать переменные к ссылкам в виде get-запроса link.php?a=1&b=2&c=3
Вот здесь поподробнее пожалуйста.
Как я помню, добавление переменной к ссылке делается добавлением в тег <form action="search.php"> параметра id="querty"... тогда при отправке запроса пользователем браузер выдаст ссылку вида yourhost.com/search.php?querty=введённые+пользователем+слова
Правильно понимаю?
А как в PHP эту ссылку обработать?

ManHack 18-08-2009 22:17 1197011

То что делать это надо методом get, это я понял... но адекватного разъяснения в мануалах не нашёл, в одном месте вообще предлагают откомпилировать некий сценарий на Си:
Код:

#include <stdio.h> // Включаем функции ввода/вывода
#include <stdlib.h> // Включаем функцию getenv()
void main(void) {
// получаем значение переменной окружения REMOTE_ADDR
char *RemoteAddr = getenv("REMOTE_ADDR");
// ... и еще QUERY_STRING
char *QueryString = getenv("QUERY_STRING");
// печатаем заголовок
printf("Content-type: text/htmlnn");
// печатаем документ
printf("<html><body>");
printf("<h1>Здравствуйте. Мы знаем о вас все!</h1>");
printf("Ваш IP-адрес: %s
",RemoteAddr);
printf("Вот параметры, которые Вы указали: %s",QueryString);
printf("</body></html>");
}

и поместить в cgi-bin (это ж жуть! ><)

Coutty 19-08-2009 04:03 1197168

Цитата:

Цитата ManHack
Как я помню, добавление переменной к ссылке делается добавлением в тег <form action="search.php"> параметра id="querty"... тогда при отправке запроса пользователем браузер выдаст ссылку вида yourhost.com/search.php?querty=введённые+пользователем+слова »

Не совсем так.
HTML код:

<form action="search.php" method="post">
<input type="hidden" name="a" value="1" />
<input type="hidden" name="b" value="2" />
<input type="text" name="c" />
<input type="submit" value="Отправить" />
</form>

Здесь отправятся три переменные a, b и c методом post по адресу search.php после нажатия на кнопку "отправить". Т.е. адрес останется просто search.php, но переменные передадутся. Можно то же самое методом get. Тогда будет строка search.php?a=1&b=2&c=some_string
Но ведь к каждой ссылке не приделаешь форму (да ещё и избавление от кнопки влечёт за собой добавление JavaScript'а), поэтому можно напрямую генерировать такие ссылки php-скриптом. Не понимаю, какие в этом сложности.
PHP код:

echo "<a href='search.php?a=" $a "&b=" $b "&c=" $c "'>ссылка</a>"


ManHack 24-08-2009 11:57 1201767

HTML код:

<link rel="stylesheet" href="/css/lamda.css?4" type="text/css" />
что значит ?4 после указания CSS-файла?... Встречал такое же и при описании используемых JavaScripts в head'е страничек....

Coutty 24-08-2009 17:53 1202076

Это обход кэша. Разработчик сайта неожиданно решил поменять дизайн, а дожидаться, пока у всех из кэша старая css'ка уйдёт - неизвестно сколько дней/месяцев/лет. Поэтому добавляет после вопроса случайное число (обычно просто на 1 больше, чем предыдущее). Адрес поменялся - браузер качает файл заново, дизайн сразу отображается новый.
И JS - то же самое. Можно и к картинкам дописывать, чтоб из кэша не брались.

ManHack 24-08-2009 21:57 1202231

Лихо :)

Тогда другой вопрос... уж менее по PHP...
Как узнать, какие у конкретного swf-флеша есть параметры для запуска (или ему ещё как-то информация извне может поступать?)... Декомпилировал swf-файл, но ответа на свой вопрос не получил, только кучу ужасающих скриптов и ресурсы...
И ещё один вопрос: как запускать swf-файл с параметрами? (можно через jQuery или swfobject, если по-другому никак).... Но как это делать через библиотеку jQuery с плагином jquery.flash.js или через swfobject.js мне тоже интересно :)

ПС> И ещё один вопрос... совсем не в тему... но как вКонтакте на страницах с музыкой аудиоплеер подгружается? там есть формочка с onclick="return operate (разные параметры, среди которых инфа о пользователе и медиафайле)" - это я понял. Но как плеер вызывается и как там, "внутри" параметры передаются понятно очень смутно... а главное как этот плеер исчезает, когда кликаешь по другой записи и появляется около новой? О.о
http://vkontakte.ru/js/audio.js
Сама флешка плеера ещё страшнее "изнутри"...
Но мне всё-равно очень хочется разобраться в их индийском коде (разумеется исключительно в ознакомительно-познавательных целях), и было бы не плохо, если б вы мне подсказали...

ManHack 26-08-2009 14:03 1203716

Кажется я задал слишком сложный или слишком глупый вопрос..... ТТ_ТТ

ManHack 26-08-2009 15:47 1203801

Спрошу попроще вопросик... Как сделать так, чтобы результаты поиска выдавались постранично, например, 20 результов на одну страничку?
Только сделать нормально, чтобы можно было переходить на любую страницу по их номерам, а не переключаться только между соседними. С prev- и next page я уже сделал из любопытства, надо доработать :)
Как обычно постраничный вывод делают? Меня алгоритм интересует, не хочу на собственных косяках учиться))

Для пущего интереса предположим, что религия запрещает изуродовать ссылку дополнительным параметром ?page=<значение> :)
Есть ли другие адекватныес способы?

Coutty 26-08-2009 18:15 1203925

Цитата:

Цитата ManHack
Кажется я задал слишком сложный или слишком глупый вопрос..... ТТ_ТТ »

Или не в тему (PHP).
А вообще - если вы знаете ActionScript, то вам проще написать свой плеер на флэше. Если представления не имеете, то и рассказывать бессмысленно. Ведь так?

Цитата:

Цитата ManHack
Спрошу попроще вопросик... Как сделать так, чтобы результаты поиска выдавались постранично, например, 20 результов на одну страничку? »

Выше уже спрашивали - LIMIT x, 20 в конце SQL-запроса, где x - некое число, начиная с которого отсчитываются 20 записей.
Цитата:

Цитата ManHack
Только сделать нормально, чтобы можно было переходить на любую страницу по их номерам, а не переключаться только между соседними. »

Вызываете 5 страницу, значит x=20*5.
Цитата:

Цитата ManHack
Для пущего интереса предположим, что религия запрещает изуродовать ссылку дополнительным параметром ?page=<значение> »

Можно и просто search.php?5 передавать.
Либо search5.html или что-то подобное. В этом случае mod_rewrite для apache используется.


Время: 22:02.

Время: 22:02.
© OSzone.net 2001-