PHP& MySQL更新数据库问题

时间:2010-01-14 07:55:04

标签: php mysql

我正在尝试更改我的评级系统,之前只使用过一个表,但现在我正在更改它以使用多个表格而且我真的不知道如何 更新或插入新的评级到数据库,并想知道如何使用我的MySQL表结构?

另外,我如何通过将新代码调整为我想要更改的当前PHP代码来实现此目的。

首先让我解释一下,当学生评价自己的老师时,我们的表格是什么,我列出了表格中的内容。 以下示例可让您更好地了解我正在尝试做的事情。学生只能在那里为教师评分一次。

我提供了两个应该更新的MySQL表,如下所示。

我的MySQL表

CREATE TABLE teachers_grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
grade_id INT UNSIGNED NOT NULL,
teachers_id INT UNSIGNED NOT NULL,
student_id INT UNSIGNED NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id)
);


CREATE TABLE grades (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
letter_grade VARCHAR(2) NOT NULL,
grade_points FLOAT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);

数据库将保留什么。

teachers_grades

id  grade_id    teachers_id     student_id     date_created
1       3       2               32            2010-01-23 04:24:51
2       1       32              3              2010-01-23 12:13:58
3       2       32              103            2010-01-23 12:24:45

级别

id  letter_grade    points
1           A+      10
2           D       3
3           B       5

这是旧的PHP代码。

// function to insert rating
function rate(){
    $text = strip_tags($_GET['rating']);
    $update = "update vote set counter = counter + 1, value = value + ".$_GET['rating']."";

    $result = mysql_query($update); 
    if(mysql_affected_rows() == 0){
        $insert = "insert into vote (counter,value) values ('1','".$_GET['rating']."')";
        $result = mysql_query($insert); 
    }
}

旧桌子。

 CREATE TABLE vote (
 `counter` int(8) NOT NULL default '0',
 `value` int(8) NOT NULL default '0'
 );

2 个答案:

答案 0 :(得分:0)

首先,在插入时执行mysql_escape_string到参数:

mysql_real_escape_string($_GET['rating']);

第二

你需要获取所有参数(来自GET或POST)并将其插入数据库, teacher_id ....

现在我只看到评级。

答案 1 :(得分:0)

你的旧桌子有点令人困惑,因为它似乎只评价了一位教师或整个教师。

现在看来您的新设计流程需要您: - 商店评级和教师平均值 - 跟踪学生的历史评分

评级表应该看起来像

表:评级

rating_id student_id teacher_id grade_id date_created
 1         101         21         1      2010-01-23 04:24:51
 2         102         21         1      2010-01-23 04:26:51
 3         102         22         2      2010-01-23 04:28:51
 4         103         24         1      2010-01-23 04:44:51

您的代码用法:

$rating_value = $_GET['rating']; // Remember to sanitize your inputs
$student_id = $_GET['student_id'];
$teacher_id = $_GET['teacher_id'];
rate_a_teacher($teacher_id, $student_id, $rating_value);

你的方法:

function rate_a_teacher($teacher_id, $student_id, $rating_value)
{
    // Find the corrosponding to specified rating value
    $grade_id = find_grade_id($rating_value); //TODO

    $sql = "
        INSERT INTO rating
            ('student_id', 'teacher_id', 'grade_id', 'date_created')
        VALUE 
            ($student_id, $teacher_id, $grade_id, NOW);
    ";

    mysql_query($sql); 
}

我跳过find_grade_id()的实施,让你自己填写。

将计算值拆分为单个记录的目的是让您可以开始做有趣的报告, 像这样:

查找过去3个月内每位教师的平均评分值:

SELECT teacher_id, (SUM(points)/COUNT(rating_id)) AS average_score
FROM rating
LEFT JOIN grades ON grades.id = rating.grade_id
WHERE date_created > SUBDATE(NOW(), INTERVAL 3 MONTH)
GROUP BY teacher_id