Переменная в переменной :(

Статус
В этой теме нельзя размещать новые ответы.

Смоленский

Гуру форума
Регистрация
2 Июл 2008
Сообщения
245
Реакции
88
Есть код:
PHP:
function category() {
# загоняем в переменную массив из таблицы
$result = mysql_query("SELECT * FROM table ORDER BY sort",$db);
$myrow = mysql_fetch_array($result);
echo "<select name=\"id_cat\">";
# генерируем список категорий
do
{
printf ("<option value=\"%s\"",$myrow['id']);
# делаем первой выбранную категорию
if ($myrow['id'] == $check_cat) {
    echo " selected";
    }
printf (">%s\n",$myrow['name']);
}
while ($myrow = mysql_fetch_array($result));
echo "</select>";
}
$select = category();
$form = "<form action=\"add.php\" method=\"post\">
<table>
  <tr><td>Раздел</td><td>$select</td></tr>
</table>
</form>";
echo $form;
В результате $select выводиться вне $form, объясните, что не так (
PHP:
<select name="id_cat">
<option value="2">Медицина
<option value="3">Мото
<option value="4">Работа
<option value="5">Спорт
<option value="1">Авто
</select>
<form action="add.php" method="post">
<table>
  <tr><td>Раздел<br><span>например: Разное</span></td><td></td></tr>
</table>
</form>
 
Надо вот так:
PHP:
function category() {
	$select=""; 
# загоняем в переменную массив из таблицы 
$result = mysql_query("SELECT * FROM table ORDER BY sort",$db); 
$myrow = mysql_fetch_array($result); 
$select.= "<select name=\"id_cat\">"; 
# генерируем список категорий 
do 
{ 
$select.="<option value=\"".$myrow['id']."\""; 
# делаем первой выбранную категорию 
if ($myrow['id'] == $check_cat) { 
    $select.= " selected"; 
    } 
$select.= ">".$myrow['name']."\n"; 
} 
while ($myrow = mysql_fetch_array($result)); 
$select.= "</select>";
return $select; 
} 
$select = category(); 
$form = "<form action=\"add.php\" method=\"post\"> 
<table> 
  <tr><td>Раздел</td><td>$select</td></tr> 
</table> 
</form>"; 
echo $form;
У тебя функция была сделана таким образом чтобы сразу выводить результат, а не возвращать его из функции в виде переменной.
Ну и так должно вроде работать:
PHP:
function category() { 
# загоняем в переменную массив из таблицы 
$result = mysql_query("SELECT * FROM table ORDER BY sort",$db); 
$myrow = mysql_fetch_array($result); 
echo "<select name=\"id_cat\">"; 
# генерируем список категорий 
do 
{ 
printf ("<option value=\"%s\"",$myrow['id']); 
# делаем первой выбранную категорию 
if ($myrow['id'] == $check_cat) { 
    echo " selected"; 
    } 
printf (">%s\n",$myrow['name']); 
} 
while ($myrow = mysql_fetch_array($result)); 
echo "</select>"; 
} 
$form = "<form action=\"add.php\" method=\"post\"> 
<table> 
  <tr><td>Раздел</td><td>".category()."</td></tr> 
</table> 
</form>"; 
echo $form;
 
Как называется данный манёвр ? (или ссылку на man)
PHP:
.=
 
это называется дописать в конец строки, т.е. если есть строка $a = 'mystr';
и
$b = 'olololo';

$b .= $a; // вернет olololomystr
 
Я бы сделал так:

PHP:
<?php
function category() {

$select = "";
# загоняем в переменную массив из таблицы
$result = mysql_query("SELECT * FROM `table` ORDER BY `sort`",$db);

$select .= "<select name=\"id_cat\">";

# генерируем список категорий
    while ($myrow = mysql_fetch_array($result))
	{
      $select .= "<option value=\"".$myrow['id']."\"";
         if ($myrow['id'] == $check_cat)
		   {
           $select .= " selected = \"selected\"";
           }
      $select .= ">".$myrow['name']."</option>";
    }
$select .= "</select>";

return $select;
}

$form = "<form action=\"add.php\" method=\"post\">
<table>
  <tr><td>Раздел</td><td>".category()."</td></tr>
</table>
</form>";
echo $form;

?>

т.к. цикл do-while в случае отсутствия данных в таблице выдаст нотис.
 
С циклом всё правильно ,только mysql_fetch_array давно пора забыть как о страшном пережитке...,да и повыбрасывать двойные кавычки ,там где явно нет переменных. да и идификатор $db внести как аргумент в функцию,либо сделать глобальной переменной.
PHP:
<?php
function category($check_cat) 
{
global $db;
# загоняем в переменную массив из таблицы
$result=mysql_query("SELECT `id`,`name` FROM `table` ",$db);

        $select ='';
        $select.='<select name="id_cat">';
# генерируем список категорий
  while ($myrow = mysql_fetch_assoc($result))  
	{
		$select.='<option value="'.intval($myrow['id']).'"';
		$select.=($myrow['id']==intval($check_cat))?'&nbsp;selected="selected"':'';
		$select.='>'.htmlspecialchars($myrow['name'].'</option>';
    }
        $select.='</select>';
 return $select;
}
?>
<form action="add.php" method="post">
<table>
  <tr><td>Раздел</td><td><?php echo category(4) ?></td></tr>
</table>
</form>
 
serjinio, а куда у тебя уходят результаты вот этого?
PHP:
$myrow =mysql_fetch_assoc($result);
 
Эта строчка лишняя (проблема копи-паста кода ).исправил
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху