Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как передать массив из одно процедуры в другую


Автор: Drizhenko 31.5.2006, 11:52
Есть некий код
Код

<?
  include "config.php";
  
  echo "<table align=\"center\"><tr><td align=\"center\">";
  

function navigation ($letter1,$letter2,$letter3,$r1,$r2,$limit,$j)
{
$ath=mysql_query("SELECT * FROM films WHERE name like '&#$letter1%' or name like '&#$letter2%' or name like '$letter3' ORDER BY `name` ASC");
    $count = mysql_num_rows($ath);
    $ath=mysql_query("SELECT * FROM films WHERE name like '&#$letter1%' or name like '&#letter2%' or name like '$letter3' ORDER BY `name` ASC LIMIT $limit, 30");
    $page=floor($count/30);
    $rest=$count%30;
    if ($rest>0){$page=$page+1;}
    if ($r1>=10){echo "<a href=\"Index.php?func=navigation&letter1=".$letter1."&letter2=".$letter2."&letter3=".$letter3."&r1=".($rr1=$r1-10)."&r2=".($rr2=$r2-10)."&limit=".($r1*3)."\"><< </a> "; }
    for ($i = $r1; ($i <= $r2)and($i < $page);$ar[$i]="Index.php?func=navigation&letter1=".$letter1."&letter2=".$letter2."&letter3=".$letter3."&r1=".$r1."&r2=".$r2."&limit=".($i*30),print "<a href=\"$ar[$i]\">".($i+1)." </a>", $i++);
    if ($r2<($page-1)){echo "<a href=\"Index.php?func=navigation&letter1=".$letter1."&letter2=".$letter2."&letter3=".$letter3."&r1=".($r1=$r1+10)."&r2=".($r2=$r2+10)."&limit=".(($r2-9)*30)."\">>></a> ";}

 echo "</td></tr></table><br><br>";
      
  if($ath){
  echo "<table cellspacing='0' width='70%' align='center'>";

  while ($autor=mysql_fetch_array($ath))
  {
          global $chb;
          $chb[$j]=$autor['id'];
          echo "<tr><td class='bottomtop' width=\"100%\"><b>".$autor['name']."</b>&nbsp;/ ".$autor['genre']."&nbsp / ".$autor['year']."&nbsp;</td><td rowspan='2' valign='center' align='center' class='bottomtopright'><form name='form1' method='post'>&nbsp;<input type='Checkbox' name='".$chb[$j]."'>&nbsp;</td></tr>
                <tr><td class='bott'>".$autor['actor']."&nbsp;</td></tr><tr><td>&nbsp;</td></tr>";
          $j++;
  }
  print $j;
  print_r ($chb);

  echo "<tr><td align='center'><input type=submit name='submit'></form></td></tr>";
  echo "</table><br><br>";
  }
  else
  {
          echo "<p><b>Error:".mysql_error()."</b><p>";
          exit();
  }

}


if (isset($_POST['submit']))
{
print $j;
    for($i=1;$i<=count($chb);$i++)
            {
                if($chb[$i]<>0)
                    {
                    print $chb[$i];
                    }
            }
}
else
{
call_user_func_array($_GET['func'], array($_GET['letter1'],$_GET['letter2'],$_GET['letter3'],$_GET['r1'],$_GET['r2'],$_GET['limit'],$_GET['j']));
}

?>

Скажите, пожалуйста почему когда я нажимаю кнопку то у меня не печатается массив из процедуры navigation. У меня есть подозрения что он просто обнуляется при завершении процедуры. А как сделать чтобы он запоминался? 

Автор: Vaulter 31.5.2006, 12:08
может он вообще пустой?
ты уверен, что все запросы идут без ошибок и возвращают результаты???
я вот, глядя на код, уже не уверен, так как ошибки не отлавливаются. 

Автор: Drizhenko 31.5.2006, 12:56
33 строка кода выводит массив и переменную j. То есть массив существует,но почему-то при нажатии кнопки пер. j становится равной 0 и массив не выводится. Видимо тоже обнуляется. 

Автор: Vaulter 31.5.2006, 13:14
Drizhenko, так при нажатии и не вызывается функция, которая их заполняет. 

Автор: Drizhenko 31.5.2006, 15:06
Ну да, в этом то и проблема, массив заполняется при вызове другой функции, а при нажатии кнопки этот массив, массив имен чекбоксов перебирается циклом, и отмеченные галочкой выводятся на экран.

Может кто знает как реализовать по другому. Задача такая. Нужно при нажатии на кнопку вывести на экран только те записи, что были отмечены  галочкой, причем количество записей и соответсвенно чекбоксов равно 30. и было бы нерационально 30 раз писать в коде строку 
Код

if ($chb[0]==true){print $chb[0]};
if ($chb[1]==true){print $chb[1]};
if ($chb[2]==true){print $chb[2]};
... и т.д.

 

Автор: Vaulter 31.5.2006, 15:16
Drizhenko, тебе нужно
1. обозвать чекбоксы именами след. типа: name='show[".$chb[$j]."]' или name='show[$j]'
2. при REQUEST_METHOD = POST
перебирать их так
Код

if(is_array($_POST['show']))
  while(list($id,$val) = each($_POST['show']))
    echo "была отмечена $id галочка - value чекбокса был: $val<br />";
 

Автор: ST_Falcon 31.5.2006, 15:19
Drizhenko
а ты цыклом все пусти.
Код

for($i=0; $i<count($chb); $i++)
{
  if ($chb[$i]==true)
    print $chb[$i];
}
 

Автор: Drizhenko 31.5.2006, 18:03
Vaulter, сделал как ты говоришь, но все равно выводится пустая строка.

ST_Falcon, вообще-то у меня именно так и написано, разве что вместо ==true у меня <>0 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)