2013-06-28 19 views
1
<?php 

include 'dbconnection.php'; 

$Days=0; $Kg=0.00; $Wage=0.00; 
$Rate=0.00; $KgDivDays=0.00; $ExtraKgs = 0.00; 
$WageExtraKgs=0.00; $TotalWages=0.00; 
$BalanceWage=0.00; $EightPerc=0.00; $TwelvePerc=0.00; $ThreePerc=0.00; 
$Advances=0.00; $FestAdvances=0.00; 

//execute the SQL query and return records 
$result = mysql_query("SELECT EmployeeName,DailyRate FROM employees"); 


//fetch the data from the database 
try{ 
$i = 0; 
while ($row = mysql_fetch_array($result)) { 
    echo "<tr><td>".$row{'EmployeeName'}."</td>"; 
    $Rate=$row{'DailyRate'}; 
    //echo "<td>".$Rate."</td>"; 
    //echo "<td style = 'display:none'>".$row{'DailyRate'}."</td>"; 
    //echo $Rate; 
    echo "<td><input type='text' name='Days' id='Days".$i."' onChange='CalcWage(".$i.");'/></td>"; 
    echo "<td id='Wage".$i."'>".$Wage."</td>"; 
    echo "<td><input type='text' name='Kg' id='Kg".$i."' onChange='CalcAmount(".$i.");'/></td>"; 
    echo "<td id='KgDivDays".$i."'>".$KgDivDays."</td>"; 
    echo "<td id='ExtraKgs".$i."'>".$ExtraKgs."</td>"; 
    echo "<td id='WageExtraKgs".$i."'>".$WageExtraKgs."</td>"; 
    echo "<td id='TotalWages".$i."'>".$TotalWages."</td>"; 
    echo "<td id='EightPerc".$i."'>".$EightPerc."</td>"; 
    echo "<td id='TwelvePerc".$i."'>".$TwelvePerc."</td>"; 
    echo "<td id='ThreePerc".$i."'>".$ThreePerc."</td>"; 
    echo "<td><input type='text' name='Advances' id='Advances".$i."'/></td>"; 
    echo "<td><input type='text' name='FestAdvances' id='FestAdvances".$i."' onChange='CalcBalanceWage(".$i.");'/></td>"; 
    echo "<td id='BalanceWage".$i."'>".$BalanceWage."</td>"; 
    $i++; 
} 
} 
catch(Exception $e) 
{echo "error".$e;} 
?> 

<script type="text/javascript"> 

function CalcWage(i){ 
    var Days=document.getElementById('Days'+i).value; 
    var php_rate = "<?php echo $Rate; ?>"; 
    //alert(php_rate); 
    var Wage=parseFloat(Days*php_rate); 
    document.getElementById('Wage'+i).innerHTML= Wage; 
    return Wage; 
} 

function CalcAmount(i){ 
    var Kg=document.getElementById('Kg'+i).value; 
    var Days=document.getElementById('Days'+i).value; 
    var KgDivDays = parseFloat(Days*4); 
    document.getElementById('KgDivDays'+i).innerHTML= KgDivDays; 
    var ExtraKgs=Kg-KgDivDays; 
    document.getElementById('ExtraKgs'+i).innerHTML= ExtraKgs; 
    var WageExtraKgs=ExtraKgs*50; 
    document.getElementById('WageExtraKgs'+i).innerHTML= WageExtraKgs; 
    var BasicSal = CalcWage(i); 
    var TotalWages= BasicSal + WageExtraKgs; 
    document.getElementById('TotalWages'+i).innerHTML= TotalWages; 
    var EightPerc= parseFloat(BasicSal * 0.08); 
    document.getElementById('EightPerc'+i).innerHTML= EightPerc; 
    var TwelvePerc= parseFloat(BasicSal * 0.12); 
    document.getElementById('TwelvePerc'+i).innerHTML= TwelvePerc; 
    var ThreePerc= parseFloat(BasicSal * 0.03); 
    document.getElementById('ThreePerc'+i).innerHTML= ThreePerc; 
    return TotalWages; 
} 

function CalcBalanceWage(i){ 
    var Advances=parseFloat(document.getElementById('Advances'+i).value); 
    var FestAdvances=parseFloat(document.getElementById('FestAdvances'+i).value); 
    var TotWage = CalcAmount(i); 
    var BasSal = CalcWage(i); 
    var Deductions = parseFloat(Advances+FestAdvances+(BasSal*0.08)); 
    var BalanceWage=parseFloat(TotWage-Deductions); 
    document.getElementById('BalanceWage'+i).innerHTML= BalanceWage; 
    return BalanceWage; 
} 

</script> 

<?php 
//close the connection 
mysql_close($dbhandle); 
?> 

問題:我有一個僱員的數據庫表,我在這裏查詢以獲取員工姓名和他們各自的日常費用。在我的桌子上,我每天爲3名員工提供500,600和600的費率。當我在while循環中迴應各自的費率時,它會針對每位員工顯示正確的值。然而,當我乘以天時,它似乎總是乘以600(儘管我的分貝中的第一個值是500)。感謝您能否指出我出錯的地方。在php中乘法的問題

+0

看看輸出到瀏覽器的源代碼。很確定'php_rate'是600. – deceze

+0

你可以將代碼縮減到最小的測試用例,它顯示你正面臨的問題? – Basic

+2

你爲什麼混合JavaScript和PHP邏輯?分離成.js文件以便維護。 –

回答

2

當然你得到php_rate = 600

最後一次迭代在您的循環中生成$Rate = 600 ;。所以你只使用變量的最後一個值。

您必須將您的費率存儲在數組中並使用它們,或者只需在while循環內進行乘法運算。

另一種選擇:傳遞速率作爲函數參數。

onClick = 'CalcWage({$i}, {$Rate});' 

function CalcWage(i, php_rate){ 
    var Days=document.getElementById('Days'+i).value; 
    //var php_rate = "<?php echo $Rate; ?>"; 
    //alert(php_rate); 
    var Wage=parseFloat(Days*php_rate); 
    document.getElementById('Wage'+i).innerHTML= Wage; 
    return Wage; 
} 

另外,使用try - catch塊有什麼問題?你想抓住什麼異常? mysql_fetch_array不會拋出任何。

更多建議:

  • 使用方括號訪問陣列數據。 $array[$i]等。
  • 請勿使用mysql_*,否則不推薦使用。 mysqli_*PDO現在是你的朋友。
  • 變量名稱應以小寫字母開頭。 $rate,$wage(在JS中也是如此)
  • 當連接一個字符串時,你不必將它分解成幾部分。你可以把這樣的變量:echo "Look, I am so usable here! Name: {$variable}" ;
+0

非常感謝您的建議。我一定會考慮這些。我是PHP編程新手,你的建議肯定會對我有所幫助。此外,我更新了我的代碼並正常工作。再次感謝。 :-) – user2527186