首页 > 解决方案 > 使用html中的表线程将数据插入mysql

问题描述

我在将数据插入到 html 中的表中时遇到了麻烦。

这是我的 HTML:

<table id="t1">
    <colgroup>
        <col span="2" class="c2">
        <col>
        <col class="c1">
    </colgroup>
    <thread>
        <tr style="text-align: center; font-size: 16px;margin: 50px;">
            <th >Employee ID</th>
            <th>Fullname</th>
            <th>Time Start</th>
            <th>Time End</th>
            <th>Purpose</th>
        </tr>
    </thead>
    <tbody id="insertionPoint" style="text-align: center; font-size: 13px;margin: 50px;">
      
    </tbody>
</table>

这看起来像:

Employee ID  Fullname     Time Start        Time End            Purpose
212          Beta Tester  03/15/2021 15:35  03/15/2021  17:35   hello

我的提交代码html:

<input type="submit" value="Insert" name="submit" onclick="addRow('t1')" />
          
   <?php
   $empid = $var_value = $_SESSION['username'];
    $mysql_hostname = "localhost";
    $mysql_username = "****";
    $mysql_password = "***";
    $mysql_database = "***";
    $conn= mysqli_connect($mysql_hostname,$mysql_username,$mysql_password,$mysql_database);
// Check connection
   
    
    if($_POST[submit])
    {
        
     foreach ($_POST['Employee ID'] as $key => $value) 
        {
            $empid = $_POST["Employee ID"][$key];
            $dstart = $_POST["Time Start"][$key];
            $dend = $_POST["Time End"][$key];
            $purpose = $_POST["Purpose"][$key];
          

            $sql = "INSERT INTO `HR_OT_Items` (`Employee_ID`, `Date_Start`, `Date_end`, `Purpose`)values('$empid','$dstart','$dend','$purpose')";
    if(mysqli_query($conn,$sql)){
 
    echo '<script>alert("Successfully Saved!")</script>'; 
 
    }
    else{
 
     echo 'Connection Failed';
 
    }
     mysqli_close($conn);
            
        }

    }   
?>

提交后没有任何反应。MySQL 中没有数据。有人可以遇到这个吗?

编辑 去除杂乱的 HTML 表单中的基本元素

<form method="POST">
    <select name="empid" id="empid" onchange="employees">
        <option value="" >--Select--</option>
        <?php
            if (! empty($empids)) {
                foreach ($empids as $empid) {
        ?>
        <option value="<?php echo $empid;?>">
            <?php echo $empid;?>
        </option>
        <?php
                }
            }
        ?> 
    </select>
            
    <select name="employees" id="employees" onchange="empid">
        <option value="" >--Select--</option>
        <?php
            if (! empty($fnames)) {
                foreach ($fnames as $fname) {
        ?>
        <option value="<?php echo $fname;?>"> 
            <?php echo $fname;?>
        </option>
        <?php
                }
            }
        ?> 
    </select>

    <input type="datetime-local" id="myTime" />
    
    <select name="hours" id="hours">
       <option value="0">0</option>
       <option value="1">1</option>
       <option value="2">2</option>
       <option value="3">3</option>
       <option value="4">4</option>
       <option value="5">5</option>
       <option value="6">6</option>
       <option value="7">7</option>
       <option value="8">8</option>
       <option value="9">9</option>
       <option value="10">10</option>
       <option value="11">11</option>
       <option value="12">12</option>
       <option value="13">13</option>
       <option value="14">14</option>
       <option value="15">15</option>
       <option value="16">16</option>
       <option value="17">17</option>
       <option value="18">18</option>
       <option value="19">19</option>
       <option value="20">20</option>
       <option value="21">21</option>
       <option value="22">22</option>
       <option value="23">23</option>
       <option value="24">24</option>
       <option value="25">25</option>
       <option value="26">26</option>
       <option value="27">27</option>
       <option value="28">28</option>
       <option value="29">29</option>
       <option value="30">30</option>
    </select>

    
    <select name="mins" id="mins">
       <option value="0">0</option>
       <option value="30">30</option>
    </select>
    
    <input type="button" onClick="ClearDate()" value="Clear">
    
    <textarea name="textarea" id="purpose" style="width:100%;height:170px;"></textarea>
    
    <input type="button" onClick="insertData()" value="Add entry">
    
    <input type="submit" value="Insert" name="submit" onclick="addRow('t1')" />
</form>

支持Javascript函数:

<script language="javascript">
    var myTime = document.getElementById("myTime");
    myTime.value = new Date(myTime);
   
   
    function insertData() {
        var str = myTime.value;    
        var e = document.getElementById("hours");
        var d = document.getElementById("mins");
        var strUser = e.options[e.selectedIndex].text;
        var strUser1 = d.options[d.selectedIndex].text;



        var a = parseInt(strUser);
        var c = parseInt(strUser1);

        var empid = document.getElementById("empid").value;
        var empname = document.getElementById("employees").value;

        var start =  new Date(str);
        var end = new Date(str);

        end.setHours(end.getHours() + a);
        end.setMinutes(end.getMinutes() + c);



        var dateOptions = { day: '2-digit', month: '2-digit', year: 'numeric' };
        var timeOptions = { hour12: false, hour: '2-digit', minute:'2-digit' };

        var starting = start.toLocaleString('en', dateOptions) + ' ' +  start.toLocaleString('en', timeOptions);

        var ending = end.toLocaleString('en', dateOptions) + ' ' +  end.toLocaleString('en', timeOptions);



        var purpose = document.getElementById("purpose").value;
        document.getElementById("insertionPoint").innerHTML += "<tr><td>" + empid + "</td><td>" + empname + "</td><td>" + starting + "</td><td>" + ending +  "</td><td>" + purpose + "</td></tr>";

        // The below part is to clear the values after the entry is added.

        document.getElementById("empid").value = "";
        document.getElementById("employees").value = "";
        document.getElementById("myTime").value = "";
        document.getElementById("hours").value = "0";
        document.getElementById("mins").value = "0";
        document.getElementById("purpose").value = "";
    }
</script>
<script language="javascript">
    function ClearData() {
        document.getElementById("empid").value = "";
        document.getElementById("employees").value = "";
        document.getElementById("myTime").value = "";
        document.getElementById("hours").value = "0";
        document.getElementById("mins").value = "0";
        document.getElementById("purpose").value = "";
    }
</script>

标签: phphtml

解决方案


据我所知,您的代码缺少实际ADD数据的表单。您的 javascript 函数(经过一些调整)将从第一个表单中获取值并构建一个新的 HTML 表格行,但我认为这是第一个误解发生的地方,因为添加到 HTML 表格中的数据将只是文本数据并且不会出现在任何 POST 提交中。为了完成数据的添加,新生成的 HTML 表格行应该在表单元素中包含数据(除非整个过程是使用 AJAX 完成的)——因此,考虑到这一点,我整理了一个工作演示(剥离了 HTML)希望复制您的情况并展示您如何做到这一点。如果这不是您想要的,那么我没有正确掌握我在 HTML 中看到的内容或问题。

<?PHP
    error_reporting( E_ALL );
?>
<!DOCTYPE html>
<html lang='en'>
    <head>
        <meta charset='utf-8' />
        <title></title>
        <style>
            table,td{border:1px solid gray}
            td,th{padding:0.5rem;}
            th{background:gray;color:white;}
            table td input[type='text']{border:none;}
        </style>
        <script>
            document.addEventListener('DOMContentLoaded',function(){
            
                // the input element needs the date formatted in a particular manner
                // this was a quick way to do that
                var myTime = document.getElementById("myTime");
                    myTime.value = ( new Date() ).toISOString().replace(/\Z/gi,'');
               
               
                function insertData(e){
                    e.preventDefault()
                    
                    var str = myTime.value;    
                    var e = document.getElementById("hours");
                    var d = document.getElementById("mins");
                    
                    var strUser = e.options[e.selectedIndex].text;
                    var strUser1 = d.options[d.selectedIndex].text;
                    
                    var a = parseInt(strUser);
                    var c = parseInt(strUser1);
        
                    var empid = document.getElementById("empid").value;
                    var empname = document.getElementById("employees").value;
        
                    var start = new Date(str);
                    var end = new Date(str);
                        end.setHours(end.getHours() + a);
                        end.setMinutes(end.getMinutes() + c);
        
                    var dateOptions = { day: '2-digit', month: '2-digit', year: 'numeric' };
                    var timeOptions = { hour12: false, hour: '2-digit', minute:'2-digit' };
        
                    var starting = start.toLocaleString('en', dateOptions) + ' ' +  start.toLocaleString('en', timeOptions);
                    var ending = end.toLocaleString('en', dateOptions) + ' ' +  end.toLocaleString('en', timeOptions);
                    
                    /*
                        Each new row will have `input` elements in each cell
                        - these input elements are used to actually ADD the
                        data when the form is submitted.
                    */
                    var purpose = document.getElementById("purpose").value;
                    document.getElementById("insertionPoint").innerHTML += "<tr><td><input type='text' name='empid[]' value='" + empid + "' /></td><td><input type='text' name='name[]' value='" + empname + "' /></td><td><input type='text' name='time_start[]' value='" + starting + "' /></td><td><input type='text' name='time_end[]' value='" + ending +  "' /></td><td><input type='text' name='purpose[]' value='" + purpose + "' /></td></tr>";

                    document.getElementById("empid").value = "";
                    document.getElementById("employees").value = "";
                    document.getElementById("myTime").value = "";
                    document.getElementById("hours").value = "0";
                    document.getElementById("mins").value = "0";
                    document.getElementById("purpose").value = "";  
                    
                    
                    myTime.value = ( new Date() ).toISOString().replace(/\Z/gi,'');
                }
                
                function addRow(e){
                    document.forms.add.submit()
                }
                
                function ClearData(e){
                    e.preventDefault()
                    document.getElementById("empid").value = "";
                    document.getElementById("employees").value = "";
                    document.getElementById("myTime").value = "";
                    document.getElementById("hours").value = "0";
                    document.getElementById("mins").value = "0";
                    document.getElementById("purpose").value = "";                  
                }
               
               
               
                document.querySelector('input[type="button"][name="insertdata"]').addEventListener('click',insertData)
                document.querySelector('input[type="submit"][name="addrow"]').addEventListener('click',addRow)
                document.querySelector('input[type="button"][name="cleardate"]').addEventListener('click',ClearData)
            })

        </script>
    </head>
    <body>
        <?php
            
            # DUMMY DATA
            $empids=array(
                123456,78915423,4234645,64564573,2345756,23428754
            );
            $fnames=array(
                'douglas','horatio','napoleon','bill','pocahontas','geronimo'
            );
        
        ?>
        
        
        <form method='POST'>
            <select name='empid' id='empid' onchange='employees'>
                <option selected hidden disabled>--Select--
                <?php
                    if( !empty( $empids ) ) {
                        foreach( $empids as $empid ) {
                ?>
                <option value='<?php echo $empid;?>'>
                    <?php echo $empid;?>
                
                <?php
                        }
                    }
                ?> 
            </select>
                    
            <select name='employees' id='employees' onchange='empid'>
                <option selected hidden disabled>--Select--
                <?php
                    if( !empty( $fnames ) ) {
                        foreach( $fnames as $fname ) {
                ?>
                <option value='<?php echo $fname;?>'> 
                    <?php echo $fname;?>
                
                <?php
                        }
                    }
                ?> 
            </select>

            <input type='datetime-local' id='myTime' />
            
            <select name='hours' id='hours'>
                <option selected hidden disabled>--Select--
                <option value='0'>0
                <option value='1'>1
                <option value='2'>2
                <option value='3'>3
                <option value='4'>4
                <option value='5'>5
                <option value='6'>6
                <option value='7'>7
                <option value='8'>8
                <option value='9'>9
                <option value='10'>10
                <option value='11'>11
                <option value='12'>12
                <option value='13'>13
                <option value='14'>14
                <option value='15'>15
                <option value='16'>16
                <option value='17'>17
                <option value='18'>18
                <option value='19'>19
                <option value='20'>20
                <option value='21'>21
                <option value='22'>22
                <option value='23'>23
                <option value='24'>24
                <option value='25'>25
                <option value='26'>26
                <option value='27'>27
                <option value='28'>28
                <option value='29'>29
                <option value='30'>30
            </select>

            
            <select name='mins' id='mins'>
                <option selected hidden disabled>--Select--
                <option value='0'>0
                <option value='30'>30
            </select>
            
            <input type='button' value='Clear' name='cleardate' />
            <textarea name='textarea' id='purpose' style='width:100%;height:170px;'></textarea>
            
            <input type='button' value='Add entry' name='insertdata' />
            <input type='submit' value='Insert' name='addrow' form='add' /><!-- assigned to other form that actually submits the data -->
        </form>
    
    
    
        <form id='add' method='post'>
           <table id='t1'>
              <colgroup>
                 <col span='2' class='c2'>
                 <col>
                 <col class='c1'>
              </colgroup>
              <thead>
                 <tr style='text-align: center; font-size: 16px;margin: 50px;'>
                    <th>Employee ID</th>
                    <th>Fullname</th>
                    <th>Time Start</th>
                    <th>Time End</th>
                    <th>Purpose</th>
                 </tr>
              </thead>
              <tbody id='insertionPoint' style='text-align: center; font-size: 13px;margin: 50px;'><!-- dynamic content here --></tbody>
           </table>
        </form>
        
        
        <?php
        
            $dbhost =   'localhost';
            $dbuser =   'root';
            $dbpwd  =   'xxx';
            $dbname =   'xxx';
            
            try{
                mysqli_report( MYSQLI_REPORT_STRICT );
                $db = new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );
            }catch( Exception $e ){
                echo $e->getMessage();
            }
            
            if( $_SERVER['REQUEST_METHOD']=='POST' ){
                
                if( isset( 
                    $_POST['empid'],
                    $_POST['time_start'],
                    $_POST['time_end'],
                    $_POST['purpose']
                )){
                    
                    $sql='INSERT INTO `hr_ot_items` ( `employee_id`, `date_start`, `date_end`, `purpose` ) VALUES ( ?, ?, ?, ? )';
                    $stmt=$db->prepare( $sql );
                    $stmt->bind_param('ssss', $empid, $start, $end, $purpose );
                    
                    foreach( $_POST['empid'] as $i => $empid ){
                        $start=date( 'Y-m-d H:i:s', strtotime( $_POST['time_start'][$i] ) );
                        $end=date( 'Y-m-d H:i:s', strtotime( $_POST['time_end'][$i] ) );
                        $purpose=$_POST['purpose'][$i];
                        
                        $res=$stmt->execute();
                    }
                    $stmt->close();
                }
            }
        ?>      
        
        
    </body>
</html>

推荐阅读