problema con include 'function'

Ciao a tutti

Ho creato le seguenti funzioni per riprendere un saldo progressivo all'interno di un sistema d'impaginazione,

date_minus2m_1std(): per creare una data 2 mesi inferiore alla data corrente e con giorno uguale al primo del  mese

date_minus2m_1std.php

<?php
function date_minus2m_1std()
{
$date_minus2m_1std = mktime (0,0,0,date("m")-2,date("d"),date("Y"));
$data_minus2m_1std = date('Y-m-01',$date_minus2m_1std);
return $data_minus2m_1std;
}
?>

start_balance(): per trovare il saldo iniziale alla data date_minus2m_1std()-1

start_balance.php

<?php
function start_balance($dipu_p,$diba_p,$data_last_bal)
{
require 'config.php';
require 'connect.php';
$query = "select (fin_record_debit-fin_record_credit) as fin_record_bal1 from fin_records where (fin_record_date<='$data_last_bal') and (id_production_unit='$dipu_p') and (id_bank_account='$diba_p')";
$result = mysql_query($query);
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) 
{
$fin_record_bal2   +=$row[fin_record_bal1];
}
return $fin_record_bal2;
}
?>

Se provo a lanciare il seguente script:

<?php
require 'start_balance.php';
$dipu_p=2;
$diba_p=12;
$data_last_bal='2007-10-1';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

funziona e posso visualizzare il saldo alla data del '2007-10-1'.

Se però provo a lanciare il seguente

<?php
require 'date_minus2m_1std.php';
$data_start = date_minus2m_1std();
$data_last_bal = date('Y-m-d',strtotime(date_minus2m_1std())-1);
$dipu_p=2;
$diba_p=12;
echo $data_last_bal;
echo '<br>';
echo $dipu_p;
echo '<br>';
echo $diba_p;
require 'start_balance.php';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

riesco a visualizzare i valori di $data_last_bal,$dipu_p,$diba_p, ma non riesco a visualizzare l'ultimo echo della funzione start_balance().

Sembra essere un comportamento un po' anomalo...

Potrei avere un vs suggerimento?

Grazie per l'attenzione

Amos

inviato 9 anni fa
amosse
X 0 X

prova a mettere qualche echo nella start_balance() così controlli se viene eseguita correttamente anche nel secondo caso

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie per la risposta.

Ho messo un po' di echo all'interno della start_balance() in questo modo:

<?php
function start_balance($dipu_p,$diba_p,$data_last_bal)
{
require 'config.php';
require 'connect.php';
$query = "select (fin_record_debit-fin_record_credit) as fin_record_bal1 from fin_records where (fin_record_date<='$data_last_bal') and (id_production_unit='$dipu_p') and (id_bank_account='$diba_p')";
$result = mysql_query($query);
echo '<br>';
echo 'start_balance()-$data_last_bal='.$data_last_bal;
echo '<br>';
echo 'start_balance()-$dipu_p='.$dipu_p;
echo '<br>';
echo 'start_balance()-$diba_p='.$diba_p;
echo '<br>';
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) 
{
$fin_record_bal2   +=$row[fin_record_bal1];
echo 'start_balance()-while-$row[fin_record_bal1]='.$row[fin_record_bal1];
echo 'start_balance()-while-$fin_record_bal2='.$fin_record_bal2;
echo '<br>';
}
return $fin_record_bal2;
}
?>

poi ho lanciato

prova_balance.php

<?php
require '../start_balance.php';
$dipu_p=2;
$diba_p=12;
$data_last_bal='2007-10-1';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

risultato:

start_balance()-$data_last_bal=2007-10-1

start_balance()-$dipu_p=2

start_balance()-$diba_p=12

start_balance()-while-$row[fin_record_bal1]=-123.00start_balance()-while-$fin_record_bal2=-123

start_balance()-while-$row[fin_record_bal1]=-100.00start_balance()-while-$fin_record_bal2=-223

...............................etc.

fino alla visualizzazione del saldo finale (return $fin_record_bal2;) di -1002439.91

tutto OK.

poi ho lanciato

prova_balance2.php

<?php
require '../date_minus2m_1std.php';
$data_start = date_minus2m_1std();
$data_last_bal = date('Y-m-d',strtotime(date_minus2m_1std())-1);
$dipu_p=2;
$diba_p=12;
require '../start_balance.php';
echo start_balance($dipu_p,$diba_p,$data_last_bal);
?>

risultato:

start_balance()-$data_last_bal=2007-07-31

start_balance()-$dipu_p=2

start_balance()-$diba_p=12

Quindi non riesco a visualizzare nessun dato all'interno del ciclo while,

non capisco perchè non riesca neanche a visualizzare il testo compreso tra apici e non solo $row[fin_record_bal1] e $fin_record_bal2 nei vari echo.

Poi ho fatto un'ulteriore prova cambiando if (!$result)  con  if ($result) ed ho provato a rilanciare sia prova_balance.php che prova_balance2.php, entrambi segnalano 'Errore nella query...'

I percorsi relativi dei require sono giusti perché entrambe le funzioni si trovano nella cartella a livello superiore.

Non riesco a capire.. se avete qualche consiglio?

Ciao

Amos

risposto 9 anni fa
amosse
X 0 X

if (!$result) è corretto. Per il resto non ho idea. Qualche novità?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Forse è una domanda stupida, ma lo script è legato al primo giorno del mese (corrente o precedente)?

Perchè vedo che per il mese corrente parti dal primo gg, mentre la funzione che genera la data per 2 mesi precedenti restituisce come data l'ultimo giorno di 3 mesi prima.

Negli esempi: 2007-10-1 e 2007-07-31

risposto 9 anni fa
LonelyWolf
X 0 X

Grazie per la risposta.

Con riferimento alla domanda di LonelyWolf  lo script prova_balance2.php richiama,

prima la funzione date_minus2m_1std()  con la quale ottengo (partendo dalla data attuale esempio 24/10/2007) la data al primo giorno dei due mesi precedenti, cioé 01/08/2007.

Poi con le righe di codice

$data_start = date_minus2m_1std();
$data_last_bal = date('Y-m-d',strtotime(date_minus2m_1std())-1);

vado alla data 31/07/2007, cioé 01/08/2007 meno 1 giorno.

Potevo forse togliere la riga $data_start = date_minus2m_1std();sopra visto che con la funzione strtotime mi riferisco direttamente date_minus2m_1std(), ma credo che questo non sia determinante per il risultato.

Quindi lo script prova_balance.php che ho riportato era solo un esempio aggiuntivo dove invece di ricorrere all'uso della funzione date_minus2m_1std() (e successivamente il codice riportato sopra) ho inserito manualmente un valore per la variabile $data_last_bal relativa alla funzione start_balance().

Il problema é che prova_balance.php funziona mentre prova_balance2.php non restituisce alcun valore all'interno del ciclo while per il fetching.

Per rispondere a Gianni, non saprei quali altre prove effettuare?

Se avete suggerimenti ......

Ciao

Amos

ps: premetto che le  funzioni per le date le ho create guardando un po' di esempi sulla guida ufficiale di PHP, non so se ci sono sistemi più puliti..

risposto 9 anni fa
amosse
X 0 X

Ho provato anche a cambiate il tutto in

prova_balance2.php

<?php
$data_last_bal = date('Y-m-d',strtotime(date_minus2m_1std())-1);
$dipu_p=2;
$diba_p=12;
echo start_balance($dipu_p,$diba_p,$data_last_bal);

function start_balance($pu,$ba,$data)
{
require '../config.php';
require '../connect.php';
$query = "select (fin_record_debit-fin_record_credit) as fin_record_bal1 from fin_records where (fin_record_date<='$data') and (id_production_unit='$pu') and (id_bank_account='$ba')";
$result = mysql_query($query);
echo '<br>';
echo 'start_balance()-$data='.$data;
echo '<br>';
echo 'start_balance()-$pu='.$pu;
echo '<br>';
echo 'start_balance()-$ba='.$ba;
echo '<br>';
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}
while ($row = mysql_fetch_assoc($result)) 
{
$fin_record_bal2   +=$row[fin_record_bal1];
echo 'start_balance()-while-$row[fin_record_bal1]='.$row[fin_record_bal1];
echo 'start_balance()-while-$fin_record_bal2='.$fin_record_bal2;
echo '<br>';
}
return $fin_record_bal2;
}

function date_minus2m_1std()
{
$date_minus2m_1std = mktime (0,0,0,date("m")-2,date("d"),date("Y"));
$data_minus2m_1std = date('Y-m-01',$date_minus2m_1std);
return $data_minus2m_1std;
}
?>

niente da fare ottengo sempre lo stesso risultato

start_balance()-$data=2007-07-31 start_balance()-$pu=2 start_balance()-$ba=12

Se qualcuno avesse qualche idea..... :(

risposto 9 anni fa
amosse
X 0 X

Scusate funziona tutto l' errore é semplicemente nel fatto che date_minus2m_1std() restituisce '2007-07-31', e quindi quando lancio prova_balance2.php la start_balance() non restituisce alcun movimento in quanto fin_record_date<='$data_last_bal' non trova nessuno valore.

Scusate di nuovo per la svista, grazie a tutti.

Ciao

Amos

risposto 9 anni fa
amosse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda