2012-04-16 76 views
2

我正在开发一个系统,可以使用mysql和php将人员添加到数据库中。 我的表单的基础是管理员可以添加人员类型和人员角色,并且当他们的详细信息输入到表单中时,这些应用于用户。例如,如果将此系统应用于学校环境,则人员类型可以是教师或厨师,并且人员角色可以是父级,因为人员类型不排除人员角色。我有这个系统的各种问题,因为外键不会更新,因为我的系统使用MYISAM类型表,但是如果我使用INNODB表,我的数据输入将不起作用。我正在寻求一种方法,让我可以在此期间使用查询来像大学项目一样工作,我的截止日期即将到来。然而,我的意思是让这个系统正常工作,所以会在今年晚些时候设法让它充分发挥作用。 我有JavaScript的错误处理的地方,和PHP代码块,以帮助防止SQL注入攻击。如何根据表单中的用户输入从另一个表中插入数据字段?

当管理员输入用户,有一个下拉这是由人型表中的字段填入菜单,这是由人型表Person_Type_Value_Description场进行。人员类型表中的每一行都有一个Person_Type_ID。我需要一个能够找到Person_Type_Value_Description的查询,请致电Person_Type_ID并将其存储在一个变量中,以便可以将其解析到人员表中的人员类型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)) ; 

编辑

下面是我试图获得工作的代码。 我需要存储查询的结果,所以我可以通过插入命令将它解析到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> 
+0

所以你的意思是我们会为你写完整的表格? – hjpotter92 2012-04-16 11:01:59

+0

请提供不符合关于失败的特定问题的代码。 – 2012-04-16 11:11:59

+0

如果您遇到的问题是在设置Person_Type_ID,那么我建议您发布处理设置该字段的代码... – liquorvicar 2012-04-16 12:05:00

回答

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,最好使用预准备语句自动转义输入。

+0

我刚刚用echo测试了sql9脚本,你是正确的,它是通过整个查询。 我对php和mysql很新,只通过教程学到了知识,但我一定会考虑mysqli_和PDO。 – Robin 2012-04-16 12:51:22

+0

你的输入是非常有用的,因为它让我看到我需要查看哪些代码区域,并且我理解接受答案。但是,结果仍然在我的数据库中发布了Person_Type_ID的0,所以我不能接受它,否则其他人可能会将该代码视为解决方案。我没有声称说你的评论是有用的。 – Robin 2012-04-16 13:07:53

相关问题