2012-12-07 43 views
0

所以我试图获得一组文本框来显示当前的信息到从PHP MySQL请求动态创建的选择框。 select生成正常,但只填充表格的最后一行。我想这样做以便在更改选择框时文本框会更新以反映新信息。从php/myswl动态创建的选择框中更新文本框

当前代码从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做了什么?

再次提前致谢!

+0

你必须为此使用AJAX。 –

+0

如果你想动态更新文本框而不刷新页面,那么你必须去ajax。 –

+0

你的意思是mysql,不是myswl,对不对? –

回答

0

是的,阿贾克斯可能是你最好的选择。

但是,如果你不想做(也许保持在服务器上点击到最小是很重要的),那么你可以为每一个组织中所有的数据加载到隐藏字段(使用组织的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> 
+0

所以用这种方法数组的其余部分将不得不被输出到隐藏的字段正确吗? – PHaeLiX

+0

是的,这些小点表示“更多相同类型的东西在这里” –

+0

不知道如何格式化PHP,以便将数组的其余部分输出到隐藏代码。也许我太累了,无法解决今晚的大声笑。 – PHaeLiX

0

您将代码必须使用JavaScript来做到这一点。有两种方法:

1)将你的PHP数据保存到一个javascript对象,并在select上添加一个change事件,这取决于选择的选项,在javascript对象中找到新的输入值

2)添加一个变化事件上的选择做一个AJAX请求,如果你想避免刷新页面刷新输入值

0

,那么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); 
    } 
); 
}); 

但如果你输入的是已经在数据库中,也许你可以只加载它们马上,只是隐藏和显示的东西时,选择框的值变化。

+0

好的,然后在PHP文件中扔这样的东西? <?include_once“connect.php”; $ query = $ db-> query(“SELECT * FROM emergencyorg WHERE ID = val”); ($ row = $ query-> fetch(PDO :: FETCH_ASSOC)){ $ orgname = $ row ['OrgName']; $ phone = $ row ['Phone']; $ loc = $ row ['Location']; } ?> – PHaeLiX

+1

是的,如果你使用表格(也可以把表格标签放在那里),但是如果你想更新一些文本框的值,那么你必须在你的服务器中使用''json_encode'''像这样:''''json_encode($ array_that_stores_your_data);'''然后在JavaScript中使用'''JSON.parse(response)'''将数据转换为javascript对象,然后使用''' '在'''或''''''循环。我希望这是有道理的。 顺便说一下,如果您在评论中发布代码以使人们可读,那么您可以使用3个反引号来包装代码。 –

+0

我可以把json_encode($ array)到PHP中吗?从来没有这样做 – PHaeLiX