1
id  1stPayment  2ndPayment  3rdPayment  4thPayment  Tuition 
8   0           200         2000            2000            9000    
8   2000        0           0               0                 0
9   0           0           0               0               1000    
10  1           0           0               0               0

我想添加 id-8 的所有学费并回显学费总和的结果。我怎么能把所有的学费加起来而不加上其他身份证的学费。表名是“students_payments”...“我也想在自己的页面中回显一个 id 的学费,就像当我访问 id-8 的帐户时,它会显示其学费的总和。:D

我有这个代码,但是当我访问 id-9 和 id-10 的帐户时,它显示了所有学费的附加值。tnx 在高级.. :D

<?php

include("confstudents.php");
$id = $_GET['id'];

$result = mysql_query("select * from student_payments where id='$id' ");
while ($res = mysql_fetch_assoc($result)) {

    $result = mysql_query("SELECT SUM(Tuition) FROM student_payments");
    while ($row = mysql_fetch_assoc($result)) {
        $TT = $row['SUM(Tuition)'];
        echo "Php $TT";
    }
}
?> 
4

3 回答 3

1

你的查询应该是

SELECT SUM(Tuition) as TotalTuition FROM student_payments WHERE id='$id' GROUP BY id

然后你可以回显 TotalTuition。


警告

您的代码容易受到sql 注入的影响,您需要全部转义getpost更好的方法是使用Prepared 语句

好读

  1. 如何防止 PHP 中的 SQL 注入?
  2. PDO 准备好的语句是否足以防止 SQL 注入?

笔记

  1. 整个ext/mysqlPHP 扩展提供了以 mysql_ 为前缀的所有函数,从 PHP v5.5.0 开始正式弃用,并将在未来删除。所以使用PDO或者MySQLi

好读

  1. 不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO
  2. MySQL 开发人员的 PDO 教程
  3. Pdo 初学者教程
于 2013-01-30T12:44:57.253 回答
0
<?php

include("confstudents.php");
$id = $_GET['id'];
$result = mysql_query("SELECT SUM(Tuition) FROM student_payments where id='$id'");
while ($row = mysql_fetch_array($result)) {
    $TT = $row['SUM(Tuition)'];
    echo "$TT";
}
?>
于 2013-01-30T12:54:38.493 回答
0

关于您的代码的一些事情:

始终将数据转换为您期望的数据(对于您的 id,应该是整数)。

切勿将任何未转义的字符串放入 SQL 查询中。您永远不知道人们在您的应用程序输入字段中输入了什么。在这种情况下,我不使用 mysql_escape,因为 id 被转换为整数,这对查询没有害处。

永远不要(!)在循环中使用 mysql_query。你永远不需要它,它总是会减慢你的应用程序而不提供任何用途。

如果您的数据库需要一个整数,那么给它一个整数而不是一个字符串。id 应该是一个整数,但 '$id' 将始终是一个字符串。不幸的是,MySQL 默默地尝试将其转换为整数而不是抱怨......

由于我很挑剔:id 是 identifier 的缩写,这反过来意味着你可以通过它来识别某些东西。因此,标识符必须始终是唯一的。我希望你选择它只是为了解释你的问题。

尽可能使用 ' 而不是 " 作为字符串。这将阻止 PHP 解析器尝试解释字符串。使您的代码更节省和更快。

虽然不推荐使用 mysql_* 函数,但我只是扩展了您的代码。因此,有关您的问题的答案,请参见下面的代码。

<?php

include("confstudents.php");
$id = (int)$_GET['id'];  // cast to int to prevent SQL injection; if you can't do that (e.g. it is a string), use mysql_escape()
if ($id <= 0) {   // check if the id is at all valid and break here if it isn't
    die('Invalid ID');
}

$result = mysql_query('SELECT SUM(tuition) sum_tuition FROM student_payments WHERE id = ' . $id);
if ($result === FALSE) {   // Check if the statement was able be processed
    die('Error in SQL statement');   // break here, if it wasn't
}
$res = mysql_fetch_assoc($result);   // with the SQL above, there's always exactly one row in the result
echo 'Php ' . $res['sum_tuition'];
?>

您可以添加更多调试代码,例如 mysql_error() 来查找 SQL 语句中的错误。但不要向您的用户展示它。他们可能知道,如何使用它来利用您的应用程序......

于 2013-01-30T13:38:10.873 回答