Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Смарти. foreach

Сообщения:  [1-10]   [11-11] 

 
 автор: Лена   (20.05.2008 в 16:49)   письмо автору
 
   для: sim5   (20.05.2008 в 16:20)
 

Большое дружное спасибо.

   
 
 автор: sim5   (20.05.2008 в 16:20)   письмо автору
 
   для: Лена   (20.05.2008 в 16:03)
 

Зачем получать массив, который вдвое больше по размеру и половина которого не используется? Работая с числовыми индексами, получайте как mysql_fetch_row() (кстати, это самый быстрый доступ), нужен ассоциативный массив, есть mysql_fetch_assoc(), ну а если нужны будут и те, и другие данные, то для этого и служит mysql_fetch_array(). Либо можно, применяя mysql_fetch_array(), указать параметр MYSQL_ASSOC, чтобы отсечь бесполезное для вашего случая.

   
 
 автор: Лена   (20.05.2008 в 16:03)   письмо автору
 
   для: sim5   (20.05.2008 в 15:29)
 

Понимаю, что яйца курицу не учат, но...
в обоих случаях выводятся все записи. Проверила.
Различие между mysql_fetch_array() и mysql_fetch_assoc() в том, что первый возвращает и числовые индексы, и ассоциативные. На этом различие заканчивается.
В нашем примере индексные значения не используются, и у нас все значения в цикле используются. Есть записи - цикл работает, нет - цикл прекращается. Тогда какая разница какую функцию нам использовать?
Не знаю, понятно я объяснила или нет. Взяла из вашего же учебника.

   
 
 автор: sim5   (20.05.2008 в 15:29)   письмо автору
 
   для: Лена   (20.05.2008 в 15:25)
 

Именно так. А если:
$rows = mysql_fetch_array($result);
то получим значения только первой записи.

   
 
 автор: Лена   (20.05.2008 в 15:25)   письмо автору
 
   для: sim5   (20.05.2008 в 15:12)
 

Все получилось и я все поняла. Создаем новый массив, в котором будет столько элементов, сколько заполненных строк в базе. А потом готовый набор передаем в шаблон.
Спасибо.
Какой бы ни была связь, слава Богу, форум работает всегда.

   
 
 автор: sim5   (20.05.2008 в 15:12)   письмо автору
 
   для: Лена   (20.05.2008 в 15:09)
 

Определить массив до цикла, заполнить его в цикле, а уже потом его значение присвоить переменной Смарти:

<?
$result 
mysql_query("SELECT * FROM `news`"); 
if(!
$result) exit(mysql_error());  
$list = array();
while (
$rows mysql_fetch_assoc($result)) { //зачем получать еще и индексные значения, 
//если их не ипользовать
  
$list[] = $rows
}
$smarty_news->assign('list'$list);  
$smarty_news->display("news1.tpl");

   
 
 автор: Лена   (20.05.2008 в 15:09)   письмо автору
 
   для: sim5   (20.05.2008 в 14:54)
 

Вот это у меня не выводится, это я просто проверяла, выводятся ли значения из базы: print"<pre>";
print_r ($rows);
print"</pre>";
Убрала цикл while. Вот что теперь:
$result = mysql_query("SELECT * FROM `news`");
if(!$result) exit(mysql_error()); 
$rows = mysql_fetch_array($result);
$smarty_news->assign('list', $rows); 
$smarty_news->display("news1.tpl");


Прогресса не почувствовала: все осталось таким же. Почему выводится так много записей?

   
 
 автор: sim5   (20.05.2008 в 14:54)   письмо автору
 
   для: Лена   (20.05.2008 в 14:46)
 

Потому, что в цикле переназначается while ($rows = mysql_fetch_array($result)) {.... }
Вот это ни как не должно быть в цикле:
это проверить просто
print"<pre>";
print_r ($rows);
print"</pre>";
//а это присвоить результат запроса
$smarty_news->assign('list', $rows);
$smarty_news->display("news1.tpl");

   
 
 автор: Лена   (20.05.2008 в 14:46)   письмо автору
 
   для: sim5   (20.05.2008 в 12:57)
 

Ошибки исправила. Там еще одна была, вот здесь:
$smarty_news->assign('list', $rows_news);
а надо:
$smarty_news->assign('list', $rows);

Теперь блок foreah выводится как минимум раз тридцать, но мне же столько не нужно :-))
И вместо значений подставляется что-то непонятное:
2
2
2
Читать далее (Весь текст)
2
2
2
Читать далее (Весь текст)
0
0
0
Читать далее (Весь текст)
0
0
0
Читать далее (Весь текст)
1
1
1
Почему так?

   
 
 автор: sim5   (20.05.2008 в 12:57)   письмо автору
 
   для: Лена   (20.05.2008 в 12:32)
 

Ошибки в шаблоне:
В первой его строке, вместо фигурной закрывающей скобки, указана круглая скобка (об этом указано в ошибке).
Имя класса первого DIV не закрыто кавычками (хотя для смарти это не будет ошибкой).
Нет значений в $list - так лучше не писать, ибо так и будет выведено (если только это не для проверки).

   

Сообщения:  [1-10]   [11-11] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования