从 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将数据加载到<select>
的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_encode
:json_encode($array_that_stores_your_data);
然后稍后在 javascript 中使用 JSON.parse(response)
将您的数据转换为 javascript 对象,然后您可以使用 for in
或 for
循环进行循环。我希望这是有道理的。顺便说一句,如果您在 cmets 中发布代码以使人们可以阅读,则可以使用 3 个反引号来包装您的代码。
是的 json_encode
是一个 php 函数。我假设您已经知道如何用数据库中的数据填充数组,所以这很容易。【参考方案3】:
您必须使用 javascript 来执行此操作。有两种方式:
1) 将您的 PHP 数据保存到 javascript 对象,并在 select 上添加一个更改事件,该事件取决于所选选项,进入 javascript 对象以查找新输入的值
或
2) 在 select 上添加更改事件以执行 AJAX 请求并刷新输入值
【讨论】:
以上是关于从 php/mysql 动态创建的选择框更新文本框的主要内容,如果未能解决你的问题,请参考以下文章