Funzione che risulta sempre 0

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

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...
 
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
 
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....
 
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
 
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...
 
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">
 
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....
 
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 />"; 
}
//........
?>
 
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....
 
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...
 
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...
 
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 />"; 
}}
?>
 
Ho notato che la variabile prezzosconto sta nel ciclo while quindi è impossibile che la valorizzi mai credo... Come posso fare???
 
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?
 
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...
 
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()
 
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:
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.
 
uhm, Borgo, come possiamo fare per sistemare? posso passare in sessione un array?
 

Discussioni simili