Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和MySQL更新多行_Php_Mysql - Fatal编程技术网

使用PHP和MySQL更新多行

使用PHP和MySQL更新多行,php,mysql,Php,Mysql,我不熟悉php和mySql。我正在尝试使用php和mysql更新多行 我在更新MySQL数据库中的多行时遇到问题。它只更新数据库中表的最后一行。例如,用户单击查看产品。该页面将列出数据库中当前存在的10种产品。用户希望通过点击方式更新产品信息。完成更新后,用户单击提交 问题在于它只捕获和更新表中最后一个产品的信息。我试图将其放入foreach()函数中。但它不起作用 请帮忙。我刚学了PHP和mySQL不到一周。我非常感谢任何帮助 <?php include 'dbconn.inc.php'

我不熟悉php和mySql。我正在尝试使用php和mysql更新多行

我在更新MySQL数据库中的多行时遇到问题。它只更新数据库中表的最后一行。例如,用户单击查看产品。该页面将列出数据库中当前存在的10种产品。用户希望通过点击方式更新产品信息。完成更新后,用户单击提交

问题在于它只捕获和更新表中最后一个产品的信息。我试图将其放入foreach()函数中。但它不起作用

请帮忙。我刚学了PHP和mySQL不到一周。我非常感谢任何帮助

<?php
include 'dbconn.inc.php';
include 'functions.inc.php';

$sql = "SELECT * FROM products";
$res = $mysqli->query($sql);

while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
$products($row['id']) = 'id';
}

$id = $mysqli->real_escape_string( $_POST['id'] );
$weight = $mysqli->real_escape_string( $_POST['weight'] );
$name = $mysqli->real_escape_string( $_POST['name'] );
$supplier_id = $mysqli->real_escape_string( $_POST['supplier_id'] );
$price = $mysqli->real_escape_string( $_POST['price'] );
$description = $mysqli->real_escape_string( $_POST['description'] );

foreach( $products as $id){
$sql = "UPDATE products
    SET
        `id` = '$id',
        `weight` = '$weight',
        `price` = '$price',
        `name` = '$name',
        `supplier_id` = '$supplier_id',
        `description` = '$description'

    WHERE `id` = '$id'";

 }
有几个问题:

  • 首先,声明变量
    $id
    两次
  • 您应该在循环中使用
    $key
    而不是
    $value
  • 相反,请尝试以下方法:

    foreach( $products as $key => $value){
    $sql = "UPDATE products
        SET
            `id` = '$id',
            `weight` = '$weight',
            `price` = '$price',
            `name` = '$name',
            `supplier_id` = '$supplier_id',
            `description` = '$description'
    
        WHERE `id` = '$key'";
    
     }
    
    使用数组
    而不是其
    的原因是,在下一行中,您将数组的
    设置为第一次查询返回的值:

    while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
        $products($row['id']) = 'id';
    }
    
    我可能会建议这样做:

    $products = array();
    
    while( $row = $res->fetch_array(MYSQLI_ASSOC) ){
        $products[]['id'] = $id;
    }
    
        foreach( $products as $product){
        $sql = "UPDATE products
            SET
                `id` = '$id',
                `weight` = '$weight',
                `price` = '$price',
                `name` = '$name',
                `supplier_id` = '$supplier_id',
                `description` = '$description'
    
            WHERE `id` = '" . $product['id'] . "'";
    
         }
    

    你说“它不工作”是什么意思?看起来你从来没有试过运行queryPlease,不要这样逃避。使用和避免严重伤害。您是在哪里学会这样做的?查询正在运行,但它只更新了中的最后一行database@tadman我是从我的朋友那里学到的friend@user1754822老实说,我认为这是因为您两次声明了
    $id
    。您是否试图将数据库中
    id
    的值设置为
    $\u POST
    数据?@user1754822我已更新,在您回复评论之前,我只能在此处猜测,但我认为您希望将值设置为POST数据,并更新
    foreach
    中的行,对吗?@user1754822执行
    echo$sql
    以确保查询在每个位置都具有您期望的值run@user1754822别麻烦了,是我的错。如果您使用了我发布的第二个解决方案,那么数组应该是这样制作的:
    $products[]['id']=$id我认为你的部分是正确的。其他文件中可能存在问题。谢谢你的时间和帮助。祝你过得愉快!如果你打算将其发布到通用互联网上,你必须修复所有的问题。如果您甚至忘记转义一个变量,那么有很多方法可以做一长串可怕的事情,所以请尽快切换到使用占位符。