PHP:如何基于select元素的值更新html文本元素?

时间:2014-09-15 12:58:22

标签: php html

我有一个只有<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中执行此操作。帮助将不胜感激。

5 个答案:

答案 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)帮助将表示与功能逻辑分开。