如何在 html 中自动递增输入名称并保存在数据库中?

how to auto increment an input name in html and save in database?

我有一个名为 positions 的 table。此 table 包含管理员在 listOfPositions.php 中添加的不同职位的列表,如总裁、副总裁等。添加不同职位后,他现在可以在该职位下添加不同的人。这就是我的问题所在。我将如何根据人名在 table positions 中的位置自动增加输入名称?

我尝试使用 javascript,但它仅在 html 中递增,并且在我尝试保存时不会反映到 php 中。我当前的代码根据位置添加不同人的名字是 ff:

<script type="text/javascript" src="http://code.jquery.com/jquery-git.js"></script>
<form action="post_officers.php" method="post"><br>
<center><select name="year">

<?php

    for($i=date('Y'); $i>1999; $i=$i-2) {
    $selected = '';
    $year2 = $i-2;
        if ($year == $i) $selected = ' selected="selected"';
        echo ('<option value="'.$year2. "-" . $i .'" '.$selected.'> '.$year2.'-'.$i.'</option>'."\n");
}
?>
</select></center>


    <?php 
    include_once('dbcontroller.php');   
    $sql = "SELECT * FROM positions ORDER BY pos_id ASC";
    $result = mysqli_query($conn, $sql);
    /* assign an onchange event handler */
    while ($row = mysqli_fetch_array($result)) {
    $position = $row['position'];
    ?>
        <br><br>
        <table id="options-table">                  
            <tr>
                <td><input type="file" name="file" /></td>    
                <td><input type="hidden" name="position" /><?php echo $position; ?></td>
                 <td><input type="text" name="name" /></td>
            </tr>                  

        </table>
    <?php 
    }
    ?>

    <input type="submit" name="submit" value="SAVE"/>
</form>         
<script>            
                $("input[name='file']").each(function(ind) {
                        $(this).attr(ind + 1);
                });

                $("input[name='position']").each(function(ind) {
                        $(this).attr(ind + 1);
                });

                $("input[name='name']").each(function(ind) {
                        $(this).attr(ind + 1);
                     });


</script>       

这是我的 php 代码:

<?php
   include ('dbcontroller.php');
   date_default_timezone_set('Asia/Manila');
            $year = mysqli_real_escape_string($conn,$_POST['year']);

   if(isset($_POST['submit'])) {
        $result = mysqli_query($conn,"SELECT * FROM officers WHERE year = '$year'");
        $num_rows = mysqli_num_rows($result);

        if($num_rows>0){
            echo "<script type='text/javascript'>alert('Year already exists.'); window.location.href='create_alumni_officers.php';</script>";
        }
        else {
            for ($i = 1; $i <= 8; $i++) {
                        $name = mysqli_real_escape_string($conn,$_POST['name'.$i]);
                        $position = mysqli_real_escape_string($conn,$_POST['position'.$i]);

                        $file=(rand(1000,100000)."-".$_FILES['file'.$i]['name']);
                        $type=($_FILES['file'.$i]['type']);
                        $size=$_FILES['file'.$i]['size'];
                        $loc=($_FILES['file'.$i]['tmp_name']);

                        $new_size=$size/1024; // file size in KB

                        // make file name in lower case
                         $new_file_name = strtolower($file);
                         // make file name in lower case

                         $final_file=str_replace(' ','-',$new_file_name);

                  if(move_uploaded_file($loc, '../officers-avatars/'.$final_file)) {
                                          echo "Page is loading, please wait...";
                      $result = mysqli_query($conn,"INSERT INTO officers VALUES (id, '$year', '$position', '$name', '$final_file', '$new_size', '$type')")
                      or die(mysqli_error($conn));
                      echo ("<script type='text/javascript'>window.location.href='alumni_officers.php';</script>");
                    }
            }

        }
   }


?>

这根本行不通。有什么帮助吗?我希望你们明白我想问什么。

这是最好的方法:

<?php 
    include_once('dbcontroller.php');   
    $sql = "SELECT * FROM positions ORDER BY pos_id ASC";
    $result = mysqli_query($conn, $sql);
    /* assign an onchange event handler */
    while ($row = mysqli_fetch_array($result)) {
    $position = $row['position'];
    ?>
<table id="options-table">                  
            <tr>
                <td><input type="file" name="file[<?php echo $position; ?>]" /></td>    
                <td><input type="hidden" name="position[<?php echo $position; ?>]" value="<?php echo $position; ?>" /><?php echo $position; ?></td>
                 <td><input type="text" name="name[<?php echo $position; ?>]" /></td>
            </tr>                  

        </table>
 <?php 
    }
    ?>

您不需要 javascript 来更改输入属性。删除它。

在 php 中使用 foreach 循环,如:

如果您仍然遇到错误,我需要查看 print_r($_POST);

的输出
<?php 
$files = $_FILES['file'];
$positions = $_POST['position']; //use this for the foreach loop because it will always have a value
$names = $_POST['name'];

foreach($positions as $key=>$position){
  $file = @$files[$key];
  $name= @$names[$key];
  //Do your magic  for each user here
    $name = mysqli_real_escape_string($conn,$name);
    $position = mysqli_real_escape_string($conn,$position);

    $filename = rand(1000,100000)."-".$file['name'];
    $type = $file['type'];
    $size = $file['size'];
    $loc = $file['tmp_name'];

    $new_size=$size/1024; // file size in KB

    // make file name in lower case
     $new_file_name = strtolower($filename);
     // make file name in lower case

     $final_file = str_replace(' ','-',$new_file_name);

    if(move_uploaded_file($loc, '../officers-avatars/'.$final_file)) {
                          echo "Page is loading, please wait...";
      $result = mysqli_query($conn,"INSERT INTO officers VALUES (id, '$year', '$position', '$name', '$final_file', '$new_size', '$type')")
      or die(mysqli_error($conn));
      echo ("<script type='text/javascript'>window.location.href='alumni_officers.php';</script>");
    }

}

?>

正如我在内容中指出的那样,删除未命中的上下文切换将大大提高代码的可读性。我将在下面说明并回答问题。

要得到你想要的东西,你可以这样做:

while ($row = mysqli_fetch_array($result)) {
$position = $row['position'];
?>
    <br><br>
    <table id="options-table">                  
        <tr>
            <td><input type="file" name="file" /></td>    
            <td><input type="hidden" name="position" /><?php echo $position; ?></td>
             <td><input type="text" name="name<?php echo $position; ?>" /></td>
        </tr>                  

    </table>
<?php 
}

但是,为了说明在代码中删除这些上下文切换的一个小示例,请参见下文并请原谅,但这是空中代码,如果您想要更具体的示例,请询问。

假设您经常在整个网站的表单中使用该标记。您可以每次都退出 php,直接写出 html。或者,您可以为 html 输出创建一个 class,甚至是一个简单的函数:

    Function opt($int, $parms = '') {
Return '<Option '.$parms.'>'. $int.'</option>';
}

现在您的代码看起来更像这样:

While ($r =mysqli_fetch_array ($result)) {
Extract ($r); // learn this,  no sense assigning them 1 by 1
$options .= opt($databaseobject, 'name="foo" value="'. $databaseobjectid.'"');
}
Echo $options;