1

さて、PHP フォームから複数のテーブルに値を送信しようとしています。私の php コードは正常に動作していますが、たとえばpatientID" " に値が挿入されています。私は何か間違ったことをしていますか?patientsPatientID; 100PatientIDDisease

**修正された質問

テーブル間の関係が正しく割り当てられているかどうかはわかりません。以下は、テーブルとそれらの間の関係です。

Patient Attends Accident & Emergency 
Patient seen_by Nurse
Nurse assesses disease of patient 
{{nurse assigns priority to patient}} Priority linked to patient and nurse
{{nurse gives patient waiting time}} Time linked to nurse and patient 
{{doctor will see patient based on their waiting time and priority}} Doctor linked to both time and priority. 
Accident & Emergency; (ID(PK), PatientID(FK) Address, City, Postcode, Telephone)
Patient (ID(PK), Forename, Surname, Gender, Dateofbirth, Address, Patienthistory, illness, 
Nurse(ID(PK) Forename, surname)
Assesses(ID(PK)NurseID(FK), PatientID(FK))
Disease(ID(PK), illness, symptoms, diagnosis, treatment) {{nurse assesses disease of patient (these tables should all be linked}}
Priority (ID, NurseID(FK), PatientID(FK), DoctorID(FK), Priority)
Time(ID,NurseID, PatientID, DoctorID, Arrival Time, Expected waiting time, Discharge time)
Doctor (ID,Firstname, Surname)

PHP コードを修正しました。ID がテーブルに挿入されていません。たとえば、PatientID が Disease テーブルに挿入されていません。

<?php
$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("a&e", $con) or die('Could not select database.');

//get NURSE values from form
$nurse_ID = $_POST['nurse_ID'];
$nurse_name = $_POST['nurse_name'];
$nurse_lastname = $_POST['nurse_lastname'];

//get Disease values from form
$disease_ID = $_POST['disease_ID'];
$symptoms = $_POST['symptoms'];
 $diagnosis = $_POST['diagnosis'];
$treatment = $_POST['treatment'];

//get Patient values from form 
$patient_id = $_POST['patient_id'];
$patient_name = $_POST['patient_name'];
$patient_lastname = $_POST['patient_lastname'];
$gender = $_POST['gender'];
 $dateOfBirth = $_POST['dateOfBirth'];
$monthOfBirth = $_POST['monthOfBirth'];
$yearOfBirth = $_POST['yearOfBirth'];
$address = $_POST['address'];
$history = $_POST['history'];
$illness = $_POST['illness'];
$priority = $_POST['priority'];
$priority_id = $_POST['priority_id'];

// Validate
$date = $dateOfBirth.'-'.$monthOfBirth.'-'.$yearOfBirth;

$sql ="INSERT INTO Nurse(Forename, Surname)
VALUES('$nurse_name', '$nurse_lastname')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
echo "$nurse_ID"; mysql_insert_id(); //get the assigned id for a nurse

$sql ="INSERT INTO Disease(Illness, Symptoms, Diagnosis, Treatment, PatientID)
   VALUES('$illness', '$symptoms', '$diagnosis', '$treatment', '$patient_id')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
echo "$patient_id"; mysql_insert_id(); //get the assigned id for a patient 

//use nurse_id and patient_id
$sql ="INSERT INTO Priority(NurseID, PatientID, Priority)
   VALUES('$nurse_ID', '$patient_id', '$priority')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
echo "$priority_id"; mysql_insert_id(); //get the assigned id for priority
echo "$patient_id"; mysql_insert_id(); //get the assigned id for a patient

$sql="INSERT INTO Patient(Forename, Surname, Gender, Date_Of_Birth, Address, Patient_History, Illness, Priority)
  VALUES     ('$patient_name', '$patient_lastname', '$gender', '$date', '$address', '$history', '$illness', '$priority')";
 mysql_query($sql,$con) or die('Error: ' . mysql_error());
 echo "$patient_id"; mysql_insert_id(); //get the assigned id for a patient

echo "1 record added";
 // close connection 
 mysql_close($con);
 ?>
4

2 に答える 2

0
  1. さまざまなエンティティ(看護師、患者、病気など)に一意のID、名前、姓を使用する必要があります。そして、それらをINSERTステートメントで適切に使用します。以下の改訂されたコードを参照してください。
  2. スクリプトの最初に1回だけdbを選択しますmysql_select_db(mysql_ *を使用する場合)。
  3. 挿入する前に、ユーザーからの入力をサニタイズして検証します。
  4. 正しい(論理的な)順序(看護師、患者、病気、優先順位)でレコードを挿入します。
  5. これで、すべてのIDがPOST経由で送信されます。mysqlでid自動再生成を使用することを検討してください。
  6. 変数がありません$priority_id。を介して同じ方法で取得することを前提として、改訂されたコードに配置しましたPOST
  7. だけでなく、適切なエラー処理を実行しますdie()
  8. PDOまたはmysqli_*に切り替えて、プリペアドステートメントを使用することを検討することをお勧めします。

改訂されたコード(更新):

これは、すべてのテーブルの列でauto_increment有効になっていることを前提としています。id

$con = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error());
mysql_select_db("a&e", $con) or or die('Could not select database.');

//get NURSE values from form
//We don't need to post an id for a Nurse since mysql will assign it for us
//$nurse_id = $_POST['nurse_id'];
$nurse_name = $_POST['nurse_name']; 
$nurse_lastname = $_POST['nurse_lastname'];

//get Disease values from form
// We don't need to post an id for a Disease since mysql will assign it for us
//$disease_id = $_POST['disease_id'];
$symptoms = $_POST['symptoms'];
$diagnosis = $_POST['diagnosis'];
$treatment = $_POST['treatment'];

//get Patient values from form
//We don't need to post an id for a Patient since mysql will assign it for us
//$patient_id = $_POST['patient_id'];
$patient_name = $_POST['patient_name'];
$patient_lastname = $_POST['patient_lastname'];
$gender = $_POST['gender'];
$dateOfBirth = $_POST['dateOfBirth'];
$monthOfBirth = $_POST['monthOfBirth'];
$yearOfBirth = $_POST['yearOfBirth'];
$address = $_POST['address'];
$history = $_POST['history'];
$illness = $_POST['illness'];
$priority = $_POST['priority'];

//We don't need to post an id for a Priority entity since mysql will assign it for us
//missing variable
//$priority_id = $_POST['priority_id'];

//Sanitize and validate your input here 
// ...skipped
// Validate
$date = $dateOfBirth.'-'.$monthOfBirth.'-'.$yearOfBirth;

//We don't provide an id for a Nurse since mysql will assign it for us
$sql ="INSERT INTO Nurse(Forename, Surname)
       VALUES('$nurse_name', '$nurse_lastname')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
$nurse_id = mysql_insert_id(); //get the assigned id for a nurse

//We don't provide an id for a Patient since mysql will assign it for us
$sql="INSERT INTO Patient(Forename, Surname, Gender, Date_Of_Birth, Address, Patient_History, Illness, Priority)
      VALUES('$patient_name', '$patient_lastname', '$gender', '$date', '$address', '$history', '$illness', '$priority')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());
$patient_id = mysql_insert_id(); //get the assigned id for a patient

//We don't provide an id for a Disease since mysql will assign it for us
$sql ="INSERT INTO Disease(Illness, Symptoms, Diagnosis, Treatment, PatientID)
       VALUES('$illness', '$symptoms', '$diagnosis', '$treatment', '$patient_id')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());

//We don't provide an id for a Priority since mysql will assign it for us
//But we use $nurse_id and $patient_id that we get earlier
$sql ="INSERT INTO Priority(NurseID, PatientID, Priority)
       VALUES('$nurse_id', '$patient_id', '$priority')";
mysql_query($sql,$con) or die('Error: ' . mysql_error());

echo "1 record added";
// close connection 
mysql_close($con);
于 2013-02-02T18:09:23.827 に答える
0

システムがどのように機能するかは完全には理解できませんが、次のコードを見ると、疾患 ID と患者 ID に異なる ID が挿入されないことがわかります。

$sql ="INSERT INTO Disease(ID, Illness, Symptoms, Diagnosis, Treatment, PatientID)
VALUES('$id', '$illness', '$symptoms', '$diagnosis', '$treatment', '$id')";

基本的に、患者 ID とまったく同じ疾患 ID を挿入しています。おそらく、それらに対して異なる変数が必要になるでしょう。

上記の私のコメントについて:

次のようにフィルタリングできます。

$id = intval($_POST['ID']);
$name = filter_input(INPUT_GET | INPUT_POST, $_POST['name']); // works in PHP 5.2.x and above

MySQL については、次の投稿を参照してください: なぜ PHP で mysql_* 関数を使用しないのですか?

于 2013-02-02T17:49:47.333 に答える