2017-09-28 9 views
0

私はお知らせというエラーを得た理由は、私は思っていた:未定義の変数:Cでquery_add_landdev_temp_payroll:X-X線の\ xamppの\ htdocsに\ OP \ AJAX \ ajaxLanddevNTPPayroll.phpを。過去2週間、それは完璧に動作します。今日コードを実行しようとしたとき、私はそのようなエラーを受けました。ここに私のコードは次のとおりです。あなたがwhileコマンド内の変数を使用しているよう未定義の可変ループしながら、それは外だとき - PHP

$query_get_payroll = mysqli_query($new_conn, "SELECT ntp_with_ob_payroll_transaction.ntp_id, ntp_with_ob_payroll_transaction.allotment_code, ntp_with_ob_payroll_transaction.category_name, ntp_with_ob_payroll_transaction.block_number, ntp_with_ob_payroll_transaction.activity, ntp_with_ob_payroll_transaction.lot_number, ntp_with_ob_payroll_transaction.labor_cost, other_budget.quantity FROM ntp_with_ob_payroll_transaction JOIN other_budget ON ntp_with_ob_payroll_transaction.ob_id = other_budget.ob_id WHERE other_budget.transaction_id = $transaction_id AND other_budget.ob_number = '$ntp_number' AND is_payroll = 0"); 

while($row = mysqli_fetch_assoc($query_get_payroll)) { 

    $ntp_id = $row['ntp_id']; 
    $allotment_code = $row['allotment_code']; 
    $category_name = $row['category_name']; 
    $block_number = $row['block_number']; 
    $activity = $row['activity']; 
    $lot_number = $row['lot_number']; 
    $labor_cost = $row['labor_cost']; //this is equivalent to unit cost 
    $quantity = $row['quantity']; //this is equivalent to total percentage 


    $query_add_landdev_temp_payroll = mysqli_query($new_conn, "INSERT INTO temp_payroll_landdev(ntp_id, userid, transaction_id, ntp_number, contractor_name, allotment_code, category_name, block_number, activity, lot_numbers, regular_labor, quantity) VALUES($ntp_id, $_SESSION[userid], $transaction_id, '$ntp_number', '$fullname', '$allotment_code', '$category_name', $block_number, '$activity', '$lot_number', '$labor_cost', '$quantity')"); 
} 

if($query_add_landdev_temp_payroll) { 

    echo 1; 

    //database file name 
    $database_file = $database.'.sql'; 
    $new_database_file = $new_database.'.sql'; 

    if(file_exists('backup/'.$new_database_file)) { 

     unlink('backup/'.$new_database_file); 

     //backup project database 
     $command = "C:/xampp/mysql/bin/mysqldump --host=$new_host --user=$new_user --password=$new_pass $new_database > backup/$new_database_file"; 
     system($command); 

    } else { 

     //backup project database 
     $command = "C:/xampp/mysql/bin/mysqldump --host=$new_host --user=$new_user --password=$new_pass $new_database > backup/$new_database_file"; 
     system($command); 
    } 
} else { 

    echo 0; 
} 
+1

多分このコードは '$行= mysqli_fetch_assoc($のquery_get_payrollを)' * falsy *値を返さ?したがって、whileループは実行されませんでした。 – Wreigh

+0

@Wreigh私はそれを気付かなかった...ありがとう。 –

+0

あなたは歓迎ですが、*変数*が設定されているかどうかを確認するためにNagaの答えに従うことができます。または、iCodersは*変数*が存在することを確認します。これのために – Wreigh

答えて

3

クエリで行が返されない場合、mysqli_fetch_assoc()は最初にfalseを返します。したがって、ループには絶対に入り込まず、変数に決して割り当てられません。変数を使用しようとすると、その警告が表示されます。

あなたはループの前にそれをデフォルトの初期値を与えることができ、またはあなたがあなたのテストを変更することができます。

BTW
if (!empty($query_add_landdev_temp_payroll)) 

、変数は、ループの最後の繰り返しでINSERTの結果が含まれています。おそらく、の直後に、ループ内にifブロックを置くべきでしょうか?

また、ループ内でINSERTを実行する必要はありません。あなたは、単一のクエリを使用して全体のことを行うことができます。

INSERT INTO temp_payroll_landdev(ntp_id, userid, transaction_id, ntp_number, contractor_name, allotment_code, category_name, block_number, activity, lot_numbers, regular_labor, quantity) 
SELECT ntp_with_ob_payroll_transaction.ntp_id, ntp_with_ob_payroll_transaction.allotment_code, ntp_with_ob_payroll_transaction.category_name, ntp_with_ob_payroll_transaction.block_number, ntp_with_ob_payroll_transaction.activity, ntp_with_ob_payroll_transaction.lot_number, ntp_with_ob_payroll_transaction.labor_cost, other_budget.quantity 
FROM ntp_with_ob_payroll_transaction 
JOIN other_budget ON ntp_with_ob_payroll_transaction.ob_id = other_budget.ob_id 
WHERE other_budget.transaction_id = $transaction_id AND other_budget.ob_number = '$ntp_number' AND is_payroll = 0 
+0

これは正しいです。 $ query_get_payrollにデータがないので、FALSEを返します。答えに感謝します。 –

1

はちょうどこのようif条件を更新し、

if(isset($query_add_landdev_temp_payroll) && $query_add_landdev_temp_payroll) 
+0

ありがとうございます。 –

0

が見えます。そのコマンドの外側では、この変数は定義されません。 を使用してからwhileコマンドを試してください。それがあなたを助けることを願って!

+0

私は$ query_get_payrollに値がないことに気がつきました。その理由は未定義です。 @Wreighのおかげで –

関連する問題