Подскажите как правильно занести значения из массива в <option>?

ND
На сайте с 09.01.2018
Offline
2
1038

Всем привет.

Своими силами пытаюсь написать кнопку смены размеров для товаров.

Есть база данных, в ней содержаться поля id и alt_name (имя для ЧПУ).

Ссылка к товарам формируется таким образом: www.123.com/3(это id)-test(это alt_name).html

вот так - www.123.com/3-test.html

Работает всё, кроме ссылок.

То есть для каждого <option> должна быть своя ссылка и соответствовать размеру.

А получается что все ссылки заносятся в один <option>.

Можно перейти на сайт (ссылка ниже) выбрать значение и посмотреть, что оно занесет в адресную строку.

То есть заносит не 1 значение, а сразу все.

И еще, как сделать запоминание выбранного <option>, когда переходишь на другую страницу. (может как-то через js можно?)

Движок DLE.

Прилагаю ссылку на сайт, чтобы было понятней:

Сайт

Вот сам код: (Заранее благодарю)

<?php

if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); }


/* Вывод размеров из доп. полей для передачи значения в названия <option> */
if(!$xflist_sofa_size) {
$sql_result = $db->query("SELECT xfields FROM " . PREFIX . "_post WHERE category='" . $category . "'");
while ($rows = $db->get_row($sql_result)) {
$xfields[] = $rows;
}

/* Вывод id, alt_name и формирование ссылки для передачи в value в <option> */
$result = $db->query("SELECT id, category, alt_name FROM `" . PREFIX . "_post` WHERE category='" . $category . "'");

while ($row = mysqli_fetch_array($result)) {
$id = $row[id];
$alt_name = $row[alt_name];
$sofa_url .= "http://na-matras.com/" . $id . "-" . $alt_name . ".html";
}

/* Вывод размеров из доп. полей для передачи значения в названия <option> */
$stack = array();
foreach ($xfields as $value) {
if ($value[xfields]) {
$row = xfieldsdataload($value[xfields]);
if ($row[sofa_size]) {
$rowdata = explode("|", $row[sofa_size]);
foreach ($rowdata as $value) {
if ($value) {
$value = trim($value);
array_unshift($stack, $value);
}
}
}
}
}
}

$stack = array_unique($stack);
natsort ($stack);
foreach( $stack as $value ) {
$xf_size .= "<option style=\"border-bottom: 1px solid #B04401;\" value=" . $sofa_url . ">" . $value . "\n";
}

echo "<select data-placeholder='Размер' class='chosen-select' style='width: 100px;' onchange='window.location.href=this.options[this.selectedIndex].value'><option><!-- Empty option goes here. --><option>".$xf_size."</select>";
?>
S
На сайте с 25.12.2003
Offline
173
#1

<option> Надо закрывать </option>

Красивые сниппеты Google ( https://saney.com/tools/google-snippets-generator.html )
S
На сайте с 30.09.2016
Offline
469
#2
Nik_Dev:
Прилагаю ссылку на сайт, чтобы было понятней:
Сайт

Вот сам код:

На сайте не этот код, а другой. Но не лучше.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
ND
На сайте с 09.01.2018
Offline
2
#3
Saney:
<option> Надо закрывать </option>

<option> закрыт, это тут редактировал, удалил случайно.

---------- Добавлено 08.03.2018 в 15:53 ----------

Sitealert:
На сайте не этот код, а другой. Но не лучше.

На сайте точно такой же код. Разве что изменил <select>, добавил запоминание выбранного <option>

S
На сайте с 30.09.2016
Offline
469
#4
Nik_Dev:
На сайте точно такой же код.

Это неверное утверждение.

Код на сайте

 <select id='seltag' style='width: 80px;' 
...
<option '..' style="border-bottom
Код на форуме
<select data-placeholder='Размер' class='chosen-select'
...
<option style="border-bottom


---------- Добавлено 08.03.2018 в 17:16 ----------

И что толку гадать, что и где там наредактировано, если код неправильный? Хотите узнать мнение по поводу кода - показывайте код, а не
это тут редактировал, удалил случайно
Samail
На сайте с 10.05.2007
Offline
361
#5

$sofa_url .= "http://na-matras.com/"

Конкатенация (точка перед равно), склеивает все урлы.

ND
На сайте с 09.01.2018
Offline
2
#6
Sitealert:
Это неверное утверждение.
Код на сайте
 <select id='seltag' style='width: 80px;' 

...
<option '..' style="border-bottom
Код на форуме
<select data-placeholder='Размер' class='chosen-select'

...
<option style="border-bottom


---------- Добавлено 08.03.2018 в 17:16 ----------

И что толку гадать, что и где там наредактировано, если код неправильный? Хотите узнать мнение по поводу кода - показывайте код, а не

Просто раньше был chosen, но с ним не работает куки для запоминания <option>.

Сейчас самый обычный <select> использую.

Сам код остался прежним. Я думаю, что если в убрать <select> это class="chosen-select" и это dataplaceholder="Размер", а так же добавить запись сессии в onchange, то на функции PHP оно никак не повлияет. А Вы как считаете?

Но если Вам так проще, то вот код, который не сильно отличается от того, что в посте.

<?php


ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); }


/* Вывод размеров из доп. полей для передачи значения в названия <option> */
if(!$xflist_sofa_size) {
$sql_result = $db->query("SELECT xfields FROM " . PREFIX . "_post WHERE category='" . $category . "'");
while ($rows = $db->get_row($sql_result)) {
$xfields[] = $rows;
}

/* Вывод id, alt_name и формирование ссылки для передачи в value в <option> */
$result = $db->query("SELECT id, category, alt_name FROM `" . PREFIX . "_post` WHERE category='" . $category . "'");

while ($row = mysqli_fetch_array($result)) {
$id = $row[id];
$alt_name = $row[alt_name];
$sofa_url .= "http://na-matras.com/" . $id . "-" . $alt_name . ".html";
}

/* Вывод размеров из доп. полей для передачи значения в названия <option> */
$stack = array();
foreach ($xfields as $value) {
if ($value[xfields]) {
$row = xfieldsdataload($value[xfields]);
if ($row[sofa_size]) {
$rowdata = explode("|", $row[sofa_size]);
foreach ($rowdata as $value) {
if ($value) {
$value = trim($value);
array_unshift($stack, $value);
}
}
}
}
}
}

$stack = array_unique($stack);
natsort ($stack);
foreach( $stack as $value ) {
$xf_size .= "<option '.$selected.' style=\"border-bottom: 1px solid #B04401;\" value=" . $sofa_url . ">" . $value . "</option>\n";
}


echo "<select id='seltag' style='width: 80px;' onchange='window.location.href=this.options[sessionStorage.seltag=this.selectedIndex].value'>".$xf_size."</select>";


---------- Добавлено 08.03.2018 в 18:52 ----------

Samail:
$sofa_url .= "http://na-matras.com/"

Конкатенация (точка перед равно), склеивает все урлы.

Без неё выводит только последнее значение id и alt_name.

S
На сайте с 30.09.2016
Offline
469
#7
Nik_Dev:
А Вы как считаете?

А я так считаю, что рассматривать надо тот код, который используется, чтобы не гадать, какой косяк отредактирован, а какой - нет.

Впрочем, выше Samail уже указал на главную ошибку.

И ещё некорректно

"<option '.$selected.'
Если фраза открывается двойной кавычкой, то и закрывать надо двойной. И то же самое с одинарными.
ND
На сайте с 09.01.2018
Offline
2
#8
А я так считаю, что рассматривать надо тот код, который используется, чтобы не гадать, какой косяк отредактирован, а какой - нет.

Согласен с Вами, но никаких поправок в часть php не вносил.

Sitealert:

Впрочем, выше Samail уже указал на главную ошибку.
И ещё некорректно
"<option '.$selected.'
Если фраза открывается двойной кавычкой, то и закрывать надо двойной. И то же самое с одинарными.

А как можно по другому задать? Без . только последнее значение выводит.

Кинуть id и alt_name в массив и сделать перебор массива? Или можно как-то по другому реализовать?

Подскажите пожалуйста, буду весьма признателен.

S
На сайте с 30.09.2016
Offline
469
#9

Да, закидывайте все переменные данные для option в массив, а потом выводите циклом.

ND
На сайте с 09.01.2018
Offline
2
#10
Sitealert:
Да, закидывайте все переменные данные для option в массив, а потом выводите циклом.

Спасибо огромное, буду пробовать )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий