Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача переменной JS в PHP или наоборот? (https://javascript.ru/forum/misc/77107-peredacha-peremennojj-js-v-php-ili-naoborot.html)

crystaltrumpet 25.03.2019 13:45

Передача переменной JS в PHP или наоборот?
 
Хочу написать красиво код а не делать бесконечные:
else if (opt == 1) {}
else if (opt == 2) {}
else if (opt == 3) {}
и так далее...
Сейчас мне приходится вручную подставлять в многомерный массив
<?=$types[1]["max_sum"] ?>
<?=$types[2]["max_sum"] ?>
<?=$types[3]["max_sum"] ?>
и так далее
А я хочу один раз написать :
<?=$types[opt]["max_sum"] ?>

Чтобы при переключении <select> у меня менялись значения в многомерном массиве.
Можно ли это сделать не плодя бесконечные else if а просто меняя значения в многомерном php массиве $types? Меняя первое значение в массиве по типу:
<?=$types[opt]["max_sum"] ?>

Я больше часа искал ответ но так и не нашел к сожалению(
Вот мой кусок кода:

var opt = this.value;
  var get = document.getElementById('psevdo');
  
  if (opt >= 4) {
    document.getElementById('whats').innerHTML = "Введите сумму от <?=$types[3]["min_sum"] ?> до <?=$types[3]["max_sum"] ?> руб.: &nbsp;";
    get.value = '<?php echo $types[3]["min_sum"]; ?>';
   
    
  } else if (opt == 3) {
    document.getElementById('whats').innerHTML = "Введите сумму от <?=$types[2]["min_sum"] ?> до <?=$types[2]["max_sum"] ?> руб.: &nbsp;";
    get.value = '<?php echo $types[2]["min_sum"]; ?>';
    
    
  } else if (opt == 2) {
    document.getElementById('whats').innerHTML = "Введите сумму от <?=$types[1]["min_sum"] ?> до <?=$types[1]["max_sum"] ?> руб.: &nbsp;";
    get.value = '<?php echo $types[1]["min_sum"]; ?>';

Nexus 25.03.2019 13:52

Кодируйте ваш массив $types в json (json_encode), json вставляйте в js-переменную, дальше работайте по-человечески только с js, без php-инъекций.

crystaltrumpet 25.03.2019 14:00

Nexus подскажите как мне перекодировать в json_encode если мой массив $type имеет вот такую структуру:
Array
(
    [0] => Array
        (
            [0] => 1
            [id] => 1
            [1] => 0
            [user_id] => 0
            [2] => 
            [user] => 
            [3] => Хапуга
            [name] => Хапуга
        )
    [1] => Array
        (
            [0] => 2
            [id] => 2
            [1] => 0
            [user_id] => 0
            [2] => 
            [user] => 
            [3] => Гаврила
            [name] => Гаврила
        )
)

Я пишу:
$jso = json_encode($types);
но это не работает я так понимаю из за многомерного массива

QoreCode 25.03.2019 14:16

Всё замечательно работает. Строку просто передайте в js любым доступным вам способом (хоть как глобальную переменную), а затем просто разкодируйте методом JSON.parse() пример

Nexus 25.03.2019 14:19

crystaltrumpet, вы обращаетесь к данным по числовым ключам?
Может стоить отказаться от mysqli_fetch_array в пользу mysqli_fetch_assoc?

Цитата:

Сообщение от crystaltrumpet
это не работает

Вы уверены?

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

Nexus 25.03.2019 14:22

Цитата:

Сообщение от QoreCode
а затем просто разкодируйте методом JSON.parse()

а почему не так (без декодирования)?
var types=<?php echo json_encode($types); ?>;

QoreCode 25.03.2019 14:30

Тестил в браузере.
Проверил сейчас вариант var types=<?php echo json_encode($types); ?>;
Работает.
Снимаю шляпу)

crystaltrumpet 25.03.2019 14:44

Цитата:

Сообщение от QoreCode (Сообщение 505403)
Тестил в браузере.
Проверил сейчас вариант var types=<?php echo json_encode($types); ?>;
Работает.
Снимаю шляпу)

у меня выдает ошибку наверное нужны кавычки:
var types='<?php echo json_encode($types); ?>';
вот что пишет:
Uncaught SyntaxError: Unexpected token ;
var types=;

Nexus 25.03.2019 14:53

Цитата:

Сообщение от crystaltrumpet
у меня выдает ошибку наверное нужны кавычки:

Наоборот, амперсанды апострофы удалите.

crystaltrumpet 25.03.2019 15:06

а где амперсанды ?
& тут нет нигде

В общем не могу понять почему у меня такие проблемы с этой штукой...


Часовой пояс GMT +3, время: 19:47.