Visualizzazione risultati 1 fino 11 di 11

Discussione: problemi con PHP

  1. #1
    Guest

    Predefinito problemi con PHP

    salve,

    non sono molto esperto quindi chiedo scusa se dico qualche sciocchezza.

    Sto usando una applicazione in PHP collegata ad un database.

    Molto funziona, però certe operazioni non funzionano e appare la scritta:

    Fatal error: Call to a member function row_array() on a non-object in <path>/foo.php on line 30


    L'applicazione funziona perfettamente sul mio PC.


    Qualche suggerimento su che cosa sto sbagliando?

    Posso fornire altri dettagli, se serve.

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Il codice sorgente dello script è necessario per la comprensione del problema.

  3. #3
    Guest

    Predefinito

    non riesco ad inviare degli allegati. copio qui sotto il codice sorgente dove viene rilevato l'errore (reports/summary_sales.php):

    -----------------------------------------------------------------------------------------

    Codice PHP:
    <?php
    require_once("report.php");
    class
    Summary_sales extends Report
    {
    function
    __construct()
    {
    parent::__construct();
    }

    public function
    getDataColumns()
    {
    return array(
    $this->lang->line('reports_date'), $this->lang->line('reports_subtotal'), $this->lang->line('reports_total'), $this->lang->line('reports_tax'), $this->lang->line('reports_profit'));
    }

    public function
    getData(array $inputs)
    {
    $this->db->select('sale_date, sum(subtotal) as subtotal, sum(total) as total, sum(tax) as tax,sum(profit) as profit');
    $this->db->from('sales_items_temp');
    $this->db->group_by('sale_date');
    $this->db->having('sale_date BETWEEN "'. $inputs['start_date']. '" and "'. $inputs['end_date'].'"');
    $this->db->order_by('sale_date');
    return
    $this->db->get()->result_array();
    }

    public function
    getSummaryData(array $inputs)
    {
    $this->db->select('sum(subtotal) as subtotal, sum(total) as total, sum(tax) as tax,sum(profit) as profit');
    $this->db->from('sales_items_temp');
    $this->db->where('sale_date BETWEEN "'. $inputs['start_date']. '" and "'. $inputs['end_date'].'"');
    return
    $this->db->get()->row_array();
    }

    }
    ?>
    -----------------------------------------------------------------------------------------

    Il sorgente dove viene generata la richiesta è troppo grande. ricopio qui sotto la parte (che io penso sia) rilevante.

    -----------------------------------------------------------------------------------------

    Codice PHP:
    <?php
    require_once ("secure_area.php");
    require_once (
    APPPATH."libraries/ofc-library/open-flash-chart.php");
    class
    Reports extends Secure_area
    {
    function
    __construct()
    {
    parent::__construct('reports');
    $this->load->helper('report');
    }

    //Initial report listing screen
    function index()
    {
    $this->load->view("reports/listing",array());
    }

    function
    _get_common_report_data()
    {
    $data = array();
    $data['report_date_range_simple'] = get_simple_date_ranges();
    $data['months'] = get_months();
    $data['days'] = get_days();
    $data['years'] = get_years();
    $data['selected_month']=date('n');
    $data['selected_day']=date('d');
    $data['selected_year']=date('Y');

    return
    $data;
    }

    //Input for reports that require only a date range and an export to excel. (see routes.php to see that all summary reports route here)
    function date_input_excel_export()
    {
    $data = $this->_get_common_report_data();
    $this->load->view("reports/date_input_excel_export",$data);
    }

    //Summary sales report
    function summary_sales($start_date, $end_date, $export_excel=0)
    {
    $this->load->model('reports/Summary_sales');
    $model = $this->Summary_sales;
    $tabular_data = array();
    $report_data = $model->getData(array('start_date'=>$start_date, 'end_date'=>$end_date));

    foreach(
    $report_data as $row)
    {
    $tabular_data[] = array($row['sale_date'], to_currency($row['subtotal']), to_currency($row['total']), to_currency($row['tax']),to_currency($row['profit']));
    }

    $data = array(
    "title" => $this->lang->line('reports_sales_summary_report'),
    "subtitle" => date('m/d/Y', strtotime($start_date)) .'-'.date('m/d/Y', strtotime($end_date)),
    "headers" => $model->getDataColumns(),
    "data" => $tabular_data,
    "summary_data" => $model->getSummaryData(array('start_date'=>$start_date, 'end_date'=>$end_date)),
    "export_excel" => $export_excel
    );

    $this->load->view("reports/tabular",$data);
    }

    //...
    Ultima modifica di javascripter : 12-10-2011 alle ore 17.04.55 Motivo: +[PHP]

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Se la riga 30 è:
    Codice PHP:
    return $this->db->get()->result_array();
    allora il metodo get(), non restituisce alcun oggetto.
    Dovresti verificare che la query vada a buon fine prima.

  5. #5
    Guest

    Predefinito

    la riga incriminata e':
    Codice PHP:
    return $this->db->get()->row_array();
    e immagino che valga lo stesso commento.

    Però a questo punto vado un po' nel pallone: il codice non è mio e non tanto mi oriento. Io sarei solo un utente.

    Allora:

    Il database funziona perchè l'ho provato con PHPMyAdmin.

    La query è nel sorgente che ti ho dato o è nascosta altrove?

    Apprezzerei molto qualche dritta sui prossimi passi da fare per cercare di capire dov'è il problema...

    grazie
    EDIT:
    ok, penso di aver capito che la quey è fatta da get()
    Codice PHP:
    /**
    * Get
    *
    * Compiles the select statement based on the other functions called
    * and runs the query
    *
    * @access public
    * @param string the table
    * @param string the limit clause
    * @param string the offset clause
    * @return object
    */
    function get($table = '', $limit = null, $offset = null)
    {
    if (
    $table != '')
    {
    $this->_track_aliases($table);
    $this->from($table);
    }

    if ( !
    is_null($limit))
    {
    $this->limit($limit, $offset);
    }

    $sql = $this->_compile_select();

    $result = $this->query($sql);
    $this->_reset_select();
    return
    $result;
    }
    ho ragione? se si, come faccio a capire se la query è andata a buon fine?
    Ultima modifica di javascripter : 13-10-2011 alle ore 13.41.56 Motivo: + tag [php]; post consecutivo

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Controlla cosa contiene la variabile $result.
    Inoltre, controlla anche gli altri metodi, tra cui query.
    Ultima modifica di javascripter : 13-10-2011 alle ore 13.40.59

  7. #7
    Guest

    Predefinito

    per prima cosa chiedo scusa per UP e per la formattazione, ho riletto le regole e sarò più attento. ringrazio cmq per l'aiuto finora: non ho risolto, ma mi sembra che sto procedendo.

    Comunque ecco le novità.

    1. la variabile $sql contiene:

    SELECT `sale_date`, sum(subtotal) as subtotal, sum(total) as total, sum(tax) as tax, sum(profit) as profit FROM (`phppos_sales_items_temp`) GROUP BY `sale_date` HAVING `sale_date` BETWEEN "2011-10-01" and "2011-10-31" ORDER BY `sale_date`

    2. la variabile $result contiene:

    boolean(false)

    ho l'impressione che $sql sia costruito male, ma conosco poco la sintassi di SELECT...
    ad esempio, get() viene chiamato altre volte:

    $sql contiene:

    SELECT * FROM (`phppos_employees`) JOIN `phppos_people` ON `phppos_people`.`person_id` = `phppos_employees`.`person_id` WHERE `phppos_employees`.`person_id` = '2' AND `deleted` = 0

    e in questo caso $result è un object e tutto funziona.
    Ultima modifica di lavaevia : 13-10-2011 alle ore 16.34.43

  8. #8
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Per controllare gli errori commessi in una query, usa la funzione mysql_error ( o mysqli_error, se usi mysqlI ).
    Mostra dove si trova l'errore (indicativamente).
    Ultima modifica di javascripter : 15-10-2011 alle ore 16.37.35

  9. #9
    Guest

    Predefinito CREATE TEMPORARY TABLE privileges

    dopo un po' di debugging ho scoperto che l'errore è dovuto alla creazione di una tabella temporanea.

    Ho verificato che, come utente, non ho i privilegi necessari.

    Si può fare qualcosa?

  10. #10
    Guest

    Predefinito CREATE TEMPORARY TABLE privileges

    Leggo nei vecchi (2008) post del forum che il comando è disabilitato per gli utenti di AV.

    E' ancora così?

  11. #11
    Guest

    Predefinito

    Up!

    Non è possibile usare query con create temporary table??
    Per favore rispondete, così passo ad altre soluzioni.....

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •