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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: вывод из базы данных в smarty
 
 автор: ronin   (06.02.2008 в 19:30)   письмо автору
 
 

Здравствуйте!
У меня идет обращение четырех запросов к БД.
данные выводятся как то странно:
к примеру,

один, 
один 1,
один2


тут все нармально, но вторая строчка:
вместо:

два
два1,
два,2


выдает:

один, два
один 1,два1
один2два,2

соответственно третия:

один, два, три
один 1,два1,три1
один2два,2,три2

привожу код php;

$smarty = new Smarty;

$result = mysql_query("SELECT * FROM troops_in_move WHERE move_type ='return' ORDER BY move_end  ASC");

  while($postrow = mysql_fetch_array($result) )
     {

     $units=($postrow['units']);

$second=explode("=",$units);

   $id_t= $second[0];
     $count_t= $second[1];



   $sql1=  mysql_query("SELECT * FROM troops_info WHERE id='$id_t' ");
      $result1[] = mysql_fetch_array($sql1);

      $result2[] = mysql_fetch_array(mysql_query("SELECT * FROM village_info WHERE village_id='$postrow[to_id]' "));
       $result3[] = mysql_fetch_array(mysql_query("SELECT * FROM village_info WHERE village_id='$postrow[from_id]' "));


$smarty->compile_check = true;
$smarty->debugging = true;

$smarty->assign("postrow", $postrow);
$smarty->assign("result1", $result1);
$smarty->assign("result2", $result2);
$smarty->assign("result3", $result3);

 $smarty->assign("COUNT_T", $count_t);

                     $smarty->display('index.tpl');

и страницу темплейтса:

 <tr>
    <td>{section name=co loop=$postrow}<a href="view.php?id={$postrow[co][0]}">{/section}
    {section name=co loop=$result1}{$result1[co][1]}{/section}</a></td> </tr>
     <tr> <td>{section name=items  loop=$result2} {$result2[items][1]}{/section}  </td> </tr>
     <tr> <td>{section name=co2 loop=$result3} {$result3[co2][1]}{/section}</td> </tr>
      <tr>  <td>{$COUNT_T}</td> </tr>

P.S. $COUNT_T - выводиться нормально.

   
 
 автор: sim5   (06.02.2008 в 19:42)   письмо автору
 
   для: ronin   (06.02.2008 в 19:30)
 

Вы не продуманно передаете массив в Смарти:
либо все должно содержаться в массиве $postrow,
либо $postrow[0] - это url, а $postrow[1] текст ссылки, тогда
$postrow[2] будет содержать массив $result, который уже можно разложить вложенным циклом.
Подумайте, а уж потом Смарти, но так как вы выводите циклы - это просто ужас.

   
 
 автор: ronin   (07.02.2008 в 12:49)   письмо автору
 
   для: sim5   (06.02.2008 в 19:42)
 

к примеру в файле php я снимаю все [] там где result1[] (mysql_fetch....) во всех резальтах.
а файл tpl оставляю или меняю таким макаром, для наглядности:

<tr>
    <td>{section name=co loop=$postrow}<a href="view.php?id={$postrow[co][id]}">{/section}
    {section name=co loop=$result1}{$result1[co][name]}{/section}</a></td> </tr>
     <tr> <td>{section name=items  loop=$result2} {$result2[items][name_village]}{/section}  </td> </tr>
     <tr> <td>{section name=co2 loop=$result3} {$result3[co2][name_village]}{/section}</td> </tr>
      <tr>  <td>{$COUNT_T}</td> </tr>

тогда выводит только первый буквы слов!!!
или есть возможность объединить все переменные типа:

 $common = array($postrow,$result1,$result2,$result3); 

и пропустить это через foreach?

   
 
 автор: ronin   (07.02.2008 в 13:56)   письмо автору
 
   для: ronin   (07.02.2008 в 12:49)
 


{foreach name=outer item=contact from=$contacts}
    <hr />
    {foreach key=key item=item from=$contact}
        {$key}: {$item}&lt;br&gt;
        {$key}: {$item}<br />
    {/foreach}
{/foreach}



 $contacts = array($postrow,$result1,$result2,$result2);
$smarty->assign("contacts", $contacts);

 
                     $smarty->display('index.tpl');

                     }

выводит все, а как сделать, чтоб можно было обращаться к конкретным полям?

   
 
 автор: ronin   (07.02.2008 в 16:52)   письмо автору
 
   для: ronin   (07.02.2008 в 13:56)
 


{section name=customer loop=$result1}
     {$result1[customer][1]}
   <a href="view.php?id={$postrow[0]}">  {$result2[customer][1]}</a>
      {$result3[customer][1]}
{/section}


код привел в такой вид, но все равно выводит нормально только первую строчку,
вторая идет вместе с данными с первой, а третия - с данными из первой и второй.
прошу помощи!!!
файл php остался как в самом начале.

   
 
 автор: sim5   (07.02.2008 в 19:22)   письмо автору
 
   для: ronin   (07.02.2008 в 16:52)
 

Поверьте, мне просто некогда разбираться в ваших массивах, приведу кратко для примера. Собственно ничего сложного нет, если вы в массив получаете именно то, чего хотите. И так, например, ваш массив $result1 содержит:
$result1[0] - это url ссылки
$result1[1] - это текст этой ссылки
$result1[2] - содержит массив того, что вы хотели во вложенной секции развернуть. Тогда:

{section name=customer loop=$result1} //это основная секция - url 
  <a href="view.php?id={$result1[customer][0]}">  {$result1[customer][1]}</a>
   //объявляем переменную и назначаем ей массив
   {assign var = result2 value = $result1[customer][2]}
   //вложенная секция
    {section name=result3 loop=$result2} 
      //выводим этот массив, короче что-то с ним делаем      
      {$result2[result3][0]} {$result2[result3][1]} {$result2[result3][2]} {$result2[result3][3]} ... etc
   {/section} 
{/section}

У вас же не понятно - откуда ни стого ни счего появляется в секции непонятное, если оно конечно у вас не объявлено и связано с $result1. В общем полнейшая несурациза.
Выполните print_r($array), который вы передаете в Смарти, перед тем как его передать, посмотрите, во-первых то ли в нем, чего вы ожидаете, и если да, то тогда вам более ясно будет как разложить его в секции.

   
 
 автор: ronin   (07.02.2008 в 19:42)   письмо автору
 
   для: sim5   (07.02.2008 в 19:22)
 

спасибо за помощь, но результат тот же, что у меня.
т.е. первая строчка нормально, но вторая идет вместо с информацие из первой строчки, а третия вместе - с первой и второй. т.е ошибка на странице php. Если у Вас найдется немного времени не могли бы Вы поправить файл, так как все конструкция без смарти работает без проблем.

   
 
 автор: sim5   (07.02.2008 в 20:16)   письмо автору
 
   для: ronin   (07.02.2008 в 19:42)
 

print_r(ваш массив) - начните с этого. Я вам привел пример не для того чтобы вы удивились, а для того чтобы хотя бы знали, как можно делать вложения. Это совсем не значит, что у вас должно быть именно так, я понятия не имею что у вас в массиве и чего у вас должно получиться. Разберитесь вы с передаваемым в Смарти массивом, не кто ведь вам не мешает его разложить циклами в РНР с помощью print или echo, может вам так быстрее будет понять причину, а уж сделать тоже самое в Смарти, труда не составит - секция Смарти ничем таким кардинально не отличается от FOR РНР.

   
 
 автор: moonfox   (07.02.2008 в 20:55)   письмо автору
 
   для: sim5   (07.02.2008 в 20:16)
 

>>выводит все, а как сделать, чтоб можно было обращаться к конкретным полям?

$query ="select * from `tab`";
$result=mysql_query($query);
while($data[]=mysql_fetch_array($rwsult))
$smarty->assign('data',$data);

////////////////////////
{section name='data' loop=$data}
{$data[data].name_ru} - имя колонки в БД
{/section}

   
 
 автор: ronin   (08.02.2008 в 16:55)   письмо автору
 
   для: moonfox   (07.02.2008 в 20:55)
 

у меня вот проблема:

 while($postrow = mysql_fetch_array($result) )
     {
}

без смарти все тип топ, но если данные загонять в массив для смарти т.е. добавляется

[]


while($postrow[] = mysql_fetch_array($result) )
     {
 echo "<pre>";
                    print_r  ($postrow);
                    echo "</pre>";
}


тогда именно на этом этапе происходит глюк.
я буду разбираться, спасибо всем, кто откликнулся.

   
 
 автор: ronin   (08.02.2008 в 20:06)   письмо автору
 
   для: ronin   (08.02.2008 в 16:55)
 

тут на сайте есть светлая голова (ну не счетая Хеопса, естественно (фараон и сим5 пусть не обижаются)) - Трианон, вот нашел его код - персик, но вот как его прикрепит к while - ума не прилажу

 for($arr = array(); ($postrow = mysql_fetch_assoc($result)) != 0; $arr[] = $postrow);  
                    echo "<pre>";
                    print_r  ($arr);
                    echo "</pre>";

выдает все тип топ(просмотр массива без глюков!), но как обратитсься к полю из базы - не знаю $arr[поле_базы].

   
 
 автор: Trianon   (08.02.2008 в 20:45)   письмо автору
 
   для: ronin   (08.02.2008 в 20:06)
 

Может быть
$arr['поле_базы'] 
?

как у Вас называются поля, в теме не видно....

   
 
 автор: moonfox   (09.02.2008 в 01:47)   письмо автору
 
   для: Trianon   (08.02.2008 в 20:45)
 

у вас явно проблема в while... интересно присвоение значений для смарти тоже в цикле?

   
 
 автор: Trianon   (09.02.2008 в 12:04)   письмо автору
 
   для: moonfox   (09.02.2008 в 01:47)
 

> to: Trianon (08.02.2008 в 20:45)
>у вас явно проблема в while... интересно присвоение значений для смарти тоже в цикле?
У меня с while никаких проблем нет.

   
 
 автор: moonfox   (09.02.2008 в 18:58)   письмо автору
 
   для: Trianon   (09.02.2008 в 12:04)
 

не у вас )))

   
 
 автор: ronin   (11.02.2008 в 12:13)   письмо автору
 
   для: moonfox   (09.02.2008 в 18:58)
 

я тут всех запутал и себя, moonfox заметил мою ошибку , что я переменные смарти объявляю в цикле while. Мне стыдно. Я больше не буду. Большое спасибо. а то я зациклился и не мог увидеть ошибку! Спасибо всем, кто откликнулся!

   
Rambler's Top100
вверх

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