2012-02-20 70 views
0

我有一个表,它使用$ row显示表中的所有记录。它会生成多行,因为它显示了表中的所有值。然后在表格中我创建了一个只包含一行的表单。我想使用我的查询中$行的studentnumber和subjectcode来记录单个$行的一个值。对不起,我提前感到困惑的问题和感谢。

代码:

echo "<form name=\"grades\" action=\"insert.php\" method=\"post\" onsubmit=\"javascript:return confirm('Confirm Grade Submission?');\">"; 

    echo "<td class=\"studentlist\">" . $row['studentnumber'] . "</td>"; 
    echo "<td class=\"studentlist\">" . $row['subject'] . "</td>"; 
    echo "<td class=\"studentlist\"><input type=\"text\" id= \"q1\" name=\"q1\" class=\"tbox\"></td>"; 
    echo "<td class=\"studentlist\"><input type=\"text\" id= \"q2\" name=\"q2\" class=\"tbox\"></td>"; 
    echo "<td class=\"studentlist\"><input type=\"text\" id= \"q3\" name=\"q3\" class=\"tbox\"></td>"; 

    echo "<td class=\"studentlist\"><input type=\"submit\" value=\"Submit\"></td>"; 
    echo "</form>"; 

insert.php

$studentnumber= $_POST['studentnumber']; 
$subjectcode= $_POST['subjectcode']; 

$query = ("SELECT * FROM grades WHERE studentnumber = '$studentnumber' && subjectcode = '$subjectcode'"); 
$result=mysql_query($query); 

if($result) 
    { 
    if(mysql_num_rows($result) == 1) 

     { 
     $sql="INSERT INTO grades (q1, q2, q3) 
     VALUES('$_POST[q1]','$_POST[q2]','$_POST[q3]'')"; 

      if (!mysql_query($sql,$con)) 
       { 
       die('Error: ' . mysql_error()); 
       } 
       echo "<script type='text/javascript'>alert('Grade Successfully Submitted');location.href = '../administrator/admin_home.php';</script>"; 
     } 
    } 
+0

当我按下提交按钮,它给通知:未定义指数studentnumber和subjectcode – 2012-02-20 08:48:00

+0

我已经更新了我与应协助的进一步信息的响应 - 我原以为你在你的例子中指定的变量名称存在。 – 2012-02-20 09:15:00

回答

0

首先第一件事情,你需要从表单传递studentnumber和subjectcode到处理MySQL的第二页。为此,您可以使用一些隐藏的表单字段,即代替回显studetnumber和主题的行。

echo "<td class=\"studentlist\"><input type=\"hidden\" name=\"studentnumber\" value=\" . $row['studentnumber'] . \">" . $row['studentnumber'] . "</td>"; 
echo "<td class=\"studentlist\"><input type=\"hidden\" name=\"subject\" value=\" . $row['subject'] . \">" . $row['subject'] . "</td>"; 

很难具体没有看到成绩的全表的设计,而下面会插入你试图但是插入如果studentnumber和subjectcode形成了独特的键,将错误的数据,该行已存在

$sql = "INSERT INTO grades (
    studentnumber, 
    subjectcode, 
    q1, 
    q2, 
    q3 
) VALUES (
    '".$_POST['studentnumber']."', 
    '".$_POST['subject']."', 
    '".$_POST['q1']."', 
    '".$_POST['q2']."', 
    '".$_POST['q3']."' 
)"; 

为了,如果它击中一个重复studentnumber/studentcode组合,使之更新,那么你只需要添加 “ON DUPLICATE KEY” 的语法到最后,即

$sql = "INSERT INTO grades (
    studentnumber, 
    subjectcode, 
    q1, 
    q2, 
    q3 
) VALUES (
    '".$_POST['studentnumber']."', 
    '".$_POST['subject']."', 
    '".$_POST['q1']."', 
    '".$_POST['q2']."', 
    '".$_POST['q3']."' 
) 
ON DUPLICATE KEY UPDATE 
    q1 = VALUES(q1), 
    q2 = VALUES(q2), 
    q3 = VALUES(q3)"; 

然后,这将更新q1,q2,q3,并为具有重复学号/科目组合的行指定任何值。

最后,如果你只是想忽略重复,那么以下就足够了(注意添加IGNORE)。

$sql = "INSERT IGNORE INTO grades (
    studentnumber, 
    subjectcode, 
    q1, 
    q2, 
    q3 
) VALUES (
    '".$_POST['studentnumber']."', 
    '".$_POST['subject']."', 
    '".$_POST['q1']."', 
    '".$_POST['q2']."', 
    '".$_POST['q3']."' 
)"; 
+0

谢谢!!它为我工作。 – 2012-02-20 09:46:17

相关问题