#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. Да, я сожалею. Одного
)
слишком много. Я удалил его.