我正在开发一个系统,可以使用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>
答案 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,最好使用预处理语句来自动转义输入。