【问题标题】:mysql_fetch_assoc data insert into mysql databasemysql_fetch_assoc 数据插入 mysql 数据库
【发布时间】:2018-03-31 08:06:47
【问题描述】:

下面是我的php表单:

<form method="POST" action="finalc.php" name="sing">
  <table>
  <tr>
<td>Sl.No.</td>  <td>Date</td>  <td>Cus Id</td>  <td>Name</td>
<td>Sm1</td>  <td>Sm2</td>  <td>Sm3</td>  <td>Sm4</td> <td>Total</td> <td>Min</td>
  </tr>         
                    <?php                           
                     $i =0;
                     $sql = mysql_query("select date cus_id, name, sm1, sm2, sm3, sm4,
                            sum(sm1 + sm2 + sm3 + sm4) as total,
                            least(sm1, sm2, sm3, sm4) as min
                            from final");

                        $count = mysql_num_rows($sql);
                        if($count == 0){
                        ?>
                        <tr> 
                            <th><?php echo 'No Records Founds!' .mysql_error(); ?></th> 
                        </tr>
                        <?php 
                        }else{
                            while($sql_result = mysql_fetch_assoc($sql)){
                        ?>
<tr>
<td><?php echo $i += 1; ?></td>
<td><input type="text" name="date" value="<?php echo $sql_result['date']; ?>" ></td>
<td><input type="text" name="cus_id" value="<?php echo $sql_result['cus_id']; ?>" ></td>
<td><input type="text" name="name" value="<?php echo $sql_result['name']; ?>" ></td>
<td><input type="text" name="sm1" value="<?php echo $sql_result['sm1']; ?>" ></td>
<td><input type="text" name="sm2" value="<?php echo $sql_result['sm2']; ?>"</td>
<td><input type="text" name="sm3" value="<?php echo $sql_result['sm3']; ?>"></td>
<td><input type="text" name="sm4" value="<?php echo $sql_result['sm4']; ?>"></td>
<td><input type="text" name="total" value="<?php echo $sql_result['total']; ?>"></td>
<td><input type="text" name="min" value="<?php echo $sql_result['min']; ?>"></td>
</tr>
    <?php
    }
    }
    ?>
 </table>
<input name="submit" type="submit" id="submit" value="Submit"  />
</form>

我的报表是这样的:

Id  Date        Name   sm1  sm2  sm3  sm4  total  min
1   15/10/2017  aman   2    3    5    7    17     2
2   16/10/2017  anil   23   24   17   34   98     17
3
4
++

final 表数据来自客户登录。客户登录的所有数据都显示在这里。

问题:在finalc.php 中,使用单个提交按钮将所有mysql_fetch_assoc 多行数据插入mysql 数据库的插入查询是什么?

【问题讨论】:

  • 请注意mysql_* function have deprecated,我强烈建议您切换到mysqli。
  • mysql_*php-5.5 起已弃用。所以改为使用mysqli_*PDOstackoverflow.com/questions/12859942/…
  • “插入查询将是什么” - 我想这将是您编写的查询,在您实际努力告知自己并阅读必要的内容之后东西...?
  • 警告:您的代码容易受到 SQL 注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者通过使用恶意输入值来破坏您的数据库。 bobby-tables.com 解释了风险,

标签: php mysql


【解决方案1】:

你真的不应该使用mysql_* 函数。它们已被弃用并且容易受到 sql 注入攻击。它们已从 php 7 及更高版本中完全删除,因此如果您使用它们,您的代码将不会轻易升级到未来的 php 版本。

然后有一些你必须自己解决的逻辑问题。您将 mintotal 值作为输入字段,但是它们不能直接更新到数据库中,因为它们不存储在您的数据库中,而是仅在您选择它们​​时计算。您还在获取 mobile 字段但从不使用它,这是代码中存在逻辑错误的标志(例如,它可能是也可能不是)。

您的 html 文本输入也有误。无论它们位于哪一行,它们都具有相同的名称,因此最后一行将始终覆盖所有其他值。尝试提交您的表单并检查网络流量和var_dump()$_POST 超全局,您会看到。

你可以通过将它们命名为数组来解决这个问题

<input type="text" name="sm1[<?php echo $i; ?>]" value="<?php ... ?>" />

这将使每个变量成为 php 中的关联数组。

此外,您的查询似乎存在问题。您永远不会从表格中获取日期或姓名,但您会在表单中使用它们。

当我们不知道您的桌子长什么样时,也无法为您提供解决方案。但一般来说,您需要使用表的主键作为 where 子句来更新您的行。假设cus_id 是主键,我将在这里冒险。为此,您可以执行以下操作:

$mysqli = new mysqli($host, $user, $pass, $database);

if (mysqli_connect_errno()) {
    // log & handle connection errors
    die();
}

$statement = $mysqli->prepare('INSERT INTO final (cus_id, name, date, sm1, sm2, sm3, sm4) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE');

foreach ($_POST['cus_id'] as $i => $cus_id) {
    $name = $_POST['name'][$i];
    $date = $_POST['date'][$i];
    $sm1  = $_POST['sm1'][$i];
    $sm2  = $_POST['sm2'][$i];
    $sm3  = $_POST['sm3'][$i];
    $sm4  = $_POST['sm4'][$i];
    $statement->bind_param('dssdddd', $cus_id, $name, $date, $sm1, $sm2, $sm3, $sm4);
    $statement->execute();
}

$statement->close();
$mysqli->close();

不过,如果您打算更新数千行,请注意此解决方案并不适合。然后你应该考虑测试首先更新哪些行,或者像this question 中最流行的答案一样连接插入。

另外,您可能需要阅读mysqli 上的文档,尤其是mysqli_resultmysqli_stmt

【讨论】:

  • 使用代码我只能插入报告表的last row 而不是所有行。
  • 好的,我将 bind_param 移到了 foreach 中。你可以试试这个再测试一下吗?
  • 现在这条消息来了:Warning: Invalid argument supplied for foreach() in......
猜你喜欢
  • 2016-03-25
  • 1970-01-01
  • 2023-04-10
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多