Войти

Показать полную графическую версию : PHP - несколько вопросов


Страниц : 1 [2]

Coutty
13-08-2009, 16:42
Ассоциированные массивы не имеют индексов. »
Я специально использую ассоциативные массивы для того, чтобы не ковыряться с индексами. Можете написать mysql_fetch_array() и тогда будет и ассоциативный, и нумерованный массив. У этой функции есть и параметры (можно глянуть в справке ;)), чтобы выбирать нужные: асс, нум или оба сразу (в одном).
Поэтому придётся использовать конструкцию типа foreach ($array as $value) »
Если вы знаете названия полей, то по полям и обращайтесь, зачем вам ещё foreach? Если названия полей не знаете, то см.выше - по индексам в нумерованном массиве.

ManHack
14-08-2009, 11:35
Вот и я думал, что я их знаю... А шиш.

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
ManHack, уберите кавычки

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

ManHack
15-08-2009, 21:03
Пробовал без кавычек.
Белый экран и пусто. Нифига не выводит >_<
Белый экран имеет следующий 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
Так. Всё. С этим разобрались. Оказывается надо писать имена полей с точностью до регистра букв.

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

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

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

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".

лучше ли в php-файл запихивать html с использованием переменных из php или в html-страницу впихивать ссылку на php, который вернёт результаты своей работы по запросу? »
Не понял, что требуется сделать, т.ч. не могу посоветовать, как сделать лучше)
Я делаю поиск. »
Другими словами - вам требуется выводить, скажем, по 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
За LIMIT спасибо, пригодится :)

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

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

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

<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
Вот допустим в 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
Т.е. получается из 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
дописывать переменные к ссылкам в виде 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
То что делать это надо методом 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
Как я помню, добавление переменной к ссылке делается добавлением в тег <form action="search.php"> параметра id="querty"... тогда при отправке запроса пользователем браузер выдаст ссылку вида yourhost.com/search.php?querty=введённые+пользователем+слова »
Не совсем так.

<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-скриптом. Не понимаю, какие в этом сложности.
echo "<a href='search.php?a=" . $a . "&b=" . $b . "&c=" . $c . "'>ссылка</a>";

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

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

ManHack
24-08-2009, 21:57
Лихо :)

Тогда другой вопрос... уж менее по 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
Кажется я задал слишком сложный или слишком глупый вопрос..... ТТ_ТТ

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

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

Coutty
26-08-2009, 18:15
Кажется я задал слишком сложный или слишком глупый вопрос..... ТТ_ТТ »
Или не в тему (PHP).
А вообще - если вы знаете ActionScript, то вам проще написать свой плеер на флэше. Если представления не имеете, то и рассказывать бессмысленно. Ведь так?

Спрошу попроще вопросик... Как сделать так, чтобы результаты поиска выдавались постранично, например, 20 результов на одну страничку? »
Выше уже спрашивали - LIMIT x, 20 в конце SQL-запроса, где x - некое число, начиная с которого отсчитываются 20 записей.
Только сделать нормально, чтобы можно было переходить на любую страницу по их номерам, а не переключаться только между соседними. »
Вызываете 5 страницу, значит x=20*5.
Для пущего интереса предположим, что религия запрещает изуродовать ссылку дополнительным параметром ?page=<значение> »
Можно и просто search.php?5 передавать.
Либо search5.html или что-то подобное. В этом случае mod_rewrite для apache используется.




© OSzone.net 2001-2012