0

「new_payment」テーブルと「new_reservation」テーブルでは、各行 (支払い) に res_id (new_reservation の PK と予約者、new_payment の FK、CASCADE、CASCADE) があります。3 つの入力ボックスに入力する必要があります。

総請求額: [ ]

以前に支払った: [ ]

支払額: [ ]

ユーザーが部屋番号を入力して送信すると、コントローラーは「search_by_room_number」モデルを呼び出し、次にモデルを呼び出します。

  1. new_reservation テーブルから「合計」を返します
  2. new_reservation テーブルから $res_id という変数に「res_id」を返します
  3. その $res_id を使用して、new_payment テーブルで以前の 'paid_amount' を探します
  4. ...そして new_payment テーブルの「due_amount」

しかし、予期せず、次のエラーが発生します。

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
Filename: models/payments_model.php
Line Number: 16

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: models/payments_model.php
Line Number: 18

A PHP Error was encountered
Severity: Notice
Message: Array to string conversion
Filename: models/payments_model.php
Line Number: 16

A PHP Error was encountered
Severity: Notice
Message: Trying to get property of non-object
Filename: models/payments_model.php
Line Number: 18

モデル:

function search_by_room_number($room_number) {

    $query = $this->db->query("SELECT total FROM new_reservation WHERE room_number = '$room_number' AND payment_status = 'Pending' LIMIT 1"); // Line 16
    $row = $query->row();
    return $row->total; // Line 18

    $res_id='';

    $query = $this->db->query("SELECT res_id FROM new_reservation WHERE room_number = '$room_number' AND payment_status = 'Pending' LIMIT 1");
    $row = $query->row();
    $res_id = $row->res_id;

    $query = $this->db->query("SELECT paid_amount FROM new_payment WHERE res_id = '$res_id' LIMIT 1");
    $row = $query->row();
    return $row->paid_amount;

    $query = $this->db->query("SELECT due_amount FROM new_payment WHERE res_id = '$res_id' LIMIT 1");
    $row = $query->row();
    return $row->due_amount;

}

コントローラ:

function search_room_number() {
        $popRoomNumbers = $this->input->post('room_number');

        $totalBill['total'] = $this->payments_model->search_by_room_number($popRoomNumbers);
        $previouslyPaid['paid_amount'] = $this->payments_model->search_by_room_number($popRoomNumbers);
        $dueAmount['due_amount'] = $this->payments_model->search_by_room_number($popRoomNumbers);

        $tmpFormData=array_merge($totalBill, $previouslyPaid, $dueAmount);
    $this->load->view('/main/new_payment', $tmpFormData);
}

意見:

<?php $attr = array(
                'name'  =>  'totalBill',
                'id'    =>  'totalBill',
                'class' =>  'span2',
                'readonly'=>'true',
                'value' =>  $total
            );
echo form_input($attr);
?>            

<?php $attr = array(
                'name'  =>  'previouslyPaid',
                'id'    =>  'previouslyPaid',
                'class' =>  'span2',
                'readonly'=>'true',
                'value' =>  $paid_amount
            );
echo form_input($attr);
?> 

<?php $attr = array(
                'name'  =>  'dueAmount',
                'id'    =>  'dueAmount',
                'class' =>  'span2',
                'readonly'=>'true',
                'value' =>  $due_amount
            );
echo form_input($attr);
?>   
4

2 に答える 2

3

次のように試してみるとよいと思います。

$query = $this->db->query("SELECT total, res_id FROM new_reservation WHERE room_number = '".$this->db->escape($room_number)."' AND payment_status = 'Pending' LIMIT 1");

if ($query->num_rows() > 0)
{
    $row = $query->row();
    $total = $row->total;
    $res_id = $row->res_id;

} else {
    throw new Exception("No records found");
}
于 2013-07-09T04:55:22.970 に答える
0

私はそれを一行一行自分でやり直し、最終的により効率的なコードを提供することができました。

function viewTotalBill($room_number) {

    $query = $this->db->query("SELECT total FROM new_reservation WHERE room_number='$room_number' AND payment_status='Pending' LIMIT 1");
    if ($query->num_rows() > 0) {
    foreach ($query->result() as $row) {
        return $row->total;
        }
    }   
    //else throw new Exception("No records found"); 
}

function viewPreviouslyPaidAmount($room_number) {

    $query = $this->db->query("SELECT res_id FROM new_reservation WHERE room_number='$room_number' AND payment_status='Pending' LIMIT 1");
    if ($query->num_rows() > 0) {
    foreach ($query->result() as $row) {
        $query = $this->db->query("SELECT paid_amount FROM new_payment WHERE res_id = '$row->res_id' LIMIT 1");
            foreach ($query->result() as $row) {
            return $row->paid_amount;
            }
        }
    }
    //else throw new Exception("No records found");
}


function viewDueAmount($room_number) {

    $query = $this->db->query("SELECT res_id FROM new_reservation WHERE room_number='$room_number' AND payment_status='Pending' LIMIT 1");
    if ($query->num_rows() > 0) {
    foreach ($query->result() as $row) {
        $query = $this->db->query("SELECT due_amount FROM new_payment WHERE res_id = '$row->res_id' LIMIT 1");
            foreach ($query->result() as $row) {
            return $row->due_amount;
            }
        }
    }
    //else throw new Exception("No records found");
}
于 2013-07-09T05:44:59.860 に答える