【问题标题】:Insert HTML Table cell values into MySQL将 HTML 表格单元格值插入 MySQL
【发布时间】:2015-12-16 20:57:11
【问题描述】:

我有一个带有动态列的 HTML 表格,可根据用户的选择增加或减少。 从前端的用户那里获取输入后,我需要将此 HTML 表插入到 MySQL 数据库表中。

从类别到产品名称的列是恒定的,位置列根据用户要求而变化。

一旦输入完成并点击保存,我需要以以下格式将此数据插入到生产表中:

到目前为止我已经完成的代码请指导我正确的方向:

<?php
    if(isset($_POST['for_post_market'])){ $market = $_POST['for_post_market']; } 
    if(isset($_POST['for_post_prod_date'])){ $date_prod = $_POST['for_post_prod_date']; } 
    if(isset($_POST['for_post_sale_date'])){ $date_sale = $_POST['for_post_sale_date']; } 
    $query = 'SELECT * FROM product WHERE prod_status="Active"';
    $stmt = $DB_con->prepare($query);
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $result[$row['prod_cat_name']][] = $row['prod_id'];

    }
?>
    <form method="post">
    <table id="invoices" border="1" class="table table-striped table-bordered">
        <thead>
            <col width="65">
            <col width="65">
            <th>Category</th>
            <th>Product ID</th>
            <th>Product Name</th>
            <th hidden="true">Production Date</th>
            <th hidden="true">Sales Date</th>
<?php
    $a=count($market);
    for($i=0;$i<$a;$i++) {
        echo '<th><input type="hidden" value="'. $market[$i] . '">'. $market[$i] .'</th>';
    }
?>
        </thead>
        <tbody>
<?php
    foreach($result as $id => $invoices) {
        echo '<tr>';
        echo '<td rowspan='. count($invoices) . '>' . $id . '</td>';
        $count = 0;
        foreach ($invoices as $invoice) {
            if ($count != 0) {
                echo '<tr>';
            }
            $count++;

            echo '<td>' . $invoice . '</td>';
?>
<?php 
            $psql = $DB_con->prepare("SELECT * FROM product WHERE prod_id='$invoice'");
            $psql->execute();
            $resultpro = $psql->fetchall(PDO::FETCH_ASSOC);
            foreach($resultpro as $line) {
            }
?>
            <td><?php echo $line['prod_name']; ?></td>
<?php
            echo '<td hidden="true">' . $date_prod . '</td>';
            echo '<td hidden="true">' . $date_sale . '</td>';
            $a=count($market);
            for($j=0;$j<$a;$j++) {
                echo '<td><input type="text" name="'. $market[$j] .' "class="form-control" maxlength="6" size="4"></td>';
            }
        }
    }
    echo '</tbody>';
    echo '</table>';
?>
        <button type="submit" class="btn btn-default waves-effect waves-light" name="btn-saveforcast" id="btn-saveforcast">Save</button>
    </form>
<?php
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }

}
else
{
?>

完整代码Link

【问题讨论】:

  • 能否格式化您的代码?
  • 我确实使用了代码标签
  • 您是否希望通过此代码并删除所有空的 IF 和 FOR 循环,匹配所有 {},以便我们确定您认为自己在做什么在我们尝试提出任何建议之前

标签: php html mysql


【解决方案1】:

我尝试格式化您的代码以使其更具可读性,这就是我得到的:

<?php 

if(isset($_POST[ 'for_post_market'])){ 
  $market=$ _POST[ 'for_post_market']; 
} 
if(isset($_POST[ 'for_post_prod_date'])){ 
  $date_prod=$ _POST[ 'for_post_prod_date']; 
} 
if(isset($_POST[ 'for_post_sale_date'])){ 
  $date_sale=$ _POST[ 'for_post_sale_date']; 
} 
$query='SELECT * FROM product WHERE prod_status="Active"' ; 
$stmt=$ DB_con->prepare($query); 
$stmt->execute(); 
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
  $result[$row['prod_cat_name']][] = $row['prod_id']; 
} 

?>

<form method="post">
    <table id="invoices" border="1" class="table table-striped table-bordered">
        <thead>
            <col width="65">
                <col width="65">
                    <th>Category</th>
                    <th>Product ID</th>
                    <th>Product Name</th>
                    <th hidden="true">Production Date</th>
                    <th hidden="true">Sales Date</th>

                    <?php 
                    $a=count($market); for($i=0;$i<$a;$i++) { echo '<th><input type="hidden" value="'. $market[$i] . '">'. $market[$i] . '</th>'; } 
                    ?>
        </thead>
        <tbody>

            <?php foreach($result as $id=> $invoices) { 
                      echo '<tr>'; 
                      echo '<td rowspan='. count($invoices) . '>' . $id . '</td>'; 
                      $count = 0; 
                      foreach ($invoices as $invoice) { 
                        if ($count != 0) { 
                          echo '<tr>'; 
                        } 
                        $count++; 
                        echo '<td>' . $invoice . '</td>'; 
            ?>
                    <?php 
                        $psql=$ DB_con->prepare("SELECT * FROM product WHERE prod_id='$invoice'"); 
                        $psql->execute(); 
                        $resultpro = $psql->fetchall(PDO::FETCH_ASSOC); 
                        foreach($resultpro as $line) { } 
                    ?>

                    <td>

                        <?php 
                        echo $line[ 'prod_name']; 
                        ?>

                    </td>

                    <?php 
                        echo '<td hidden="true">' . $date_prod . '</td>'; 
                        echo '<td hidden="true">' . $date_sale . '</td>'; 
                        $a=count($market); 
                        for($j=0;$j<$a;$j++) { 
                          echo '<td><input type="text" name="'. $market[$j] . ' "class="form-control" maxlength="6" size="4"></td>'; 
                        } 
                      } 
                    } 
                    echo '</tbody>'; 
                    echo '</table>';
                    ?>

                    <button type="submit" class="btn btn-default waves-effect waves-light" name="btn-saveforcast" id="btn-saveforcast">Save</button>
</form>

<?php 

} catch(PDOException $e) { 
  echo $e->getMessage(); 
} 
} else { 

?>

您的代码中有很多语法错误,但这不是主要问题。问题是您完全误解了 HTML 和 PHP 的工作原理。

HTML 是一种向网络浏览器(例如 Google Chrome)描述页面布局的语言。浏览器读取 HTML 代码,然后以它认为好的方式在您的计算机屏幕上显示该页面。这就对了。 HTML 不做任何计算;它只是描述页面布局的一种方式。

另一方面,PHP 是一种后端脚本语言。这意味着 PHP 脚本由服务器执行,而不是 HTML 和 JavaScript,由您的浏览器负责。

我不确定您在这里尝试做什么,但我看到您在多个地方的表格列中插入了 PHP 脚本。这根本没有任何意义。

HTML 不是脚本语言,因此它没有任何执行顺序(因为它没有要执行的内容)。真的和PHP一点关系都没有。

如果你想将 PHP 连接到 HTML,这意味着你想让你的服务器(数据库)中的数据显示在网页上,你需要使用 JavaScript。 JavaScript 具有更改 HTML 的能力,而 PHP 可以回显 JavaScript 命令。但是,请记住:PHP 由服务器(后端)执行,而 JavaScript 由用户(前端)执行。这意味着在整个 PHP 脚本结束之前,JavaScript 真的不会被回显,所以你不能在 JavaScript 和 PHP 之间来回跳动。

你应该做的是这样的:

  • 通过表单获取用户输入并发送到服务器:

<form action="foo.php" method="post"> ... </form>

  • 使用名为“foo.php”的 PHP 脚本处理输入。您的 SQL 查询和 JavaScript 回显发生在这里。但同样,不要忘记,在 PHP 脚本结束之前,回声不会到达用户。

我不完全确定您要达到的目标,因此我无法为您提供更多帮助。如果您提供更多信息,您可以获得更好的帮助。

【讨论】:

  • 我在这里主持了一个演示,clean.omegakart.com 登录 ID 管理员密码:123456 我要做的是将填充的数据和输入字段插入到数据库表中。但我的问题是在接受输入时列不是恒定的,所以我试图找出一种方法
  • 您的网站并没有告诉我太多信息。它很空旷。您是在尝试获取用户输入并在 MySQL 中插入、从数据库中获取数据并将其显示在表中,还是两者兼而有之?
  • 首先从数据库表products中调用数据。然后取 inut 然后尝试将更新后的表插入到新的 sql 表中
  • 哦,所以这是管理员无需任何编程知识即可更改数据库内部数据的一种方式?
【解决方案2】:

将结果放入数组中,然后使用 for 循环在数组中循环。 在 for 循环中将要插入的 mysql 查询放入数据库中。

不要忘记将$_POST['name'][$i]; 像这样放在 for 循环中,以便正确插入。

希望这会有所帮助。

【讨论】:

  • 数组是购买的第一个想法我的问题是输入框是可变的,根据之前选择的市场,它可以是两个或四个。而且我还想知道它填充到哪个市场的输入字段,所以我还想先填充市场名称和产品 ID 的相应输入
  • 所以,如果我理解你是正确的。输入可以是 2 或 4,这取决于用户在表单中退一步选择哪个市场。您想知道它填充了哪个市场,因此请检查输入变量(您有不同的市场名称表吗?)每个输入的其余部分都相同吗?我以为您想将它们全部添加到一个表中。所以您可以这样做:您有一个名为:market1 -> 4 rows market2 -> 2 Rows if ($_POST['postnameofmarket'] == ' market1'){ 执行 for 循环,循环输入 } 对另一篇文章做同样的事情是你要找的吗?
  • 如果您查看演示链接 clean.omegakart.com 登录名:管理员通过 123456 并进行预测,我相信您会获得更好的洞察力。我只有一个表,它有一个市场列。具有输入框的表中的标题将具有市场名称,因此如果有更新,那么对于一个产品 ID,如果有 3 个市场列,它将在下添加三倍的产品不同的市场名称和从前端捕获的输入值。
  • 啊啊啊我明白了。像这样?:你创建一个预测 --> 选择的预测是这样的: 预测 1 预测 3 预测 7 其余的没有选择然后在里面你要插入数据 果冻超级果冻预测 1 果冻超级果冻预测 3 果冻小果冻预测7 这就是你想要处理的?这也是您要为其添加更新功能的地方?
  • 是的,接近这一点..如果我能得到一个关于如何制作一个数组并考虑到动态的列正确循环它的方向,我可以完成这段代码。
【解决方案3】:

您的属性name 对所有&lt;input&gt; 字段具有相同的值 例如“第 97 街”等。 使用带有一些前缀的市场 ID。 首先检查这一点,并尽量避免名称中的空格。

每个名称相同的&lt;input&gt; 值都将被覆盖。

【讨论】:

  • 值是一个数组..这是一个产品有多个市场的问题,我想一次抓住一切。
  • 正如我从您的代码中看到的,它不是一个数组!它只是在for 循环中分配名称。如果您希望它是一个数组,请在最后放置括号,例如 &lt;input type="text" name="'. $market[$j][] . ' 无论如何替换名称中的空格,或者只是删除空格。
  • 制作var_dump($_POST);,这样我们就可以看到你有什么!
  • 再一次!如果你把空方括号放在"name" 属性的末尾你会得到你想要的!!! Array ( [79th_Street] =&gt; Array ( [0] =&gt; One [1] =&gt; Two [2] =&gt; Three [3] =&gt; Four ) [btn-saveforcast] =&gt; )
【解决方案4】:

将空方括号放在“名称”属性的末尾,如

<input type="text" name="'. $market[$j][] . '

你会得到你想要的!!!

Array
(
    [79th_Street] = Array
        (
            [0] = one
            [1] = two
            [2] = three
            [3] = four
        )

    [btn-saveforcast] = ; 
)

此外,您可以将“产品 ID”放入此数组,然后您可以获得每个产品 ID 的单独数组

<input type="text" name="'. $market[$j][$product_id][] . '

结果将是:

Array
(
    [79th_Street] = Array
        (
            [2] = Array
                (
                    [0] = one
                )

            [3] = Array
                (
                    [0] = two
                    [1] = three
                    [2] = four
                )

        )

    [btn-saveforcast] = ; 
)

【讨论】:

  • 致命错误:无法使用 [] 在第 204 行的 C:\Users\Sumeet\Desktop\Omegakart\xampp\htdocs\billingdark\createforcast.php 中读取 这是我这样做时得到的.
  • 显示输入字段的样子
猜你喜欢
  • 1970-01-01
  • 2016-10-02
  • 2020-02-04
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多