科目:有20个选项,自选5个。
班级:只能选一个。然后自选的这个5个科目和班级会被写进数据库。就是要实现这么一个简单的功能,我虽然做出来了,但是觉得我做的不太合适。我现在把科目和班级分成了两个表。相等于有两次insert,两次insert的id是AUTO_INCREMENT。所以理论上他们所对应的id也应该是能对上号的。但是显然这样很不合理。其次,这样写的话实际上insert科目表的时候是把这20个都写进去了,只不过已选中的就把值写进去了,没选择的写进去的是空。然后在输出的都是也是把这20个全部输出,只不过有的是空所以最后只会看到有5个值输出,但是实际上却输出了20个,只不过另外15个是空罢了。
<?php
if(isset($_POST['submit'])){
$subjects_sql = "insert into subjects (`subjects_01`,`subjects_02`,`subjects_03`,`subjects_04`,`subjects_05`,`subjects_06`,`subjects_07`,`subjects_08`,`subjects_09`,`subjects_10`,`subjects_11`,`subjects_12`,`subjects_13`,`subjects_14`,`subjects_15`,`subjects_16`,`subjects_17`,`subjects_18`,`subjects_19`,`subjects_20`) values('$_POST[subjects_01]','$_POST[subjects_02]','$_POST[subjects_03]','$_POST[subjects_04]','$_POST[subjects_05]','$_POST[subjects_06]','$_POST[subjects_07]','$_POST[subjects_08]','$_POST[subjects_09]','$_POST[subjects_10]','$_POST[subjects_11]','$_POST[subjects_12]','$_POST[subjects_13]','$_POST[subjects_14]','$_POST[subjects_15]','$_POST[subjects_16]','$_POST[subjects_17]','$_POST[subjects_18]','$_POST[subjects_19]','$_POST[subjects_20]')";
$class_sql = "insert into class (`class_01`,`class_02`,`class_03`,`class_04`,`class_05`,`class_06`,`class_07`,`class_08`,`class_09`,`class_10`,`class_11`,`class_12`,`class_13`,`class_14`,`class_15`,`class_16`) values('$_POST[class_01]','$_POST[class_02]','$_POST[class_03]','$_POST[class_04]','$_POST[class_05]','$_POST[class_06]','$_POST[class_07]','$_POST[class_08]','$_POST[class_09]','$_POST[class_10]','$_POST[class_11]','$_POST[class_12]','$_POST[class_13]','$_POST[class_14]','$_POST[class_15]','$_POST[class_16]')";
if(mysql_query($subjects_sql) and mysql_query($class_sql)){
  echo "<script>alert('提交成功');location.href='index.php';</script>";
  }else{
  echo "<script>alert('提交失败');location.href='index.php';</script>";
  }
}
?>

解决方案 »

  1.   

    不太明白你的需求 要是我 我会这样子做  建一个科目表
    选择的话是保存科目表的id 以字符串的形式 如 1,2,3 选择的班级也保存同一个表
    显示选择科目时 select * from 科目表 where id in(1,2,3)
      

  2.   

    三个表: 
      科目表:
    id
    name班级:
    id
    name选修表:
    id 
    科目ID (存科目id eg:1,2,3)             
    班级ID (存班级id)
      

  3.   

    你的意思是统计科目的时候从科目表里面取数据,统计班级的时候从班级表里面取数据。取每组信息的时候就从选修表表里面取数据是吗?这样的话还是一次提交之后insert三个表是这个意思吗?
    那是不是意味着我还要insert科目的话还是要insert20个字段,只不过有的字段为空,有的有值?
      

  4.   

    这样做的话确实省事了点。那我怎么去判断是不是正好5个呢?怎么去判断有几个post的值?
      

  5.   

    用php判断post了几个值不难吧。