php - 自动填充动态生成的表单

标签 php html mysql forms

我构建了一个表单,可以从 MySQL 数据库中选择数据,所选行的所需字段将显示在表单的输入字段中。但是,此表单是动态的,因为您可以拥有同一表单的多个表单。

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

Illustration of forms

这是代码:

<?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);
        ?>

最佳答案

这是我解决这个问题的方法。我已经在评论中给出了所有这些信息,但如果我以编号方式列出它,也许会有所帮助,以便它是明确的。最好避免在这里跳过项目,因为每个任务都依赖于前一个任务。

  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'] ?>")
    

请记住,这还没有经过测试,我只是粗略地了解您的屏幕在这里所做的事情。不要指望在没有稍微调整和调试你的终端的情况下它就能工作——如果你愿意坚持下去,你就会到达那里。祝你好运!

关于php - 自动填充动态生成的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31369525/

相关文章:

php - mysqli_num_rows 不工作

php - 从 Db 生成 JSON bool 值

html - 从 Bootstrap 3 导航栏反向下拉菜单中删除白线

javascript - Angular Bootstrap : data-provide ="datepicker" not using format identifier

asp.net - 在文本框正下方显示日历

php - 使用 Cakephp 2.x 选择 id 不在另一个表中的所有记录

MySQL查找最接近点的多边形

php - 出现错误消息时如何隐藏或不显示表单

php - 如何在 PHP 和 XML 中使用 foreach(simplexml)

mysql - 想知道如何构建这个用户和服务器 ID 数据库