Funzione che risulta sempre 0

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ciao a tutti,
ho fatto una funzione per il calcolo di alcune variabili ma le variabili valgono sempre 0...

Il codice è semplice ed è il seguente:

PHP:
<?php
if(isset($_POST['subtotale'])){
$prezzosconto=$_POST['prezzosconto'];
$prezzo=$_POST['prezzo'];
$scontoperc=$_POST['scontoperc'];
$scontoval=$_POST['scontoval'];
$quantita=$_POST['quantita'];
if($quantita == null){  
$quantita=1;
}
echo "il prezzo e: " ;var_dump($prezzo);
echo "la quantita e:";var_dump($quantita);
echo "lo scontoval e:";var_dump($scontoval);
echo "lo scontoperc e:";var_dump($scontoperc);
echo "il prezzosconto e:";var_dump($prezzosconto);
$conta=count($prezzo);
echo "il conteggio è :".$conta."";
         for ($i=0;$i<$conta;$i++){ 
     if($scontoperc[$i] == null && $scontoval[$i] == null){
    $scontoperc[$i]=0;
    $scontoval[$i]=0;
    $prezzosconto[$i]=$prezzo[$i]*$quantita[$i];
                                                          }
														  
                            if($scontoperc[$i] == null){
                            $scontoperc[$i]=0;
                            $prezzosconto[$i] = (($prezzo[$i]*$quantita[$i]) - $scontoval[$i]);
                                                       }elseif($scontoval[$i] == null)                   {
                              $scontoval[$i]=0;
                              $percentuale[$i]=(($prezzo[$i]*$scontoperc[$i])/100);
                              $prezzosconto[$i] = ($prezzo[$i] - $percentuale[$i]) ;
                              $prezzosconto[$i] = ($prezzosconto[$i] * $quantita[$i]);
                                }

                                                        }
echo "il prezzo scontato è:". $prezzosconto[$i] ."";
                                }

?>

Come vedete ho messo dei var_dump(); e degli echo per vedere se li valorizza, ed effettivamente vengono valorizzati :

Codice:
il prezzo e: array(4) { [0]=> string(3) "139" [1]=> string(3) "156" [2]=> string(3) "139" [3]=> string(3) "156" } la quantita e:array(4) { [0]=> string(1) "1" [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "1" } lo scontoval e:array(4) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" } lo scontoperc e:array(4) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" } il prezzosconto e:array(4) { [0]=> string(0) "" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(0) "" } il conteggio è :4il prezzo scontato è:
è un esempio con 4 righe chiaramente questo... E come vedete il prezzosconto non viene visualizzato...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
se non ho capito male i nomi delle variabili, prova così
PHP:
<?php
$prezzo =array('100', '200','300', '400','500');
$quantita=array('2','3','4','5','6');
$scontoval=array('5','','7','','8');
$scontoperc=array('','0.1','0.2','','0.3');
$conta=count($prezzo);
for ($i=0;$i<$conta;$i++){ 
	var_dump($prezzo[$i]); echo "<br >";
	var_dump($quantita[$i]); echo "<br >";
	var_dump($scontoval[$i]); echo "<br >";
	var_dump($scontoperc[$i]); echo "<br >";
	
	if($scontoperc[$i] == NULL && $scontoval[$i] == NULL){
		//non c'è sconto
		$scontoperc[$i]=0;
		$scontoval[$i]=0;
		$prezzosconto[$i]=$prezzo[$i]*$quantita[$i];
	}elseif($scontoperc[$i] == NULL && $scontoval[$i] != NULL){
		//non c'e la percentuale di sconto ma il valore (totale?) dello sconto
		$scontoperc[$i]=0;
		$prezzosconto[$i] = (($prezzo[$i]*$quantita[$i]) - $scontoval[$i]);
	}elseif($scontoperc[$i] != NULL){
		$prezzosconto[$i] =$prezzo[$i] - $prezzo[$i]*$scontoperc[$i];
		$prezzosconto[$i] = $prezzosconto[$i] * $quantita[$i];
	}
	echo "per ".$prezzo[$i]." il prezzo scontato è: ". $prezzosconto[$i] ."<br />"; 
}
?>
questo è l'output
string(3) "100"
string(1) "2"
string(1) "5"
string(0) ""
per 100 il prezzo scontato è: 195
string(3) "200"
string(1) "3"
string(0) ""
string(3) "0.1"
per 200 il prezzo scontato è: 540
string(3) "300"
string(1) "4"
string(1) "7"
string(3) "0.2"
per 300 il prezzo scontato è: 960
string(3) "400"
string(1) "5"
string(0) ""
string(0) ""
per 400 il prezzo scontato è: 2000
string(3) "500"
string(1) "6"
string(1) "8"
string(3) "0.3"
per 500 il prezzo scontato è: 2100
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
scusa ma come recuperi i valori post? inoltre sarò ignorante io, ma cosa significano quei numeri dentro le parantesi dell'array? non puoi sapere cosa contiene la variabile...

illuminami pls....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
non ho usato un form, i numeri dentro gli array sono per fare una prova, sono numeri messi a caso solo per vedere se il calcolo funzionava
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
uhm si ma io il problema lo ho quando uso i dati prelevati... la stessa pagina messa su una singola pagina con 4 dati passati da form funziona...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
se mi dici che il var_dump delle variabili
$prezzosconto=$_POST['prezzosconto']; ecc...
ti da quel risultato che hai postato non vedo perche non dovrebbe funzionare, se hai chiamato i campi di input name="prezzosconto[]" quello che ho scritto io è simile
al ricevimento col $_POST
l'unico problema potrebbe essere che ti sfalza gli arrai se non riempi un campo es quello dello sconto
mette che invii comunque, se non riempito, di default il valore 0 (e di conseguenza cambia gli if del calcolo)

es
<input type"text" name ="scontoperc[]" value="0">
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
la parte del form si autocostruisce... ti posto il codice :


PHP:
<?php
if(isset($result))
{
    while($righi=mysql_fetch_array($result))
$barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']);    //creo un nuovo array dove salvo per ogni barcode, i dati.
$barcodeart_da_mostrare = array();
if(isset($_POST['barcodeart_vecchi']))
$barcodeart_da_mostrare = $_POST['barcodeart_vecchi'];    //metto gli elementi vecchi realmente mostrati
if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
 $queryart =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");  
    //se $esiste == 0 non cè
if(mysql_num_rows($queryart))//esiste
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
}
foreach($barcodeart_da_mostrare as $k)
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$k.'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$barcodeart[$k]['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$barcodeart[$k]['Vendita'].'" ></td> 
        <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td> 
        <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td> 
        <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6" value="'.$prezzosconto[$i].'"></td> 
				<td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'.$barcodeart[$k]['Fornitore'].'"></td> 
        <td><input type="hidden" name="codice[]" id="codice" size="100" value="'.$barcodeart[$k]['Codice'].'"></td> 
		<td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'.$barcodeart[$k]['Reparto'].'"></td> 
		<td><input type="hidden" name="UM[]" id="UM" size="100" value="'.$barcodeart[$k]['UM'].'"></td> 
        </tr> 
        ';
}
?>

Infatti gli if vedono se è = null quindi senza inserimento....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ecco li metti
PHP:
<?php
//...
	echo '
        ................
		<td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3" value="0"></td> 
        <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4" value="0"></td>
		..............
		';
//....
?>
poi modifichi gli if
PHP:
<?php
if(isset($_POST['subtotale'])){
$prezzosconto=$_POST['prezzosconto'];
$prezzo=$_POST['prezzo'];
$scontoperc=$_POST['scontoperc'];
$scontoval=$_POST['scontoval'];
$quantita=$_POST['quantita'];
if($quantita == null){ //a che ti serve questa in quantita hai già messo value="1" 
$quantita=1;
} 
$conta=count($prezzo);
for ($i=0;$i<$conta;$i++){ 
    if($scontoperc[$i] == "0" && $scontoval[$i] == "0"){
        //non c'è sconto
        //$scontoperc[$i]=0;//queste due non servono più
        //$scontoval[$i]=0;
        $prezzosconto[$i]=$prezzo[$i]*$quantita[$i];
    }elseif($scontoperc[$i] == "0" && $scontoval[$i] != "0"){
        //non c'e la percentuale di sconto ma il valore (totale?) dello sconto
        //$scontoperc[$i]=0;
        $prezzosconto[$i] = (($prezzo[$i]*$quantita[$i]) - $scontoval[$i]);
    }elseif($scontoperc[$i] != "0"){
        $prezzosconto[$i] =$prezzo[$i] - $prezzo[$i]*$scontoperc[$i];
        $prezzosconto[$i] = $prezzosconto[$i] * $quantita[$i];
    }
    echo "per ".$prezzo[$i]." il prezzo scontato è: ". $prezzosconto[$i] ."<br />"; 
}
//........
?>
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
ora sembra andare... ma non capisco perche se metto prezzo 139 e sconto perc 10 mi dice -1251 :|
Inoltre non mi mette dentro il campo prezzo scontato il prezzo che si trova....
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ho risolto la questione - , bastava invertire la formula... Ora però non capisco come fare in modo che ci sia la virgola....
E perche non mette dentro prezzo scontato la variabile che si trova...
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Risolto anche la questione dell'arrotandamento, mi avevi cambiato le formule, ed erano errate....

Mi rimane solo da capire come inserire nei vari righi il prezzo finale...
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Per completezza di cose posto l'intero script:

PHP:
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto" value=""></td>
</tr>
</table> 
<?php
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new']))
    $queryart = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';    //se i barcode sono interi, si possono evitare gli apici \'
else if(isset($_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $queryart = 'SELECT * FROM articoli WHERE 0 ';    //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

if(isset($_POST['barcodeart_vecchi']))
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $queryart .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' ';    //se i barcode sono interi, si possono evitare gli apici \'
if(isset($queryart))    
    $result = mysql_query($queryart) or die('Query failed: ' . mysql_error() . "<br />");
?> 
<table> 
<?php
if(isset($result))
{
    while($righi=mysql_fetch_array($result))
$barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']);    //creo un nuovo array dove salvo per ogni barcode, i dati.
$barcodeart_da_mostrare = array();
if(isset($_POST['barcodeart_vecchi']))
$barcodeart_da_mostrare = $_POST['barcodeart_vecchi'];    //metto gli elementi vecchi realmente mostrati
if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
 $queryart =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");  
    //se $esiste == 0 non cè
if(mysql_num_rows($queryart))//esiste
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
}
foreach($barcodeart_da_mostrare as $k)
        echo '
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$k.'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="32" value="'.$barcodeart[$k]['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$barcodeart[$k]['Vendita'].'" ></td> 
        <td><input type="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3" value="0"></td> 
        <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4" value="0"></td> 
        <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6" value="'.$prezzosconto[$i].'"></td> 
				<td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'.$barcodeart[$k]['Fornitore'].'"></td> 
        <td><input type="hidden" name="codice[]" id="codice" size="100" value="'.$barcodeart[$k]['Codice'].'"></td> 
		<td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'.$barcodeart[$k]['Reparto'].'"></td> 
		<td><input type="hidden" name="UM[]" id="UM" size="100" value="'.$barcodeart[$k]['UM'].'"></td> 
        </tr> 
        ';
} //chiusa la while proviamo...
if(isset($_POST['subtotale'])){
$prezzosconto=$_POST['prezzosconto'];
$prezzo=$_POST['prezzo'];
$scontoperc=$_POST['scontoperc'];
$scontoval=$_POST['scontoval'];
$quantita=$_POST['quantita']; 
$conta=count($prezzo);
for ($i=0;$i<$conta;$i++){ 
    if($scontoperc[$i] == "0" && $scontoval[$i] == "0"){
        //non c'è sconto
        //$scontoperc[$i]=0;//queste due non servono più
        //$scontoval[$i]=0;
        $prezzosconto[$i]=$prezzo[$i]*$quantita[$i];
    }elseif($scontoperc[$i] == "0" && $scontoval[$i] != "0"){
        //non c'e la percentuale di sconto ma il valore (totale?) dello sconto
        //$scontoperc[$i]=0;
        $prezzosconto[$i] = (($prezzo[$i]*$quantita[$i]) - $scontoval[$i]);
    }elseif($scontoperc[$i] != "0"){
       $percentuale[$i]=(($prezzo[$i]*$scontoperc[$i])/100);
       $prezzosconto[$i] = ($prezzo[$i] - $percentuale[$i]) ;
       $prezzosconto[$i] = ($prezzosconto[$i] * $quantita[$i]);
    }
//$formatted[$i] = sprintf("%01.2f", $prezzosconto[$i]); arrotonda a 2 compreso lo 0
    echo "per ".$prezzo[$i]." il prezzo scontato è: ". $prezzosconto[$i] ."<br />"; 
}}
?>
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
Ho notato che la variabile prezzosconto sta nel ciclo while quindi è impossibile che la valorizzi mai credo... Come posso fare???
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
dici qui?
<td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6" value="'.$prezzosconto[$i].'"></td>
se si infatti non mi sembra che possa venir valorizzata, prima non la vedo
cosa dovrebbe rappresentare? il costo dell'articolo?
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
si esattamente... dovrebbe essere il risultato del tasto subtotale... e dovrebbe valorizzare quella variabile cosi nella riga ci sia il prezzo scontato finale... altrimenti se non ci sono sconti dovrebbe valere come il prezzo...
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
quando estrai l'articolo con il barcode non c'è il suo prezzo?
per caso il suo prezzo è 'Vendita'=>$righi['Vendita'] ?
ti dico questo perchè nelle caselle di input tu non hai ancora definito lo sconto o il valore di sconto, il prezzo quindi dovrebbe apparire come prezzo unitario di base.
poi se inserisci o lo sconto o il valore di sconto calcoli il prezzo finale
se è così
1) passerei il prezzo calcolato in sessione
PHP:
<?php
//..........
  }
//$formatted[$i] = sprintf("%01.2f", $prezzosconto[$i]); arrotonda a 2 compreso lo 0
    $_SESSION['prezzo'][$i]=$prezzosconto[$i];
	echo "per ".$prezzo[$i]." il prezzo scontato è: ". $prezzosconto[$i] ."<br />"; 
}}
?>
2) prima delle caselle di input
PHP:
<?php
//.......
foreach($barcodeart_da_mostrare as $k)
        if(isset($_SESSION['prezzo'][$i])){
			$prezzosconto[$i]=$_SESSION['prezzo'][$i];
		}else{
			$prezzosconto[$i]=$prezzo_base[$i];//qui non so se hai la possibilità di ricavare questa
		}
		echo ' 
		......
		';
//......
?>
ricordati che se usi le sessioni la prima istruzione deve essere session_start()
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
uhm avevo pensato anche io alle sessioni... ma posso avere piu sessioni contemporanee per la stessa variabile??? Perchè a me ogni eventuale riga di inserimento è un prezzo sconto in sessione... non so se mi spiego.....

Nel senso.. se cerco 4 barcode avrò:

$_SESSION['prezzo'] 1
$_SESSION['prezzo'] 2
$_SESSION['prezzo'] 3
$_SESSION['prezzo'] 4
 
Ultima modifica:

Fez Vrasta

Utente Attivo
11 Mag 2013
409
0
0
gli array son fatti apposta

edit: comunque da quanto ho capito basta che modifico lato client il prezzo e quello verrà passato allo script PHP e potrò farmi spedire le cose gratuitamente, figo.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
uhm, Borgo, come possiamo fare per sistemare? posso passare in sessione un array?
 
Discussioni simili
Autore Titolo Forum Risposte Data
M funzione mysql che ritorna i microsecondi a partire dal 1-1-1970 MySQL 3
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
D PHP:funzione che opera una query su argomento PHP 8
G Funzione che resta in ascolto per una chiamata esterna Javascript 1
Shyson Modificare funzione che aggiorna la pagina PHP 0
J Funzione js che da errore Javascript 3
Shyson Funzione che stampa data ultimo aggiornamento del sito (non della pagina) PHP 4
D Bottone che svolge funzione nella stessa pagina Javascript 9
M Chiamata di una funzione che contenga un array PHP 13
G funzione che su locale funziona ma su remoto no PHP 1
O capire che funzione è PHP 2
D funzione AJAX che ricarica dei campi select Ajax 3
G contextmenu e funzione che lo attiva Javascript 1
G Funzione che calcola la somma Javascript 7
D Funzione javascript che pulisca un campo input Javascript 0
G funzione che cambia pagina al click Ajax 6
B Codice che disabilita la funzione di Copia Schermo? Javascript 1
X Php e funzione che restituisce byte PHP 2
T funzione che crea link e lo inserisce nell'input Javascript 1
M funzione che comunica titolo di una pagina ASP.NET 2
G funzione pari e dispari che non va Javascript 5
V funzione che esegue query PHP 9
G Funzione che mi dia i giorni della settimana PHP 2
R Funzione che converte in caratteri orientali PHP 3
C funzione che non funziona .... Javascript 4
C funzione che ritorna html di un url? Javascript 3
P Implementazione funzione FileReader Javascript 0
P Funzione copia multipla. Javascript 2
P Funzione jQuery Ajax invio file a php jQuery 1
A Funzione read URL PHP 6
F Funzione Glob - ricerca file contenente una parola PHP 1
A Mail con funzione mail() riconosciute come spam PHP 9
M Utilizzare la funzione mysql_num_rows() in PHP 5 PHP 3
A funzione iconv () non mi funziona PHP 4
D Come usare funzione php PHP 6
Y verificare condizione dopo esecuzione della funzione Programmazione 0
IClaude Funzione Javascript Javascript 8
A Funzione share come modificarla Facebook 0
L funzione onclik con seno e coseno non va Javascript 3
L funzione onclick non va Javascript 26
G modifica corretta funzione da eregi() a preg_match() PHP 3
Shyson Modificare funzione php PHP 15
L pdo (stampare un valore con ritorno a funzione) PHP 0
elpirata Funzione conversione da minuti in ore Javascript 0
@ [MS Access] Funzione Iif..is null... Database 0
F Funzione deprecata in PHP7 PHP 1
G [MS Access] Funzione ARROTONDA non definita nell'espressione MS Access 1
max1974 [Javascript] Funzione Errata procedura Javascript 2
pjtertdj Visualizzazione dati in php da mysql con funzione matematica in javascript PHP 1
Domenico_Falco1 Associare una stessa funzione get a due eventi a.click con classi differenti Ajax 6

Discussioni simili