Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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+SQL成绩册更新多行_Php_Mysql_Sql_Database_Row - Fatal编程技术网

PHP+SQL成绩册更新多行

PHP+SQL成绩册更新多行,php,mysql,sql,database,row,Php,Mysql,Sql,Database,Row,因此,在过去的几天里,我一直在绞尽脑汁,在网上搜索,试图找到一个答案:我想更新SQL中的多行。问题是这个数据库不会更新。我知道将SQL查询放入循环不是一个好主意,但这是我能够从表中获取数据的唯一方法 代码如下: if(isset($_POST['save'])){ $update_query = "UPDATE grades SET grade_value = '{$_POST['grade']}' WHERE user_id = 1"; $result = mysqli

因此,在过去的几天里,我一直在绞尽脑汁,在网上搜索,试图找到一个答案:我想更新SQL中的多行。问题是这个数据库不会更新。我知道将SQL查询放入循环不是一个好主意,但这是我能够从表中获取数据的唯一方法

代码如下:

    if(isset($_POST['save'])){
    $update_query = "UPDATE grades SET grade_value = '{$_POST['grade']}' WHERE user_id = 1";
    $result = mysqli_query($link, $update_query);
    while($row = mysqli_fetch_assoc($result)){
        foreach($row as $grade){
            mysqli_query($link, $update_query);
            }
         }
     }


function editGrades() { 
global $link;
$query = "SELECT * FROM grades WHERE user_id = 1";
$result = mysqli_query($link, $query);

if(!$result){
    die('Query failed' . mysqli_error());
}
while($row = mysqli_fetch_assoc($result)) {
                    $gradeValue = $row['grade_value'];
                    $gradeValue = is_array($gradeValue) ? $gradeValue : array($gradeValue);
                    foreach($gradeValue as $val){

                     ?>
                    <td name='grade'><form name="grade" method="post"><input value='<?php if (isset($val)){echo sprintf("%0.2f",$val);} ?>' type='text' class='form-control' name='grade'></td>
              <?php      }

}
}

关于mysqli_查询没有更新的原因,我的猜测是因为有多个$u POST['grade']值正在提交,而SQL不知道如何处理它们。我已经检查了表单并输入了姓名,所有这些都检查得很好

我知道user_id不应该在grades表中,但我只是想让它正常工作,稍后会优化SQL查询

第一次mysqli_查询之后的循环是不必要的。更新查询不生成要迭代的行,所以循环什么也不做

相反,您应该在以下情况下检查错误:

$result = mysqli_query($link, $update_query);
像这样:

if (!$result)
  die("Error running query:".mysqli_error($link));
如果在成功的情况下打印更新的行数,也有助于调试,例如:

echo("Updated rows:".mysqli_affected_rows($link));
这将帮助您找出没有看到更新行的原因是查询中的语法错误还是查询没有匹配行


您还应该确保正确清理用户输入,例如使用mysqli_escape_字符串,以避免SQL注入攻击。

更新不起作用的原因是您自己指出的:有多个“grade”字段导致数组类型为$\u POST['grade'],但这里还有一些需要指出的地方

您已经在这里的3个元素上设置了相同的名称属性。尽管这不是一个真正的问题,也可能不会导致任何问题,但是名称属性通常被分配给html表单中的字段。不应具有名称属性。如果选择使用表单名称,则表单名称可能与文本输入名称不同。但是,由于HTML4的原因,不推荐使用的名称属性是: 表单的名称。在HTML4中,它的用法是不推荐的,应该改用id。它在文档中的表单中必须是唯一的,而不仅仅是HTML5中的空字符串

我想你的成绩实际上是不同科目的,所以你可能需要在你的“成绩”表中有一个“科目类型”列,该列应该从单独的“科目”表中分配外来id,以正确利用关系数据库。在前端有不同的实现方法。一种方法是,您可以将文本字段的名称属性设置为不同的主题名称,而不仅仅是“等级”

虽然可以在SQL中执行批插入语句,但update没有等效的语法。因此,在将表单提交到PHP脚本之后,应该执行一个循环来更新多行。但是,在读取select查询结果时,可以使用mysqli_fetch_all$result来避免在循环中执行查询


我还记得,当我第一次开始学习PHP时,我也有点困惑,因为它可以混合HTML。而开始的书将在一个脚本中包含所有代码。前几天,我看到一篇帖子,上面有人在给JavaScript分配PHP会话变量。。。一开始就要记住,PHP、MySQL、HTML和JavaScript都是独立的语言,它们都有自己的语法。PHP MySQLi库只是以字符串表示形式将查询传递给MySQL,因此它需要遵守MySQL规则:

我刚刚尝试了这个,但不幸的是,仍然没有运气。“保存更改”上未显示错误和成功消息。页面将重定向并更新一段时间,但什么也没有发生。我最初在没有循环的情况下尝试了它,认为它是不必要的,然后出于某种原因将其包括在内,认为它会在每次迭代中更新。PHP MySQLi库只是将字符串表示的查询传递给MySQL,因此它需要遵守MySQL规则:不,MySQL和MySQLi都使用SQL与数据库服务器通信。它们都遵循SQL语法。然而,MySQL已经定义了一些额外的子句,但这并不意味着它是一种全新的查询语言。我想说的是,MySQL本身不处理查询。这里我指的是数据库系统MySQL,而不是PHP MySQL库。很抱歉给你带来了困惑。
echo("Updated rows:".mysqli_affected_rows($link));