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

Тема в разделе "PHP", создана пользователем Смоленский, 6 фев 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Смоленский

    Смоленский

    Регистр.:
    2 июл 2008
    Сообщения:
    248
    Симпатии:
    87
    Есть код:
    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>
     
  2. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    Надо вот так:
    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
     
    Смоленский нравится это.
  3. Смоленский

    Смоленский

    Регистр.:
    2 июл 2008
    Сообщения:
    248
    Симпатии:
    87
    Как называется данный манёвр ? (или ссылку на man)
    PHP:
    .=
     
  4. Delayer

    Delayer Создатель

    Регистр.:
    4 июл 2009
    Сообщения:
    39
    Симпатии:
    4
    это называется дописать в конец строки, т.е. если есть строка $a = 'mystr';
    и
    $b = 'olololo';

    $b .= $a; // вернет olololomystr
     
    rasandrey и Смоленский нравится это.
  5. EnGeLs

    EnGeLs Постоялец

    Регистр.:
    30 апр 2008
    Сообщения:
    87
    Симпатии:
    21
    По сути сокращение такого выражения $var=$var+$var2;
     
    Смоленский нравится это.
  6. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А вот и нет, сокращение твоего выражения
    PHP:
    $var+=$var2;
    .= это сокращение от
    PHP:
    $var=$var.$var2;
     
  7. Yozik

    Yozik

    Регистр.:
    5 дек 2007
    Сообщения:
    238
    Симпатии:
    65
    Я бы сделал так:

    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 в случае отсутствия данных в таблице выдаст нотис.
     
  8. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    С циклом всё правильно ,только 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>
     
  9. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    serjinio, а куда у тебя уходят результаты вот этого?
    PHP:
    $myrow =mysql_fetch_assoc($result);
     
  10. serjinio

    serjinio

    Регистр.:
    10 май 2007
    Сообщения:
    439
    Симпатии:
    49
    Эта строчка лишняя (проблема копи-паста кода ).исправил
     
Статус темы:
Закрыта.