Передать echo php в javascript

#javascript #php

#javascript #php

Вопрос:

В соответствии с вопросом я реализовал динамическую форму в javscript, которая требует, чтобы первый параметр, выбранный в select, соответствовал другому в новом select:

 <!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Documento senza titolo</title>
        <script>
            function random_function()
            {
                var a=document.getElementById("input").value;
                if(a==="INDIA")
                {
                    var arr=["Maharashtra","Delhi"];
                }
                else if(a==="USA")
                {
                    var arr=["Washington","Texas","New York"];
                }

                var string="";

                for(i=0;i<arr.length;i  )
                {
                    string=string "<option>" arr[i] "</option>";
                }
                string="<select name='any_name'>" string "</select>";
                document.getElementById("output").innerHTML=string;
            }
        </script>
</head>
    <body>
        <select id="input" onchange="random_function()">
            <option>select option</option>
            <option>INDIA</option>
            <option>USA</option>
        </select>
        <div id="output">

        </div>
    </body>
</html>
  

до сих пор здесь ничего странного, но теперь мне стало интересно, предварительно создав db, как я могу вместо cities статическим способом реализовать <?php echo $row_regioni['regione']; ?> ?

 <select>
<?php do { ?>
<option>
<?php echo $row_regioni['regione']; ?>
</option>
<?php } while ($row_regioni = mysqli_fetch_assoc($regioni)); ?>
</select>
</form>
  

Комментарии:

1. Вы не сможете получить доступ $row_regioni['regione'] с помощью логики do-while, поскольку переменная не установлена на первой итерации. Запустите цикл с помощью while ($row_regioni = mysqli_fetch_assoc($regioni)) , и тогда вы сможете получить доступ к массиву

2. @tshimkus хорошо, вы можете привести письменный пример?

Ответ №1:

Вы можете сделать что-то вроде этого

 <select id="input">
  <option value="">select option</option>
  <?php foreach(mysqli_fetch_assoc($regioni) as $region){ ?>
    <option value="<?php echo $region['regione']; ?>"><?php echo $region['regione']; ?></option>
  <?php } ?>
</select>
  

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

 <option value="<?php echo $region['regione']; ?>"<?php ($region['regione'] == 'INDIA') ? echo 
 ' selected="selected"' : '' ?>><?php echo $region['regione']; ?></option>
  

Ответ №2:

Код для html следующий.

 <select>
    <?php
    while(($row = mysqli_fetch_assoc($regioni)) !== null){
        print(
            "<option value='".htmlentities($row['regione'])."'>".
                htmlentities($row['regione']).
            "</option>"
         );
    }
    ?>
</select>
  

Для передачи его в javascript существует несколько решений. Самый простой (который я бы не выбрал из-за путаницы javascript с php) — это:

 <?php
    $regions = array();
    while(($row = mysqli_fetch_assoc($result)) !== null){
        array_push($regions, '"'.str_replace('"', '\"', $row['regione']).'"');
    }
?>
<script>regions = [<?php print(implode(",nt", $regions)); ?>];</script>
  

Это установит массив regions , к которому затем будет доступен доступ в javascript. Вы можете изменить свой js-код, чтобы:

 function random_function(){
    // ... 
    var string = "";
    for(var i = 0; i < regions.length; i  ){
        string  = "<option value='"   regions[i]   "'>"   regions[i]   "</option>";
    }
    string = "<select name='any_name'>"   string   "</select>";
    //...
}
  

Тогда ваш пример выглядит следующим образом:

 <!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Documento senza titolo</title>
    <?php
        $regions = array();
        while(($row = mysqli_fetch_assoc($result)) !== null){
            array_push($regions, '"'.str_replace('"', '\"', $row['regione']).'"');
        }
    ?>
    <script>regions = [<?php print(implode(",nt", $regions)); ?>];</script>
    <script>
        function random_function(){
          var a = document.getElementById("input").value;
          var arr;
          
          if(a === "INDIA"){
            arr = ["Maharashtra", "Delhi"];
          }
          else if(a === "USA"){
            arr = ["Washington", "Texas", "New York"];
          }
          
          var options = "";
          
          for(var i = 0; i < regions.length; i  ){
            options  = "<option value='"   regions[i]   "'>"   regions[i]   "</option>";
          }
          
          var select ="<select name='any_name'>"   options   "</select>";
          document.getElementById("output").innerHTML = select;
        }
      </script>
  </head>
  <body>
    <select id="input" onchange="random_function()">
      <option>select option</option>
      <option>INDIA</option>
      <option>USA</option>
    </select>
    <div id="output">

    </div>
  </body>
</html>  

Я бы предпочел создать select с помощью php. Если это невозможно, я бы использовал ajax-запрос для получения значений из базы данных. Но я предполагаю, что вы не очень хорошо знакомы с js, поэтому я не буду публиковать код для этого. Это продвинутые методы.

Комментарии:

1. синтаксис ошибки: array_push($regions, ‘»‘.str_replace(‘»‘, ‘\»‘, $ строка[‘regione’].'»‘)));

2. Да, я сожалею. Одного ) слишком много. Я удалил его.