【问题标题】:Autopopulating a dynamically generated form自动填充动态生成的表单
【发布时间】:2015-09-30 21:36:25
【问题描述】:

我构建了一个可以从 MySQL 数据库中选择数据的表单,并且所选行的所需字段将显示在表单的输入字段中。但是,从某种意义上说,这种形式是动态的,您可以拥有同一种形式的多种形式。

如果生成了两个或多个表单,则只有第一个表单会自动填充。我希望每个表单在从数据库中选择一行时自动填充其相应的输入字段。

代码如下:

<?php
$start=1;
$end= $_POST['item']; echo'<br>';

for($start;$start<=$end;$start++){

require("connect.php");

$sql = "(SELECT * FROM drug_name)";


 $result = mysqli_query($conn, $sql);


?>
<form align="center" method="post" action="transaction.php">


        Name:
        <select align="right" name="inputname[]" onchange="showunit(this.value); showqty(this.value)"
 value="inputvalue[]">
 <option selected="selected" value="0">S/N Select drug --</option>

 <?php while($row = $result->fetch_assoc()){ ?>

 <option value='<?php echo $row['SN']; ?>'><?php     

echo$row['Drug_Item_Name']?></option> 

        <?php
}
    ?>      

        </select>



        <td  align="right">Stock Level:</td>
        <td><input type="text" name="input3[]" placeholder="Enter QTY" size="5" id="displayqty"></td>
        </tr> 


<?php       echo '<br>'; ?>

<?php }

?>   </form>

这是制作AJAX代码的代码:

     <script>
        function showqty(str) {   

            if (str == "") {
        document.getElementById("displayqty").value = "";    
                return;  `
            } else {     
                if (window.XMLHttpRequest) {




                    // code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp = new XMLHttpRequest();
                } else {    
                    // code for IE6, IE5
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange = function() {
                    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                        document.getElementById("displayqty").value = xmlhttp.responseText;
                    }
                }
                xmlhttp.open("GET","qtydisplay.php?q2="+str,true);
                xmlhttp.send();
            }
        }  


        </script>

这是从 MySQL 数据库中获取数据的 AJAX 代码:

        <?php

        $q2 = intval($_GET['q2']);
        include("connect.php");//connection to database


        mysqli_select_db($conn,"ajax_demo");
        $sql="SELECT Qty_Stocked FROM drug_name WHERE SN = '".$q2."' LIMIT 1";
        $result = mysqli_query($conn,$sql);


        while($row = mysqli_fetch_array( $result)) {
            echo $row['Qty_Stocked'];  
        }

        mysqli_close($conn);
        ?>

【问题讨论】:

  • SQL 一开始就错了 - 从字符串内部删除圆括号。除此之外,我看不到一个具体的问题。此脚本中的哪些具体内容不起作用?
  • for() 循环很奇怪——你在循环之外给了它一个起始值。将其移到内部,因此:for($start = 1; ....
  • @Halfer,感谢您的回复。只有第一个表单会自动填充输入字段。我希望每个包含 标记的表单都能够从数据库中选择数据并自动填充它们对应的输入字段
  • 您想通过 AJAX 来实现吗?如果是这样,您是否有任何代码可以尝试这样做?如果有,我们可以看看吗?
  • 我现在重新编辑了您的问题,以提请注意单独的部分。我想知道您是否需要一张图片来展示这些表格目前的运作方式?显示代码很好,但我认为表单的功能或 AJAX 回复应包含的内容尚不清楚。看起来您正在返回整数值,您是否只想以所有形式这样做?

标签: php html mysql forms


【解决方案1】:

以下是我解决此问题的方法。我已经在 cmets 中给出了所有这些信息,但是如果我以编号的方式列出它可能会有所帮助,这样它就不会产生歧义。最好避免在此处跳过项目,因为每个任务都依赖于前一个任务。

  1. 首要任务是修复重复的id 属性。在你的循环中考虑这个 HTML:

    <td>
        <input type="text" name="input3[]"
               placeholder="Enter QTY" size="5" id="displayqty">
    </td>
    

    这将为您提供多个具有冲突唯一标识符的输入标签。您可以在这里使用整数,或者$row['SN'] 会这样做吗?如果该值是唯一的,您可以执行以下操作:

    <td>
        <input type="text" name="input3[]"
               placeholder="Enter QTY" size="5"
               id="displayqty_<?php echo (int) $row['SN'] ?>"
        >
    </td>
    

    (出于安全原因,我已将其强制为 int,但如果它在数据库中定义为整数,则不需要此)。

    修改代码以呈现 id 属性的唯一名称后,查看生成的 HTML 并确保其正常工作。

  2. 然后您需要修改您的 JavaScript 函数,以便您可以告诉它使用什么 id。由于它目前硬连线到displayqty,它最多只会修改一个元素,这不是你想要的。尝试切换:

    function showqty(str)
    

    到这里:

    function showqty(str, id)
    

    然后,您可以在函数中使用变量 id 而不是 "displayqty"。

  3. 最后要将它们连接在一起,您的更改处理程序需要传入目标id。改变这个:

    showqty(this.value)
    

    到您之前用于id 的任何字符串。例如,也许是这个?

    showqty(this.value, "displayqty_<?php echo (int) $row['SN'] ?>")
    

请记住,这未经测试,我对您的屏幕在这里的作用只有一个初步的了解。不要指望这会在没有一点调整和调试的情况下工作——如果你愿意坚持,你就会到达那里。祝你好运!

【讨论】:

  • 感谢您抽出宝贵时间提供帮助。我真的很感激。但不幸的是我无法得到。我尝试了所有可能的方法,但无济于事。你能用假设的数据库在你的电脑上试试吗?谢谢。
  • 我希望我可以让它工作@walex,但我们试图鼓励这里的发布者自己修复它 - 如果有人为你这样做,那么你将不会学到任何东西。你有什么特别的问题?您的控制台中是否有任何 JavaScript 错误?
  • 我实际上遵循了您上面概述的步骤。不知道是不是应该改js脚本。
  • @walex:是的,我已经更改了 JavaScript。
  • 以上脚本有变化吗?
猜你喜欢
  • 2017-12-17
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2019-07-13
  • 2016-07-05
  • 2011-10-22
  • 2018-11-28
相关资源
最近更新 更多