我有一个只有<select>
元素的html表单。在表单下面我有一个文本框,我想根据表单中选择的选项更新文本框的值。
我不确定这是否可以在PHP中使用,我知道我可以使用Javascript / Jquery,但我正在研究一个学校项目及其PHP项目。我的老师已经完成了,但我不确定他是否使用过PHP。
这是我的代码:
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="books">
<?php
$books = simplexml_load_file("books.xml");
foreach($books->book as $book){
$code = $book->code;
$title = $book->title;
echo "<option value='$code'>$code: $title</option>";
}
?>
</select>
</form>
<?php
$choice = $_POST['books'];
echo "<input type='text' value='$choice'>";
?>
首次加载页面时,我希望所选选项的值位于文本框中。我不确定如何在PHP中执行此操作。帮助将不胜感激。
答案 0 :(得分:1)
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="books" onchange="javascript:document.form.submit();">
<?php
$books = simplexml_load_file("books.xml");
foreach($books->book as $book){
$code = $book->code;
$title = $book->title;
echo "<option value='$code'>$code: $title</option>";
}
?>
</select>
</form>
<?php
$choice = isset($_POST['books'])?$_POST['books']:'';
echo "<input type='text' value='$choice'>";
?>
答案 1 :(得分:0)
首次加载页面时,没有POST数据,因此您可以将$choice
设置为列表中的第一本书:
$choice = isset($_POST['books']) ? $_POST['books'] : $books->book[0]->code;
但是你必须在这里完善PHP和JavaScript之间的区别。
当服务器上有请求时,PHP只能更改该值,因为它是服务器端语言。如果您希望立即更新值,而无需提交表单,则需要使用JavaScript。
答案 2 :(得分:0)
如果它必须是纯PHP,那么在表单上放置一个提交按钮,以便进行选择。这将设置您要查找的值。其他人提供了有关如何使用javascript自动执行此表单提交的示例,但最终结果是相同的。
答案 3 :(得分:0)
编辑,作为带有提交按钮的纯PHP解决方案,它将在初始页面加载时加载数据,然后根据选择使用提交按钮加载数据。
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="books">
<?php
$books = simplexml_load_file("books.xml");
foreach($books->book as $book){
$code = $book->code;
$title = $book->title;
echo "<option value='$code'>$code: $title</option>";
}
?>
</select>
<input type="submit" value="submit" name="submit">
</form>
<?php
if(isset($_POST['submit'])){
$choice = isset($_POST['books']) ? $_POST['books'] : $books->book[0]->code;
echo "<input type='text' value='$choice'>";
}
else{
$choice = isset($_POST['books']) ? $_POST['books'] : $books->book[0]->code;
echo "<input type='text' value='$choice'>";
}
?>
onchange
以下方法可行,使用Javascript和getElementById
,它会使用onchange
函数在文本框中回显选择。
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="books" onchange="update_textbox()" id="id_books">
<?php
$books = simplexml_load_file("books.xml");
foreach($books->book as $book){
$code = $book->code;
$title = $book->title;
echo "<option value='$code'>$code: $title</option>";
}
?>
</select>
</form>
<?php
$choice = isset($_POST['books']) ? $_POST['books'] : '';
echo "<input type='text' value='$choice' id='showit'>";
?>
<script>
function update_textbox(){
var selectbox = document.getElementById('id_books');
var id_books = selectbox[selectbox.selectedIndex].text;
document.getElementById('showit').value=id_books ;
}
</script>
要在初始页面加载时将数据加载到文本框中,请使用:
替换:
$choice = isset($_POST['books']) ? $_POST['books'] : '';
使用:
$choice = isset($_POST['books']) ? $_POST['books'] : $books->book[0]->code;
答案 4 :(得分:0)
你可以用PHP来做,看起来好像你只是缺少提交按钮来实际发布选择。
要提交没有提交按钮的表单,您需要使用javascript,例如
<select onchange="this.form.submit()">....</select>
下面是一个简单的例子(静态选项而不是xml),它也在select中设置了所选的选项(IMO这比在文本输入中打印它更实用)
<?php
$val = isset($_REQUEST['books']) ? $_REQUEST['books'] : null;
?>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="books" onchange="this.form.submit()">
<option value=>Choose a book</option>
<option<?php if($val && $val === 'opt 1'){ print ' selected';}?>>opt 1</option>
<option<?php if($val && $val === 'opt 2'){ print ' selected';}?>>opt 2</option>
</select>
<noscript><button type="submit">Submit</button></noscript>
</form>
<?php if($val){ ?>
<input type="text" value="<?php echo $_REQUEST['books']; ?>">
<?php } ?>
这可能只适用于学校练习,但在现实世界中,您可能想要清理任何用户输入($ _REQUEST ['book'] / $ _POST ['book'])并使用更好的模板引擎比香草PHP(我喜欢Twig)帮助将表示与功能逻辑分开。