php 参考选择输入[关闭]

cigdeys3  于 2023-02-18  发布在  PHP
关注(0)|答案(1)|浏览(90)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

18小时前关门了。
Improve this question
我有一个网络应用程序,它有一个超过100个选项的选择输入。所有这些选项都是硬编码到html中的,我必须定期更新这个列表。有没有办法让我通过连接到数据库来自动更新这个列表?
我什么都没试过。我只是不知道从哪里开始。

0md85ypi

0md85ypi1#

嗯,100个选择是一个“很多”的选择。
但是,您可以使用某种“数据感知”控件来完成此操作。
然而,某种“下钻”或组织选择在这里会很有意义。
我不记得曾经在一个有100多个选择的页面上。所以,我认为有必要对整个业务流程和目标进行某种“重新思考”。
软件“解决方案”一开始就有一定的范围。所以,“更多”然后仅仅抛出100个选择是整个问题的首要方面。
所以,我们需要两样东西:
选择的数据库表“列表”。
“保存”+“存储”用户选择的数据库表。
现在,当然,随着时间的推移,选择列表将会、能够、也应该能够改变。因此,我们还需要规范化数据(如果我们不这样做,那么我们将面临一个非常困难的旅程,将不得不编写永远模式的代码)。
因此,我们将假设说:
MyTripPlanner -一个描述旅行的记录,让我选择我想去的地方。
MyTripHotels -列出“许多”选择的子表。
MyHotels -提供选择的表格。
因此,我们的标记将如下所示:

<div id="TripRecord" style="float: left">

    <h3>Trip Details</h3>
    <div style="float: left">
        <h3>TripDate</h3>
        <asp:TextBox ID="txtTripDate" runat="server"
            TextMode="Date" f="TripDate">
        </asp:TextBox>
    </div>
    <div style="float: left; margin-left: 35px">
        <h3>Notes</h3>
        <asp:TextBox ID="txtNotes" runat="server"
            TextMode="MultiLine"
            f="Notes" Height="139px" Width="469px"></asp:TextBox>
    </div>

</div>
<div style="clear: both"></div>
<h3>Pick Hotels</h3>
<asp:CheckBoxList ID="CKHotels" runat="server"
    DataValueField="ID"
    DataTextField="HotelName" CellPadding="8"
    CellSpacing="5" RepeatColumns="10"
    RepeatDirection="Horizontal">
</asp:CheckBoxList>

请注意,没有太多的标记。
我们要加载的代码如下:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        LoadTrip()
        LoadHotels()
        LoadMyChoices
    End If
End Sub

Sub LoadTrip()

End Sub

Sub LoadHotels()

    Dim strSQL =
        "SELECT ID, HotelName FROM tblHotels where HotelName is not null
        ORDER BY HotelName"

    CKHotels.DataSource = Myrst(strSQL)
    CKHotels.DataBind()

End Sub

Sub LoadMyChoices()

    ' get list of current user hotel choices, and "check" the boxes in the list.
    Dim UserID = 123        ' faking user id since we don't have logon's setup yet

    Dim rstMyHotels As DataTable =
        Myrst($"SELECT ID, Hotel_ID, UserID FROM tblMyHotelChoices WHERE UserID = {UserID}")

    ' now check the checkboxes
    For Each OneCheckItem As ListItem In CKHotels.Items

        Dim SearchRows As DataRow() = rstMyHotels.Select($"Hotel_ID = {OneCheckItem.Value}")
        If SearchRows.Length > 0 Then
            OneCheckItem.Selected = True
        End If

    Next

End Sub

现在98个选项的结果是:

因此,请注意我们需要的标记非常少。
这是由于使用数据库来“驱动”选择,以及我们拥有的复选框的数量。
因此,如果明天再添加5家酒店,那么它们将“只”显示在列表中,因为复选框列表不是硬编码的,而是具有基于Hotels表的数据源。
这种方法也意味着你可以添加更多的酒店,用户可以从列表中选择,并且不需要对代码逻辑做任何修改。
现在,我没有提交按钮,但它可以简单地“反转”从数据库中选择的代码。

相关问题