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

Форум MySQL

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

 

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

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

тема: Подсветка текущей категории
 
 автор: AN   (27.03.2008 в 12:20)   письмо автору
 
 

Вот есть вопрос, не могу решить, никогда не сталкивался:
Хочу сделать чтобы в админке, например товаров, при открытии какойто позиции, айди которой например 3, поле списка брало все категории из базы, подсвечивало активную, то есть результат типа такого:

<select name=select>
<option value=0>Не выбрано</option>
<option value=1>Категория1</option>
<option value=2>Категория2</option>
<option value=3 selected>Категория3</option>
<option value=4>Категория4</option>
</select>


Подскажите кто сталкивался?
Спасибо!!!

   
 
 автор: elenaki   (27.03.2008 в 12:29)   письмо автору
 
   для: AN   (27.03.2008 в 12:20)
 

<select name=select> 
<option value=0<? if (!isset($_GET["id"]) || intval($_GET["id"]) == || intval($_GET["id"]) <0) {?>selected<?}?>>Не выбрано</option> 
<option value=1<? if (intval($_GET["id"]) == 1) {?>selected<?}?>>Категория1</option> 
<option value=2<? if (intval($_GET["id"]) == 2) {?>selected<?}?>>Категория2</option> 
<option value=3<? if (intval($_GET["id"]) == 3) {?>selected<?}?>>Категория3</option> 
<option value=4<? if (intval($_GET["id"]) == 4) {?>selected<?}?>>Категория4</option> 
</select> 

   
 
 автор: AN   (27.03.2008 в 12:44)   письмо автору
 
   для: elenaki   (27.03.2008 в 12:29)
 

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

$res=mysql_query("SELECT * FROM brand ORDER by Brand_Name");
while ($myrow5 = mysql_fetch_assoc($res))
{
$Var1.= "<option value=".$myrow5["Brand_ID"].">".$myrow5["Brand_Name"]."</option>";
}

function br_id_sel($i)
{
$resns=mysql_query("SELECT * FROM brand WHERE Brand_ID=$i");
$row=mysql_fetch_assoc($resns);
return "<select name=\"Produce_Brand_ID\"><option value=".$row["Brand_ID"].">".$row["Brand_Name"]."</option><option value=\"0\"></option>";
}

где $i - айдишник категории из таблицы товаров

но в таком случае получается

<select name=select>
<option value=3>Категория3</option>
<option value=0>Не выбрано</option>
<option value=1>Категория1</option>
<option value=2>Категория2</option>
<option value=3>Категория3</option>
<option value=4>Категория4</option>
</select>

а как бы так обиграть с selected ????

   
 
 автор: elenaki   (27.03.2008 в 12:55)   письмо автору
 
   для: AN   (27.03.2008 в 12:44)
 

id, который стоит в value списка, надо с чем-то сравнивать. во-первых, надо знать, каким
методом вы передаете данные формы (GET или POST). если метод POST, то в примере надо
поменять _GET на _POST. а если надо, чтоб
=======================================
поле списка брало все категории из базы
=======================================
в select надо вставить реакцию на событие выбора onselect=... дальше переход на файл,
который будет делать выборку по id, стоящему в value. хотя в админке я бы сделала это AJAX' oм

   
 
 автор: mihdan   (27.03.2008 в 13:04)   письмо автору
 
   для: AN   (27.03.2008 в 12:20)
 


if ($_GET['id'] == $cat['id']) echo 'selected'; else echo '';

   
 
 автор: AN   (27.03.2008 в 13:32)   письмо автору
 
   для: mihdan   (27.03.2008 в 13:04)
 

мне как то нужно вот в эту функцию
function br_xxx($i)
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
return "<option value=".$myrow5["Brand_ID"]." ### >".$myrow5["Brand_Name"]."</option>";
}
}


вместо ### встроить или функцию условия, или условие типа
if ($myrow5["Brand_ID"] ==$i) { echo "selected"}

но в цикле условие не работает ((((

   
 
 автор: elenaki   (27.03.2008 в 13:42)   письмо автору
 
   для: AN   (27.03.2008 в 13:32)
 

если не работает условие, надо проверить, чему равны переменные в каждой итерации
цикла. выведите их на экран и убедитесь, что они определены. например, откуда берется $i?

   
 
 автор: olejek   (27.03.2008 в 13:44)   письмо автору
 
   для: AN   (27.03.2008 в 13:32)
 

<?
$res
=mysql_query("SELECT * FROM brand ORDER by Brand_Name");
while (
$myrow5 mysql_fetch_assoc($res))
     {
     if(
$myrow5["Brand_ID"]==$Brand_ID)
    
$chk="selected";
     else
    
$chk="";
     echo 
"<option $chk value=".$myrow5["Brand_ID"].">".$myrow5["Brand_Name"];
     }
?>

   
 
 автор: AN   (27.03.2008 в 14:21)   письмо автору
 
   для: olejek   (27.03.2008 в 13:44)
 

вот так делаю:
function br_xxx($i)
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
    if($myrow5["Brand_ID"]==$i)
    $chk="selected";
    else
    $chk="";
    return "<option $chk value=".$myrow5["Brand_ID"].">".$myrow5["Brand_Name"]."</option>";
}
}

не получается, не работает условие, выводит просто список и все

   
 
 автор: olejek   (27.03.2008 в 14:23)   письмо автору
 
   для: AN   (27.03.2008 в 14:21)
 

Проверьте, чему у Вас равна переменная $i

   
 
 автор: AN   (27.03.2008 в 14:45)   письмо автору
 
   для: olejek   (27.03.2008 в 14:23)
 

$i - это айдишник категории из таблицы товаров, сейчас выводит только первую запись и все

вот если делаю так
function br_xxx()
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
    if($myrow5["Brand_ID"]=="1")
    $chk="selected";
    else
    $chk="";
    return "<option value=".$myrow5["Brand_ID"]." ".$chk.">".$myrow5["Brand_Name"]."</option>";
}
}


выводит первую запись категорий и делает ее активной
<option value=1 selected>Acer</option>

а если скажем ставлю 10

function br_xxx()
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
    if($myrow5["Brand_ID"]=="20")
    $chk="selected";
    else
    $chk="";
    return "<option value=".$myrow5["Brand_ID"]." ".$chk.">".$myrow5["Brand_Name"]."</option>";
}
}


выводит первую, но уже не активную <option value=1 >Acer</option>

   
 
 автор: olejek   (27.03.2008 в 14:55)   письмо автору
 
   для: AN   (27.03.2008 в 14:45)
 

Вы понимаете смысл этой функции?!
<?
function br_xxx()
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while (
$myrow5 mysql_fetch_assoc($res_s))
{
    if(
$myrow5["Brand_ID"]=="20")
    
$chk="selected";
    else
    
$chk="";
    return 
"<option value=".$myrow5["Brand_ID"]." ".$chk.">".$myrow5["Brand_Name"]."</option>";
}
}
?>

Каждый раз вызывая ее вы возвращаете только первую строку запроса!

Вместо return, напишите echo

   
 
 автор: AN   (27.03.2008 в 15:07)   письмо автору
 
   для: olejek   (27.03.2008 в 14:55)
 

когда я вместо return, пишу echo у меня в начале документа, где описана функция, выводит столько раз перечень названий $myrow5["Brand_Name"] сколько полей в нижнем цикле, то есть у меня сверху докупента стоит

function br_xxx($i)
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
    if($myrow5["Brand_ID"]==$i)
    $chk="selected";
    else
    $chk="";
    echo "<option value=".$myrow5["Brand_ID"]." ".$chk.">".$myrow5["Brand_Name"]."</option>";
}
}



снизу идет запрос товаров в цикле while , и вставляется функция следующим образом

<select name=\"Produce_Brand_ID\"><option value=\"0\"></option>".br_xxx($myrow2["Produce_Brand_ID"])."</select>


то есть задача в нижнем цикле таблиц перечня продукции в поле выбора select вывести всех производителей, но для каждого товара чтобы был активный только тот, который относится к данному товару, связь по айдишникам Brand_ID - айдишник производителя в таблице производителей и Produce_Brand_ID айдишник производителя в группе товаров

   
 
 автор: olejek   (27.03.2008 в 15:18)   письмо автору
 
   для: AN   (27.03.2008 в 15:07)
 

Приведите весь код (если он не очень большой)
А то понять что такое "нижний цикл таблиц перечня продукции" трудно!

   
 
 автор: AN   (27.03.2008 в 15:19)   письмо автору
 
   для: olejek   (27.03.2008 в 15:18)
 

шас поковыряю, смотрю вроде цикл работает, но выводит не там где нужно

   
 
 автор: AN   (27.03.2008 в 15:35)   письмо автору
 
   для: AN   (27.03.2008 в 15:19)
 

встраивание функции происходит так

$result=mysql_query("SELECT * FROM produce WHERE Produce_Shop_ID='$id' ORDER BY Produce_ID DESC") 
while ($myrow2 = mysql_fetch_assoc($result))
{
echo <form><select name=\"Produce_Brand_ID\"><option value=\"0\"></option>".br_xxx($myrow2["Produce_Brand_ID"])."</select></form>

}
то есть функция работает, но вывод идет почему то за тегами form

<option value=1 >Acer</option><option value=19 >Adidas</option> ... ... ... ...

то есть такое впечетление по получаемому результату, что я функцию выдвинул за пределы, то есть если бы это было записано так

echo <form><select name=\"Produce_Brand_ID\"><option value=\"0\"></option></select></form>".br_xxx($myrow2["Produce_Brand_ID"])."


вначале выдает пустую форму select а за тегом </form> в самом конце начинает выплевывать все <option value=1 >Acer</option><option value=19 >Adidas</option> ... ... ... ...

   
 
 автор: olejek   (27.03.2008 в 15:37)   письмо автору
 
   для: AN   (27.03.2008 в 15:35)
 

Да приведите Вы весь код (даже если он большой:)

   
 
 автор: AN   (27.03.2008 в 15:43)   письмо автору
 
   для: olejek   (27.03.2008 в 15:37)
 

описываю эту функцию

function br_xxx($i)
{
$res_s=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($myrow5 = mysql_fetch_assoc($res_s))
{
    if($myrow5["Brand_ID"]==$i)
    $chk="selected";
    else
    $chk="";
    echo "<option value=".$myrow5["Brand_ID"]
." ".$chk.">".$myrow5["Brand_Name"]."</option>";
}
}


вывожу запрос из базы данных товаров для редактирования

$result=mysql_query("SELECT * FROM produce WHERE 
Produce_Shop_ID='$id' ORDER BY Produce_ID DESC") or 
die("SQL ERROR SELECT");
while ($myrow2 = mysql_fetch_assoc($result))
{
echo "<form id=\"f1\" name=\"f1\"  method=\"POST\" 
action=\"catalog_edit_produce.php\" 
enctype=\"multipart/form-data\">
<tr valign=top>
<td class=ind_value><b>".$myrow2["Produce_ID"]."</b>
<input type=\"hidden\" name=\"id\" value=\"".$id."\">
<input type=\"hidden\" name=\"Produce_ID\" 
value=\"".$myrow2["Produce_ID"]."\"></td>
<td class=ind_value width=85><img src=\"/__prod/".
$myrow2["Produce_ID"]."m.jpg\" width=85 
border=0><br><br><input class=\"admin_b\"  type=\"file\" 
name=\"attach\" size=\"10\"/><br><br><input 
class=\"admin_b\" type=\"submit\" name=\"delete_pic\" 
value=\"Удалить Маленькую\"></td>
<td class=ind_value width=85><a href=\"/__prod/".
$myrow2["Produce_ID"].".jpg\" target=\"_blank\">
<img src=\"/__prod/".$myrow2["Produce_ID"].".jpg\"
 width=85 border=0></a><br><br><input class=\"admin_b\" 
 type=\"file\" name=\"attach_b\" size=\"10\"/
><br><br><input class=\"admin_b\" type=\"submit\" 
name=\"delete_big\" value=\"Удалить Большую\"></td>
<td valign=top class=ind_value>
<select name=\"Produce_Brand_ID\"><option value=\"0\">
</option>".br_xxx($myrow2["Produce_Brand_ID"])."</select>
Бренд:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;или:<br>".
br_id_sel($myrow2["Produce_Brand_ID"]).$Var1.
"</select><input type=\"text\" name=\"Produce_Brand_Name\"
 maxlength=\"200\" size=\"30\" 
value=\"".br_name_sel($myrow2["Produce_Brand_ID"],
$myrow2["Produce_Brand_Name"])."\"><br>
Название/Модель:<br><textarea name=\"Produce_Name\" 
cols=\"50\" rows=\"2\">".$myrow2["Produce_Name"].
"</textarea><br><font color=FF0000>Новая цена (грн):
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Старая цена (грн):<br><input type=\"text\" 
name=\"Produce_New\" value=\"".$myrow2["Produce_New"]."\" 
maxlength=\"20\" size=\"20\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type=\"text\" name=\"Produce_Old\" value=\"".$myrow2["Produce_Old"]."\" maxlength=\"20\" 
size=\"20\"><br>Ссылка:<br><input type=\"text\" 
name=\"Produce_Http\" value=\"".$myrow2["Produce_Http"]."\" 
maxlength=\"200\" size=\"53\"></td>
<td valign=top class=ind_value>Описание:<br><textarea 
name=\"Produce_Note\" cols=\"70\" 
rows=\"10\">".$myrow2["Produce_Note"]."</textarea></td>
<td valign=top class=ind_value>
с&nbsp;<input type=\"text\" name=\"Produce_Start\" 
maxlength=\"10\" size=\"11\" 
value=\"".$myrow2["Produce_Start"]."\">&nbsp;по&nbsp;
<input type=\"text\" name=\"Produce_Stop\" maxlength=\"10\"
 size=\"11\" value=\"".$myrow2["Produce_Stop"]."\">
<br>Категория 1:<br>".sel_cc($myrow2["Produce_Category"],
"Produce_Category").$Var."</select><br>Категория 
2:<br>".sel_cc($myrow2["Produce_Category2"],"Produce_Category2")
.$Var."</select><br>
Вид подачи:<br>".prod_type($myrow2["Produce_Type"])."<br>
Вкл/Выкл:&nbsp;<input type=\"checkbox\" name=\"Produce_On_Off\" value=\"1\"".che($myrow2["Produce_On_Off"])."><br><br>Изменено: <b>".date("d-m-Y", strtotime($myrow2["Produce_Edit"]))."</b></td>
<td class=ind_value>
<input class=\"admin_b\" type=\"submit\" name=\"delete\" value=\"Удалить\"><br><br>
<input class=\"admin_b\" type=\"submit\" name=\"edit_pub\" value=\"Править\"></td>
</tr></form>";
}

   
 
 автор: AN   (27.03.2008 в 15:47)   письмо автору
 
   для: AN   (27.03.2008 в 15:43)
 

sel_cc таже самая проблема, вот только могу сделать работает по другому принципу, вначале выводится активная, потом пустое место, а потом все остальные для замены, но так не удобно

$res1_s=mysql_query("SELECT * FROM category ORDER by Category_Name") or die("SQL ERROR 1");
while ($myrow = mysql_fetch_assoc($res1_s))
{
$Var.= "<option value=".$myrow["Category_ID"].">".$myrow["Category_Name"]."</option>";
}

function sel_cc($n,$p)
{
$resn=mysql_query("SELECT * FROM category WHERE Category_ID=$n") or die("SQL ERROR 2ss");
$rown=mysql_fetch_assoc($resn);
return "<select name=".$p."><option value=".$rown["Category_ID"].">".$rown["Category_Name"]."</option><option value=\"0\"></option>";
}

   
 
 автор: olejek   (27.03.2008 в 16:03)   письмо автору
 
   для: AN   (27.03.2008 в 15:47)
 

Честно говоря, трудно разобраться, очень запутанный код.
Вложите чтоли дамп базы данных для полного счастья.

   
 
 автор: AN   (27.03.2008 в 16:22)   письмо автору
 
   для: olejek   (27.03.2008 в 16:03)
 

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

   
 
 автор: olejek   (27.03.2008 в 16:35)   письмо автору
 
   для: AN   (27.03.2008 в 16:22)
 

Я же не могу проверить работоспособность кода у себя без базы данных.

   
 
 автор: mtxd   (27.03.2008 в 17:13)   письмо автору
 
   для: AN   (27.03.2008 в 16:22)
 

УжОс какой-то...
smarty:
{html_options values=$array_with_categories output=$array_with_cat_names selected=$cat_id}

   
 
 автор: AN   (27.03.2008 в 17:18)   письмо автору
 
   для: mtxd   (27.03.2008 в 17:13)
 

фух.............
заработало!!!!
спасибо!!!
то я вообще с ХТМЛ кодом не так намутил .... вот и глюки были )))

   
 
 автор: AN   (27.03.2008 в 17:24)   письмо автору
 
   для: AN   (27.03.2008 в 17:18)
 

вот функция
function br_id_sel($i)
{
$resns=mysql_query("SELECT * FROM brand ORDER by Brand_Name") or die("SQL ERROR 1");
while ($rown1 = mysql_fetch_assoc($resns))
{
    if($rown1["Brand_ID"]==$i)
    $chk="selected";
    else
    $chk="";
    echo "<option value=".$rown1["Brand_ID"]." ".$chk.">".$rown1["Brand_Name"]."</option>";
}
}


а вот так я встроил как работает

.................<select name=\"Produce_Brand_ID\"><option value=\"0\"></option>";
echo br_id_sel($myrow2["Produce_Brand_ID"]);
echo "</select><input type=\"text\" name=\"Produce_Brand_Name\" maxlength.....................


а если в одну строку писать

.................<select name=\"Produce_Brand_ID\"><option value=\"0\"></option>".br_id_sel($myrow2["Produce_Brand_ID"])."</select><input type=\"text\" name=\"Produce_Brand_Name\" maxlength.....................


то нифига не работает, и я не могу понять почему ????
теоретически ведь разницы никакой нету???

   
 
 автор: mtxd   (27.03.2008 в 17:58)   письмо автору
 
   для: AN   (27.03.2008 в 17:24)
 

Ты сам не путаешься? Отдели мух от котлет (html от программного кода), потрать день на освоения template engine, и подобные вопросы пропадут сами собой. Смотри пример выше, твоя проблема решается в 3.5 слова.

   
Rambler's Top100
вверх

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