【问题标题】:how to auto increment an input name in html and save in database?如何在html中自动增加输入名称并保存在数据库中?
【发布时间】:2016-10-23 18:08:27
【问题描述】:

我有一个名为 positions 的表格。此表列出了管理员在 listOfPositions.php 中添加的不同职位的列表,如总裁、副总裁等。添加不同的职位后,他现在可以在该职位下添加不同的人.这就是我的问题所在。我将如何根据表格 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>");
                    }
            }

        }
   }


?>

这根本行不通。有什么帮助吗?我希望你们能理解我想问的问题。

【问题讨论】:

  • 我不明白你在这里真正想要什么,但可能会有所帮助。
  • 是的,我知道。 @Jeff 我如何让这个 没有 1 在名称旁边,因为我希望它是自动递增的?
  • 在 php、html 和 javascript 之间切换上下文变得相当混乱。就像一个建议玩具可能要考虑为 html 输出创建 php 对象。不过,我感觉您想要的是包含 name 属性的输入标记,该属性与从位置表中检索到的自动递增数字相对应。请确认我有准确的理解。
  • 你*不是玩具该死的滑动类型
  • 是的,你是对的,这就是我想要做的,但我不知道该怎么做? @杰夫

标签: php mysql mysqli auto-increment


【解决方案1】:

这是最好的方法:

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

}

?>

【讨论】:

  • 我会试试这个。谢谢。
  • 注意:对于 html 中的位置输入,您需要为其添加一个值。我要编辑它。
  • 编辑.. 答案。抱歉,我以为你可以从那个代码中找到它。
  • 我刚刚看到您的编辑,但我已经能够做到了。但我仍然有一个未定义的索引。这些未定义的索引是总统等职位。
  • 并且该索引来自这一行$file = $files[$key];
【解决方案2】:

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

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

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 输出创建一个类,甚至是一个简单的函数:

    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; 

【讨论】:

  • 很抱歉,这让我很困惑。
  • 哪一部分令人困惑?我会尽力澄清。
猜你喜欢
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多