如何根据表单中的用户输入从另一个表中插入mysql中的数据字段?

时间:2012-04-16 10:40:14

标签: php mysql sql insert

我正在开发一个系统,可以使用mysql和php将人们添加到数据库中。 我的表单的基础是管理员可以添加人员类型和人员角色,并在表单中输入详细信息时将这些应用于用户。例如,如果该系统应用于学校环境,则该人员类型可以是教师或厨师,并且该人员角色可以是父亲,因为该人员类型不排除该人员角色。我有这个系统的各种问题,因为我的系统使用MYISAM类型表时外键不会更新,但如果我使用INNODB表,我的数据输入将不起作用。我正在寻找方法,在此期间我可以使用查询来实现大学项目的工作,我的截止日期即将来临。但是我的意思是让这个系统正常工作,所以我们会在今年晚些时候寻求让它完全正常运行的方法。 我有javascript用于错误处理,以及用于防止sql注入攻击的php代码块。

当管理员输入用户时,会出现一个下拉菜单,该菜单由人员类型表中的字段填充,这由人员类型表中的 Person_Type_Value_Description 字段完成。人员类型表中的每一行都有 Person_Type_ID 。我需要一个可以找到 Person_Type_Value_Description 的查询,调用 Person_Type_ID 并将其存储在变量中,以便可以将其解析为person表中的person type id。我的表的基本布局可以从创建脚本中看到。

CREATE TABLE Person_Type(
Person_Type_ID int auto_increment NOT NULL,
Person_Type_Value_Description varchar(150) NOT NULL,
Create_Date datetime NOT NULL NOT NULL,
Modify_Date datetime NOT NULL  NOT NULL,
Archive char(1) NULL,
CONSTRAINT PK_Person_Type_ID PRIMARY KEY (Person_Type_ID)
 ) ;

...

CREATE TABLE Person(
Person_ID int auto_increment NOT NULL,
Person_Type_ID int NOT NULL,
Create_Date datetime NOT NULL ,
Modify_Date datetime NOT NULL ,
First_Name varchar(50) NOT NULL,
Surname varchar(50) NOT NULL,
DOB date NOT NULL,
Gender char(1) NOT NULL CHECK (Gender ='f' OR Gender ='m'),
Archive char(1) NULL,
Allergies varchar(200) NOT NULL,
Dietry_Requirements varchar(200) NOT NULL,
Disabilities varchar(200) NOT NULL,
Medicine_Requirements varchar(200) NOT NULL,
username varchar (30) NOT NULL,
password varchar (30) NOT NULL,
CONSTRAINT PK_Person_ID PRIMARY KEY (Person_ID),
CONSTRAINT FK_Person_Type_ID FOREIGN KEY (Person_Type_ID)
REFERENCES Person_Type (Person_Type_ID)) ;

修改

以下是我尝试过的代码。 我需要存储查询的结果,以便我可以通过insert命令将其解析为Person表。感谢您的评论。

我遇到的问题是Person表中的 Person_Type_ID 始终设置为0,因为NOT NULL命令,但是它没有根据我的查询进行更新。

// drawing the information from the Person_Type table.
$sql9 = "(SELECT Person_Type_ID
                 FROM Person_Type pt
                WHERE pt.Person_Type_Value_Description =  $Person_Type_Value_Description)";
                $result = @mysql_query($sql9);

//inserting into the person table. **All filed work except for the Person_Type_ID
$qry = "INSERT INTO Person (Person_Type_ID, Create_Date, Modify_Date, First_Name, Surname, DOB, Gender, Allergies, Dietry_Requirements, Disabilities, Medicine_Requirements, username, password) 
   VALUES('$sql9', NOW(), NOW(), '$First_Name', '$Surname', '$DOB', '$Gender', '$Allergies', '$Dietry_Requirements', '$Disabilities', '$Medicine_Requirements', '$username', '$password')" ;
    $result = @mysql_query($qry);

如何调用它以

的形式显示
<?

$persontype = array();

$qry = mysql_query("SELECT Person_Type_Value_Description FROM Person_Type ORDER BY Person_Type_ID");

while($res = mysql_fetch_array($qry)) {
$persontype[$res['Person_Type_Value_Description']] = $res['Person_Type_Value_Description'];
}

?> 


//creates the drop down
<?
function createDropdown($arr, $frm) {
foreach ($arr as $key => $value) {
echo '<option value="'.$value.'">'.$value.'</option>';
}
echo '</select>';
}
?>

管理员随后会从简单的下拉菜单中选择此项。

<td align="right"><div align="left">Person Type* </div></td>           
<td><select name="Person_Type_Value_Description" id="Person_Type_Value_Description">
 <option value="">Select One...</option>
<?php createDropdown($persontype, 'frmpersontype'); ?>
  </select>
      </td>
        </tr> 

1 个答案:

答案 0 :(得分:0)

我认为问题出在这里

// drawing the information from the Person_Type table.
$sql9 = "(SELECT Person_Type_ID
             FROM Person_Type pt
            WHERE pt.Person_Type_Value_Description =  $Person_Type_Value_Description)";
$result = @mysql_query($sql9);

//inserting into the person table. **All filed work except for the Person_Type_ID
$qry = "INSERT INTO Person 
    (Person_Type_ID, Create_Date, Modify_Date, First_Name, Surname, DOB, Gender,
     Allergies, Dietry_Requirements, Disabilities, Medicine_Requirements, 
     username,password) 
  VALUES('$sql9', NOW(), NOW(), '$First_Name', '$Surname', '$DOB', '$Gender', 
    '$Allergies', '$Dietry_Requirements', '$Disabilities', '$Medicine_Requirements', 
    '$username', '$password')" ;
$result = @mysql_query($qry);

您在$ sql9中插入实际查询而不是结果。

你需要这样的东西:

$result = @mysql_query($sql9);
$row = mysql_fetch_assoc( $result );
$personTypeID = intval( $row['Person_Type_ID'] );

//inserting into the person table. **All filed work except for the Person_Type_ID
$qry = "INSERT INTO Person 
    (Person_Type_ID, Create_Date, Modify_Date, First_Name, Surname, DOB, Gender,
     Allergies, Dietry_Requirements, Disabilities, Medicine_Requirements, 
     username,password) 
  VALUES($personTypeID etc.

作为旁注,建议不再使用mysql_系列函数。您应该使用mysqli_或PDO,最好使用预处理语句来自动转义输入。