从 php/mysql 动态创建的选择框更新文本框

Posted

技术标签:

【中文标题】从 php/mysql 动态创建的选择框更新文本框【英文标题】:Update a textbox from a php/myswl dynamically created select box 【发布时间】:2012-11-25 04:56:26 【问题描述】:

所以我试图让一组文本框显示当前选择框的信息,该选择框是从 php mysql 请求动态创建的。选择生成正常,但仅填充表格的最后一行。我想让它在您更改选择框时更新文本框以反映新信息。

从 MySQL 获取信息的当前代码:

  <div id="edithidden" style="display:none;">
        <div id="prompt"><strong>Section to Edit:</strong></div>
        <div id="answer">
        <form id="editorginfo" action="" method="post">
            <select id="edit">
                <option>Section to Edit</option>
                <?php
$query = $db->query("SELECT ID, OrgName, Phone, Location FROM emergencyorg");

while ($row = $query->fetch(PDO::FETCH_ASSOC)) 
$pid=$row['ID'];
$name=$row['OrgName'];
$phone=$row['Phone'];
$loc=$row['Location'];

        echo "<option value='" . $pid . "' ";
        if($row['OrgName']==$pid)
        echo ' selected';
        
        echo">" . $name . "</option>";

?>
</select>
        </div>          
        <div id="prompt">Organization Name:</div>
    <div id="answer">
        <input type="text" name="editorgname" id="editorgname" value="<?=$name?>"/>
    </div>
    <div id="prompt">Organization Phone Number:</div>
    <div id="answer">
        <input type="text" name="editorgphone" id="editorgphone" value="<?=$phone?>"/>
    </div>
    <div id="prompt">Orginization Location:</div>
    <div id="answer">
        <input type="text" name="editorglocation" id="editorglocation" value="<?=$loc?>"/>
    </div>
    <div id="prompt">
        <input type="submit" id="editorg" name="editorg" value="Update Information" />
    </div>
    </form>
    </div>

这是否必须使用 AJAX 来完成?

再次提前致谢!

【问题讨论】:

您必须为此使用 AJAX。 如果您想在不刷新页面的情况下动态更新文本框,那么您必须使用 ajax。 你的意思是mysql,不是myswl,对吧? 【参考方案1】:

是的,ajax 可能是你最好的选择。

但是,如果您不想这样做(也许将服务器上的点击量保持在最低限度很重要),那么您可以将每个组织的所有数据加载到隐藏字段中(使用组织的 ID 作为前缀区分不同的组织)然后使用javascript将数据加载到&lt;select&gt;的onchange事件中的字段中

可能是这样的(使用 jQuery 的未经测试的半伪代码)

<select onchange="changeOrg(this);">
<option value='1'>My org</option>
.
.
.
</select>
<input type="hidden" name="1_org_address" id="1_org_address" value="12 Nowhere St" />
.
.
.

<label>Address</label><br />
<input type="text" name="org_address" id="org_address" />

<script>
function changeOrg(org)
var chosen_org_id = $(org).val()
 $("#org_address").val($("#" + chosen_org_id + "_org_address").val());
//etc

</script>

【讨论】:

所以使用这种方法,数组的其余部分必须正确输出到隐藏字段? 是的,圆点表示“这里有更多相同类型的东西” 不确定如何格式化 PHP 以将数组的剩余部分输出到隐藏代码。也许我今晚太累了,无法解决这个问题,哈哈。 是的,你不能在选择选项的同时直接输出隐藏字段。但是您可以连接一个带有隐藏字段 html 的字符串,然后在您完成循环选择选项后打印出该字符串。丑陋的。 AJAX 方法需要更多技巧,但可能更优雅、可读性和可维护性更高。【参考方案2】:

如果您想避免页面重新加载,那么 ajax 是您的最佳选择。您可以使用 jQuery $.post 方法来执行此操作。 http://api.jquery.com/jQuery.post/

这是一个示例代码:

$('#select').change(function()
  var val = $(this).val();
  $.post('data_source.php', 'select_value' : val, 
    function(response)
       $('#table').html(response);
    
  );
);

但是如果您的输入已经在数据库中,也许您可​​以立即加载它们,并在选择框的值更改时隐藏和显示内容。

【讨论】:

好的,然后在php文件中抛出这样的东西? query("SELECT * FROM emergencyorg WHERE ID = val"); while($row = $query->fetch(PDO::FETCH_ASSOC)) $orgname = $row['OrgName']; $phone = $row['电话']; $loc = $row['位置']; ?> 是的,如果您正在使用表格(也将表格标签放在那里)但是如果您想更新某些文本框的值,那么您必须像这样在您的服务器中使用json_encodejson_encode($array_that_stores_your_data); 然后稍后在 javascript 中使用 JSON.parse(response) 将您的数据转换为 javascript 对象,然后您可以使用 for infor 循环进行循环。我希望这是有道理的。顺便说一句,如果您在 cmets 中发布代码以使人们可以阅读,则可以使用 3 个反引号来包装您的代码。 是的 json_encode 是一个 php 函数。我假设您已经知道如何用数据库中的数据填充数组,所以这很容易。【参考方案3】:

您必须使用 javascript 来执行此操作。有两种方式:

1) 将您的 PHP 数据保存到 javascript 对象,并在 select 上添加一个更改事件,该事件取决于所选选项,进入 javascript 对象以查找新输入的值

2) 在 select 上添加更改事件以执行 AJAX 请求并刷新输入值

【讨论】:

以上是关于从 php/mysql 动态创建的选择框更新文本框的主要内容,如果未能解决你的问题,请参考以下文章

如何根据从其他框中选择的文本更改动态创建的组合框的显示项

在选择 tableview 项目时更新 ViewController 文本框

动态 Vuetify 文本框或基于数组值选择

使用 C# 创建与数据库值相关的动态文本框

php mysql更新表选项列表框

在 MS Access 中,创建动态查询后,如何使用记录集中的相应值更新表单上的文本框?