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 in advanced ..: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";
}
}
?>
答案 0 :(得分:1)
您的查询应该是
SELECT SUM(Tuition) as TotalTuition FROM student_payments WHERE id='$id' GROUP BY id
然后你可以回复TotalTuition。
您的代码容易受到sql injection攻击,您需要撤消所有get
和post
,更好的方法是使用Prepared statement
好读
ext/mysql
PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDO
或MySQLi
好读
答案 1 :(得分: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";
}
?>
答案 2 :(得分:0)
关于您的代码的一些事项:
始终将数据转换为您期望的数据(在您的id的情况下,应该是整数)。
永远不要将任何未转义的字符串放入SQL查询中。您永远不知道人们在您的应用程序输入字段中键入了什在这种情况下,我不使用mysql_escape,因为id被转换为整数,这对查询没有任何影响。
从不(!)在循环中使用mysql_query。你永远不需要它,它总会减慢你的应用程序而不提供任何用途。
如果您的数据库需要一个整数,那么给它一个整数而不是一个字符串。 id应该是一个整数,但'$ id'将始终是一个字符串。不幸的是,MySQL默默地试图将其转换为整数而不是抱怨......
因为我非常挑剔:id是标识符的缩写,这反过来意味着你可以通过它识别某些东西。由此产生的标识符必须始终是唯一的。我希望你选择它只是为了解释你的问题。
尽可能使用'而不是'来表示字符串。这将使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语句中的错误。但是不要向用户显示。他们可能知道,如何利用它来利用你的应用......