Javascript 通过PHP从HTML表单向数据库插入多个选项

Javascript 通过PHP从HTML表单向数据库插入多个选项,javascript,php,jquery,html,mysql,Javascript,Php,Jquery,Html,Mysql,我有一个下拉列表,在选择任何值后,它会添加带有一些字段的新行,示例如下图所示: 我使用insert.php将值插入MySQL数据库。但有一个问题,那个就是只有第一行的值被插入到数据库中 PHP看起来像: foreach($_POST['CertificateType'] as $key => $val){ $CertificateType = $val; $CertificateType = $_POST['CertificateType'][$key];

我有一个下拉列表,在选择任何值后,它会添加带有一些字段的新行,示例如下图所示:

我使用insert.php将值插入MySQL数据库。但有一个问题,那个就是只有第一行的值被插入到数据库中

PHP看起来像:

foreach($_POST['CertificateType'] as $key => $val){ 

    $CertificateType = $val;

    $CertificateType = $_POST['CertificateType'][$key]; 
    $STCWCode        = $_POST['STCWCode'][$key];            
    $CertNo          = $_POST['CertNo'][$key];          
    $FromCert        = $_POST['FromCert'][$key];            
    $ToCert          = $_POST['ToCert'][$key];  

    $CertificateType = mysqli_real_escape_string($link, $CertificateType);  
    $STCWCode        = mysqli_real_escape_string($link, $STCWCode);                 
    $CertNo          = mysqli_real_escape_string($link, $CertNo);           
    $FromCert        = mysqli_real_escape_string($link, $FromCert);                 
    $ToCert          = mysqli_real_escape_string($link, $ToCert);      

    $sql3 = "INSERT INTO Tbl (
        CertificateType     
        ,UserId    
        ,STCWCode               
        ,CertNo                 
        ,FromCert               
        ,ToCert
        ,DateCreated
    ) VALUES (
        '$CertificateType',
        '$UserID',  
        '$STCWCode',            
        '$CertNo',          
        '$FromCert',            
        '$ToCert',
        now())";
    if(mysqli_query($link, $sql3)){
        echo "Resume created successfully.";
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
} 
<fieldset class="fieldset-borders">
    <legend>4. Licenses & Certificates</legend>
    <ul class="header"> 
      <li>
        <select id='options' name="CertificateType[]" class="field-style div-format align-left">
          <option selected disabled value="0">Select certificates</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>  
        </select>  
      </li>
    </ul>  
    <ul class="cert" id="cert">     
      <li>
        <ul class="column">         
          <li><p class="test-label11">Name</p></li>                     
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">STCW Code</p></li>                        
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Cert. No</p></li>                     
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Place of Issue</p></li>                       
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Date of Issue</p></li>                        
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Date of Expire</p></li>                       
        </ul>
      </li>
      </ul>
        <div class="action2" ></div>


</fieldset>
HTML看起来像:

foreach($_POST['CertificateType'] as $key => $val){ 

    $CertificateType = $val;

    $CertificateType = $_POST['CertificateType'][$key]; 
    $STCWCode        = $_POST['STCWCode'][$key];            
    $CertNo          = $_POST['CertNo'][$key];          
    $FromCert        = $_POST['FromCert'][$key];            
    $ToCert          = $_POST['ToCert'][$key];  

    $CertificateType = mysqli_real_escape_string($link, $CertificateType);  
    $STCWCode        = mysqli_real_escape_string($link, $STCWCode);                 
    $CertNo          = mysqli_real_escape_string($link, $CertNo);           
    $FromCert        = mysqli_real_escape_string($link, $FromCert);                 
    $ToCert          = mysqli_real_escape_string($link, $ToCert);      

    $sql3 = "INSERT INTO Tbl (
        CertificateType     
        ,UserId    
        ,STCWCode               
        ,CertNo                 
        ,FromCert               
        ,ToCert
        ,DateCreated
    ) VALUES (
        '$CertificateType',
        '$UserID',  
        '$STCWCode',            
        '$CertNo',          
        '$FromCert',            
        '$ToCert',
        now())";
    if(mysqli_query($link, $sql3)){
        echo "Resume created successfully.";
    } else{
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
} 
<fieldset class="fieldset-borders">
    <legend>4. Licenses & Certificates</legend>
    <ul class="header"> 
      <li>
        <select id='options' name="CertificateType[]" class="field-style div-format align-left">
          <option selected disabled value="0">Select certificates</option>
          <option value="1">One</option>
          <option value="2">Two</option>
          <option value="3">Three</option>  
        </select>  
      </li>
    </ul>  
    <ul class="cert" id="cert">     
      <li>
        <ul class="column">         
          <li><p class="test-label11">Name</p></li>                     
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">STCW Code</p></li>                        
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Cert. No</p></li>                     
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Place of Issue</p></li>                       
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Date of Issue</p></li>                        
        </ul>
      </li>
      <li>
        <ul class="column">         
          <li><p class="test-label11">Date of Expire</p></li>                       
        </ul>
      </li>
      </ul>
        <div class="action2" ></div>


</fieldset>

4.许可证和证书
  • 选择证书 一个 两个 三
    • 名称

    • STCW代码
    • 证书编号
    • 发布地点

    • 发布日期

    • 过期日期
Javascript您可以查看的代码


我已经创建了检查表单的这一部分。你知道如何修复它吗?

我还没有查看所有内容,但你的输入字段似乎都有相同的名称


所有行的第一个输入似乎是“name=”STCWCode[]”。您是否查看了$\u POST并验证了您可以看到所有输入,或者是否只有第一行的输入?我认为名称可能是个问题。

您循环了$\u POST['CertificateType',它(根据您的配置)将只包含一个值(选择字段上没有multiselect)

您使用的循环完全错误。相反,您需要运行循环,例如
STCWCode
POST变量

但我建议您更改javascript代码,并将输入名称设置为以下内容:
行[0][STCWCode],行[0][CertNo]
等等,
行[0]
表示第一行,
行[1]
表示第二行等等。然后您可以使用
$\u POST['row']
运行循环,我发现的是:

  • 首先,将
    中的
    CertificateType[]
    替换为
    CertificateType
    因为,此下拉列表不是多个。仅基于
    onchange
    功能,您可以获得多个值(不是
    CertificateType
    下拉列表)。 您可以做的是:您可以附加一个
    隐藏文本
    ,即
    CertificateTypeHidden[]
    将插入
    CertificateType
    下拉列表的值

  • 正如我在Ist点中指出的。
    CertificateType
    不是多个。因此,它只考虑一个值。您可以做的是:正如我上面所写的,您可以使用
    CertificateTypeHidden[]
    类似于
    foreach($\u POST['CertificateTypeHidden']作为$key=>val){

  • 更改后,代码应该是这样的。(如果您遵循以上几点)

    这是唯一的问题。很好。只需添加一个隐藏字段。(
    )。其中所选下拉列表的值位于该隐藏字段的
    value
    属性中。在提交页面或insert.php页面中,使用
    CertificateTypeHidden
    执行
    foreach


    仔细检查。最好。

    您需要为证书创建一个具有选定值的隐藏输入,下拉列表仅用于创建新行,但您需要使用数组形式创建一个新输入,可能会更改下拉列表名称,例如CertificateType[]=>CertificateType列表和具有CertificateType[]的新隐藏输入名称

    UL并非仅随表格输入类型发送

    <select id='options' name="CertificateList">
      <option selected disabled value="0">Select certificates</option>
      <option value="1">One</option>
      <option value="2">Two</option>
      <option value="3">Three</option>  
    </select>
    
    
    选择证书
    一个
    两个
    三
    
    只创建一次表单标记,并为每次重复创建输入

    <form action="insert.php" method="post">  
    <ul>
        <li>
            <input name="CertificateType[]" type="hidden">
            <input name="STCWCode[]" type="text">
            <input name="CertNo[]" type="text">
            <input name="PlaceofIssueCert[]" type="text">
            <input name="FromCert[]" type="date">
            <input name="ToCert[]" type="date">
        </li>
        <li>
            <input name="CertificateType[]" type="hidden">
            <input name="STCWCode[]" type="text">
            <input name="CertNo[]" type="text">
            <input name="PlaceofIssueCert[]" type="text">
            <input name="FromCert[]" type="date">
            <input name="ToCert[]" type="date">
        </li>
        ...
    </ul>
    </form>
    
    
    
    • ...

    您需要使用此格式创建表单

    
    
    • ...

    使用您的fiddle JavaScript,在每行的隐藏字段中添加证书类型;并将其命名为RowCertificateType,与行的其他字段相同

    <input type="hidden" name="RowCertificateType[]" value="" />
    <!-- set value of this field same as you are showing in li as label for this row; -->
    

    :)

    您正试图在一个代码中插入整个数组。首先进行计数,然后从数组中提取内容并使用for循环将其插入数据库 例如,如果文本框的名称为
    cellname[]

    那么对于insert,应该这样做

     $itemCount = count($_POST['cellname']);
     $info=$_POST['cellname'];
     for($i=0;$i<$itemCount;$i++) {
       $query = "INSERT INTO item (item_name) VALUES('$info[$i]') ";
      //rest of the queries
     }
    
    $itemCount=count($\u POST['cellname']);
    $info=$_POST['cellname'];
    
    对于($i=0;$iDo)您是否收到一些错误消息?您是否有一个具有自动递增ID的表?@Jan否,没有任何错误,只插入第一行值。是的,有ID-auto increment.add到Php脚本(error_log(“Running”);并检查apache错误日志文件以查看您可能看到的次数(Running)在log@Tasos我尝试过使用
    错误日志(“Running”);
    ,但什么都没有发生(没有打印)您运行的是什么操作系统,例如linux、windows等?我认为这不是名称的问题,这里是使用过的数组,正如我所知
     $itemCount = count($_POST['cellname']);
     $info=$_POST['cellname'];
     for($i=0;$i<$itemCount;$i++) {
       $query = "INSERT INTO item (item_name) VALUES('$info[$i]') ";
      //rest of the queries
     }