2011-12-19 10 views
2

PHPの簡単な数学で助けが必要です。私は前にこのようなことをしたことはありませんが、それを必要とする自分自身を見つける。ここに私が達成しようとしていることがあります。PHPで数学を行う

私はクラスのすべての学生のテストスコアとコメントを含む 'eval'というMySQLテーブルを持っています。

私は毎月、合計で10ポイントの4つのエリアで学生をテストし、評価します。

テーブルの行は次のようになります。

ID name  participation speaking listening writing reading comment 

1 John Smith Excellent  7   7   7  7   Teacher Comment. 

2 Jane Brown Excellent  6   7   7  6   Teacher Comment. 

3 Mike Jones Very Good  6   7   7  6   Teacher Comment. 

このデータを表のページに表示します。

私がしたいのは、ページのテーブルに追加の列を作成し、PHPを使用して4つの値(話す、聞く、書く、読む)を追加し、余分なカラム。ここで

は、MySQL

<?php 
if (!function_exists("GetSQLValueString")) { 
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{ 
    if (PHP_VERSION < 6) { 
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; 
    } 

    $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue); 

    switch ($theType) { 
    case "text": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break;  
    case "long": 
    case "int": 
     $theValue = ($theValue != "") ? intval($theValue) : "NULL"; 
     break; 
    case "double": 
     $theValue = ($theValue != "") ? doubleval($theValue) : "NULL"; 
     break; 
    case "date": 
     $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; 
     break; 
    case "defined": 
     $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; 
     break; 
    } 
    return $theValue; 
} 
} 

$colname_rsEval = "-1"; 
if (isset($_GET['group'])) { 
    $colname_rsEval = $_GET['group']; 
} 
mysql_select_db($database_sgnesldb, $sgnesldb); 
$query_rsEval = sprintf("SELECT * FROM eval WHERE `group` = %s", GetSQLValueString($colname_rsEval, "text")); 
$rsEval = mysql_query($query_rsEval, $sgnesldb) or die(mysql_error()); 
$row_rsEval = mysql_fetch_assoc($rsEval); 
$totalRows_rsEval = mysql_num_rows($rsEval); 
?> 

でテーブルを選択するためのコードであり、ここで私が前の列に表示する割合の合計が必要

<td width="12" align="center" valign="top"><?php echo $row_rsEval['ID']; ?></td> 
<td width="145" valign="top" class="darkbrownbold"><?php echo $row_rsEval['name']; ?></td> 
<td width="72" align="center" valign="top"><?php echo $row_rsEval['participation']; ?></td> 
<td width="55" align="center" valign="top" class="darkbrownbold"><?php echo $row_rsEval['speaking']; ?></td> 
<td width="53" align="center" valign="top" class="darkbrownbold"><?php echo $row_rsEval['listening']; ?></td> 
<td width="42" align="center" valign="top" class="darkbrownbold"><?php echo $row_rsEval['writing']; ?></td> 
<td width="44" align="center" valign="top" class="darkbrownbold"><?php echo $row_rsEval['reading']; ?></td> 
<td width="25" align="center" valign="top">&nbsp;</td> 
<td width="350" valign="top"><?php echo nl2br($row_rsEval['comment']); ?></td> 
<td width="45" align="center" valign="top" class="darkbrownbold"><?php echo $row_rsEval['top5']; ?></td> 

ページのレイアウトのためのコードです「コメント」

ありがとうございました。

+1

:-)クエリでescape your valuesすることを忘れないでください... – ManseUK

+0

とSQLあまりに – ajreal

+0

タイトルを変更してください! – TMS

答えて

0

まずあなたは以下のクエリを使用してMySQLで直接行うことができ、列total_percentageを追加します。

UPDATE `eval` SET `percentage`=((`speaking`+ `listening` + `writing` + `reading`)/0.4) 
+0

正確に保管しなければならないデータテーブルに余分な列を追加する必要はなく、単にDBクエリを使用して数式を実行します –

+0

しかし、Askerは追加の列を作成したかったのです! – Ananth

+0

彼は自分の出力ページに特別な列を作成したいと思っています。特にデータベース自体ではありません。 –

0

を使用すると、異なる変数にスコアを格納していると仮定すると、あなたはこのような何かを行うことができます。

$total = $speaking + $listening + $writing + $reading; 
$maxTotal = 40; 
$percentage = round($total*100.0/$maxTotal); 

そして、各生徒の$ percentageの値を表示します。

6

使用すると、このSQLクエリ

SELECT id, 
     name, 
     participation, 
     speaking, 
     listening, 
     writing, 
     reading, 
     (speaking + listening + writing + reading)/40 * 100 AS percentagetotal, 
     comment 
    FROM eval 
+0

ああ、明らかにそれは良いアイデアです - テーブルを変更しないで、ただの計算を実行します。 +1。ここでの唯一の欠点は、多くの繰り返し選択では処理オーバーヘッドが増えることですが、増加はそれほど重要でないほどには最小限です。 – DaveRandom

0

ように私は私はあなたの平均値を得ることができます願っています。 あなたは4項目があり、それぞれが最大10できるように、あなたの最大値は、あなたがこのような何かをする必要が今40 です:

<?php 
$max = 40; 
$current = $speaking + $listening + $writing + $reading; 
$percentage = (100 * $current)/40; 
echo(number_format($percentage,'2','.','')); // echo with 2 digits after the point. 
?> 

あなたに必要な値が$percentageです。

0

機能get_percentage_grade()がしたいビットです

function get_percentage_grade ($speaking, $listening, $writing, $reading, $possibleTotal = 40) { 
    return round((($speaking + $listening + $writing + $reading)/$possibleTotal) * 100); 
} 

$name = 'Dave Random'; 
$participation = 'Excellent'; 
$speaking = 7; 
$listening = 7; 
$writing = 7; 
$reading = 7; 
$comment = 'Teacher Comment.'; 
$percentage = get_percentage_grade($speaking,$listening,$writing,$reading); 

$query = " 
    INSERT INTO eval 
    (name, participation, speaking, listening, writing, reading, percentage, comment) 
    VALUES 
    ('$name', '$participation', '$speaking', '$listening', '$writing', '$reading', '$percentage', '$comment') 
"; 

(あなたが行が挿入されたときにこの計算をしたいと仮定)。これは、話すこと、聞くこと、書くこと、読むこと(数字、整数または浮動小数点数)、可能な限り最大のスコアを表すオプションの「可能な合計」の5つの引数を取ります。これは、見ての通り、デフォルトは40です。関数の定義を変更するだけで、このデフォルトを変更できます。パーセンテージスコアを返します。最も近い整数に丸められます。

そして、このテーブルを表示するには、あなたの現在のPHPコードを追加してください