2

mysqlとphpを使用してデータベースに人を追加できるシステムを開発しています。私のフォームの基本は、管理者が個人タイプと個人ロールを追加できることです。これらは、フォームに詳細を入力するときにユーザーに適用されます。たとえば、このシステムが学校環境に適用された場合、人物タイプは教師または料理人であり、人物の役割は親である可能性があります。これは、人物のタイプが人物の役割を除外しないためです。このシステムでは、システムがMYISAMタイプのテーブルを使用しているため、外部キーが更新されないというさまざまな問題がありましたが、INNODBテーブルを使用すると、データ入力が機能しません。大学のプロジェクトの場合と同じように、当面の間クエリを使用してこれを機能させる方法を模索していますが、締め切りが迫っています。しかし、私はこのシステムを機能させることを意味します、そのため、年内に完全に機能させる方法を模索します。エラー処理用のJavaScriptと、SQLインジェクション攻撃を防ぐためのコードのphpブロックがあります。

管理者がユーザーを入力しているとき、個人タイプテーブルのフィールドによって入力されるドロップダウンメニューがあります。これは、個人タイプテーブルの Person_Type_Value_Descriptionフィールドによって行われます。個人タイプテーブルの各行には、Person_Type_IDがあります。Person_Type_Value_Descriptionを検索し、Person_Type_IDを呼び出して変数に格納し、personテーブルのpersontypeidまで解析できるクエリが必要です。私のテーブルの基本的なレイアウトは、作成スクリプトから以下に見ることができます。

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テーブルに解析できるようにする必要があります。コメントありがとうございます。

私が抱えている問題は、NOT NULLコマンドのためにPersonテーブルのPerson_Type_IDが常に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);

フォームに表示するための呼び出し方法

<?

$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> 
4

1 に答える 1

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 を使用する必要があります。できれば、入力を自動的にエスケープする準備済みステートメントを使用してください。

于 2012-04-16T12:32:16.727 に答える