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 のすべての授業料を追加し、授業料の合計の結果をエコーし​​ます。他のIDの授業料を追加せずに、すべての授業料を合計するにはどうすればよいですか. テーブル名は「students_payments」です... 「id-8のアカウントにアクセスすると、その授業料の合計が表示されるように、IDの授業料を独自のページにエコーしたい. :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インジェクションgetに対して脆弱です。すべてをエスケープする必要がpostあり、より良いアプローチはPreparedステートメントを使用することです

よく読んだ

  1. PHPでSQLインジェクションを防ぐには?
  2. SQL インジェクションを防ぐには、PDO 準備済みステートメントで十分ですか?

ノート

  1. ext/mysql接頭辞 mysql_ で名前が付けられたすべての関数を提供する PHP 拡張機能全体は、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 クエリに挿入しないでください。人々がアプリケーションの入力フィールドに何を入力するかは決してわかりません。この場合、id が整数にキャストされているため、mysql_escape は使用しません。これはクエリに害を与えません。

絶対に (!) 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 に答える