2012-04-16 75 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

相關問題