[ad_1]
グループごとに合計を計算する配列を作成したい。 しかし、このコードはhtmlテーブルでエラーでした。 プリントアウトページです。
私が試したこと:
PHP
$ListEPF = array(); $mySQL = 'SELECT A.*, B.description AS grouping FROM payroll_monthly_kwsp_socso_eis_detail A INNER JOIN payroll_group B ON B.id = A.payroll_group WHERE A.company = '.$data['company'].' AND A.payroll_month = "'.$data['month'].'" ORDER BY A.payroll_group, A.id'; $result = mysql_query($mySQL); if ($result){ if (mysql_num_rows($result) > 0){ while ($row = mysql_fetch_assoc($result)){ //TOTAL EACH GROUP //how to make array to calculate by group? $mySQL2 = 'SELECT A.* FROM payroll_monthly_kwsp_socso_eis_group A WHERE A.company = '.$row['company'].' AND A.payroll_month = "'.$row['payroll_month'].'" ORDER BY A.payroll_group, A.id '; $result2 = mysql_query($mySQL2); if ($result2){ if (mysql_num_rows($result2) > 0){ $row2 = mysql_fetch_assoc($result2); $ListEPF[$row['grouping']]['col_basic_salary_epf'] = $row2['basic_salary_epf']; if (!array_key_exists($row['id'], $ListEPF[$row['grouping']])){ $ListEPF[$row['grouping']][$row['id']] = array(); } $ListEPF[$row['grouping']][$row['id']]['basic_salary_epf'] = $row['basic_salary_epf']; } } }
HTML
$i = 0; foreach ($ListEPF as $key => $value){ $html .= ''; $html .= ' '.$key.' Month: '.$data['month'].' Month: '.($data['month'] - 1).' Month: '; $html .= 'Salary'; $html .= ''; $html .= ''; foreach ($value as $key2 => $value2){ $i++; $html .= ''; $html .= ''.$value2['basic_salary_epf'].''; $html .= ''; } //TOTAL $html .= ''; $html .= ''.$value['col_basic_salary_epf'].''; //Total All Basic Salary by group $html .= ''; $html .= ''; $html .= ' '; }
解決策 1
そんなことしないで! 文字列を連結して SQL コマンドを作成しないでください。 データベース全体を破壊する可能性のある、偶発的または意図的な SQL インジェクション攻撃にさらされる可能性があります。 代わりに、常にパラメーター化されたクエリを使用してください。
文字列を連結すると、SQL が次のようなコマンドを受け取るため、問題が発生します。
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
ユーザーが追加した引用符は、SQL に関する限り文字列を終了させ、問題が発生します。 しかし、それはもっと悪いかもしれません。 代わりに「x’;DROP TABLE MyTable;–」と入力すると、SQL は非常に異なるコマンドを受け取ります。
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
どの SQL が 3 つの別個のコマンドとして認識されるか:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';
完全に有効な SELECT
SQL
DROP TABLE MyTable;
完全に有効な「テーブルの削除」コマンド
SQL
--'
そして、それ以外はすべてコメントです。
一致する行を選択し、DB からテーブルを削除し、それ以外は無視します。
したがって、常にパラメーター化されたクエリを使用してください。 または、DB をバックアップから頻繁に復元する準備をしてください。 バックアップは定期的に取っていますよね?
[ad_2]
コメント