【问题标题】:PHP : how to detect row and column number from HTML table?PHP:如何从 HTML 表中检测行号和列号?
【发布时间】:2016-07-11 08:15:44
【问题描述】:

所以,我有一个带有 HTML 表格的表单。

表格的每个框都包含一个文本字段。这些字段中的每一个都具有相同的名称,如下所示:

<input name="quantity[]" type="text" />

HTML 表格如下所示:

行是数字。列是月份。 用户必须在至少一个框中输入一个数字(数量)。

然后,他们可以提交表单。

我的 SQL 表应该是这样的:

Number - Month - Quantity
222000 - 12 - 50
222000 - 02 - 31
300000 - 01 - 25
221000 - 02 - 28

如您所见,表格中的 1 行 = 1 个输入文本。

在 PHP 中,我得到这样的数据:

foreach($_POST['quantity'] as $key => $text_field){
    if(!empty($text_field)) {
        $requete = $bdd->prepare('INSERT INTO my table VALUES(:number, :month, :quantity)');
        $requete->execute(array(
            ':number' => *???*,
            ':month' => *???*,
            ':quantity' => $text_field
        ));
    }
}

我的问题:如何在 PHP 中检测我的 HTML 表中的行号和列号并将结果放入我的 SQL 表中?

【问题讨论】:

  • 您可以使用 jquery 来做到这一点。为此使用ajax首先使用jquery获取所有相关数据创建它的对象并使用ajax将其传递给php文件并将其保存在数据库中。

标签: php html mysql


【解决方案1】:

假设您有 12 只飞蛾和数组“数字”,每行都有数字值:

foreach($_POST['quantity'] as $key => $text_field){
if(!empty($text_field)) {
$number= $numbers[floor($key/12)];
$month=($key%12)+1;


    $requete = $bdd->prepare('INSERT INTO my table VALUES(:number, :month, :quantity)');
    $requete->execute(array(
        ':number' => $number,
        ':month' => $month,
        ':quantity' => $text_field
    ));
}

}

只是不要忘记 0 个索引。

【讨论】:

  • 谢谢,这行得通!我从来没有想过这样做。
【解决方案2】:

您可以执行以下操作:

当您填充表格时:

<input name="quantity[<?= $row ?>][<?= $column ?>]" type="text" />

然后在您的后处理程序脚本中:

foreach($_POST['quantity'] as $row => $columns){
    foreach ($columns as $column => $text_field) {
        if(!empty($text_field)) {
            $requete = $bdd->prepare('INSERT INTO my table VALUES(:number, :month, :quantity)');
            $requete->execute(array(
               ':number' => $row,
               ':month' => $column,
               ':quantity' => $text_field
             ));
        }
    }
}

简而言之,您将帖子字段设置为关联数组,而不是普通数组。

【讨论】:

  • 嗨,如果我写 name="quantity[= $row ?>][= $column ?>",我有多个错误消息。你在哪里声明这两个变量?
  • 这两个变量表示对应于该条目的行和列。我假设这是您(以某种方式)可以访问的信息,如果您没有,那么您可以声明一个行和列计数器。
【解决方案3】:
<?php
$n=1;
$num = array(111,222,333,...);

foreach($num as $key=>$n_val)
{
?>
<tr>
 <td>
   <input type="hidden" name="number[<?php echo $key ?>]" 
      value='<?php echo $n_val ?>'/>
   <?php echo $n_val ?>
 </td>
 <td><input name="quantityNov[<?php echo $key ?>]" type="text" /></td>
 <td><input name="quantityDec[<?php echo $key ?>]" type="text" /></td>
 ....
</tr>
<?php
}
?>

然后在 php 的提交操作部分中;

<?php
    foreach($_POST['quantityNov'] as $key => $val)
    {
       $fixed_number = $_POST['number'][$key];
       $month[11] = $val;
       $month[12] = $_POST['quantityDec'][$key];
       $month[1] = $_POST['quantityJan'][$key];
       ...
       $count = 0;
       foreach($month as $month_num=>$n_val)
        if(!empty($n_val)) 
       {
            $sql = 'INSERT INTO my table (column(s)) VALUES ('.$fixed_number.','.$month_num.', '.$n_val.')';
            $result = $connection->query($sql);
            $count += $connection->affected_rows;
        }
    }
echo 'Number of rows inserted: '.$count;
?>

这就是我喜欢编写代码的方式,但你可以用你喜欢的风格编写它,但我认为这会让你继续前进。

【讨论】:

  • 您的示例对 SQL 注入开放
  • +比原始代码更多的意大利面条和更差的性能。
  • @DarkBee,怎么会这样?这三个都是没有引号的数字。那么怎么会有人能够注入字符串呢?
  • 我只看到你在查询中使用直接用户输入
  • 如何或为什么要转义数值?
猜你喜欢
  • 2014-06-26
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
相关资源
最近更新 更多