【解決方法】グループとIDで配列を作成する方法は?


グループごとに合計を計算する配列を作成したい。 しかし、このコードは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 をバックアップから頻繁に復元する準備をしてください。 バックアップは定期的に取っていますよね?

コメント

タイトルとURLをコピーしました