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 10 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 10 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 10 anni fa
amosse
X 0 X

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

risposto 10 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 10 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 10 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 10 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 10 anni fa
amosse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda