2017-04-03 81 views
-2

我創建了一個允許用戶註冊參與者的用戶表單。此用戶表單中的一個字段是一個下拉列表,要求用戶選擇一個事件ID。 事件ID是一個外鍵,下拉列表中列出的值是從事件表生成的。這意味着用戶無法選擇除已生成的事件ID以外的其他任何內容。爲什麼我的數據庫不接受用戶表單中的外鍵?

當我提出這個用戶的形式,我得到了以下錯誤:

Failed. Cannot add or update a child row: a foreign key constraint fails

我知道這個錯誤信息通常意味着我在嘗試輸入一個值,不存在一個外鍵字段,但回落eventID的下拉列表是從事件表中生成的,這意味着它只顯示已註冊並存在的eventIds。 誰能告訴我問題是什麼?

任何幫助將不勝感激。

<!DOCTYPE html> 

<?php 
$link=mysqli_connect("localhost","root",""); 
mysqli_select_db($link,"event_planner"); 
?> 

<html> 
<head> 
    <title>Participant's Registration Page</title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body 
    <div id="form"> 
     <form action="partregisterprocess.php" method="POST"> 

     <h1 align="center">Participant's Registration Page</h1> 

     <p> 
     Name:<br /> 
      <input type="text" id="name" name="name" required /> 
      </p> 

     <p> 
     Surname:<br /> 
      <input type="text" id="surname" name="surname" required /> 
      </p> 

     <p> 
     Date of Birth:<br /> 
      <input type="date" id="dob" name="dob" required /> 
      </p> 

     <p> 
     Age at Camp:<br /> 
      <input type="text" id="age" name="age" required /> 
      </p> 

     <p> 
     Gender:<br /> 
      Male<input type="radio" value="male" name="gender" /> 
      Female<input type="radio" value="female" name="gender" required /> 
      </p> 

     <p> 
     Address:<br /> 
      <input type="text" id="address" name="address" required /> 
      </p> 


     <p> 
     Contact No:<br /> 
      <input type="text" id="contact" name="contact" required /> 
     </p> 


     <p> 
     Next of Kin:<br /> 
      <input type="text" id="nextkin" name="nextkin" required /> 
      </p> 

     <p> 
     Next of Kin's Contact No:<br /> 
      <input type="text" id="nextContact" name="nextContact" required /> 
      </p> 

     <p> 
     Attendance at Camp:<br /> 
      <input type="text" id="attendcamp" name="attendcamp" required /> 
      </p> 

     <p> 
     Attendance at Sunday School:<br /> 
      <input type="text" id="attendschool" name="attendschool" required /> 
      </p> 

     <p> 
     Comments:<br /> 
      <input type="text" id="comments" name="comments" /> 
      </p> 




     <p> 
      <input type="submit" id="btn" value="Register" /> 
      </p> 


<label> EventID </label>    
<id="eventID" name="eventID" />   
<select> 
<?php 
     $res=mysqli_query($link,"SELECT * FROM events"); 
     while($row=mysqli_fetch_array($res)) 
{ 
?> 
     E<option><?php echo $row["eventID"]; ?></option> 

<?php 
} 


?> 

</select> 


     </form> 

    </div> 

</body> 

</html> 




    <?php 

    $Name = $_POST['name']; 
    $Surname = $_POST['surname']; 
    $Date_of_Birth = $_POST['dob']; 
    $Age_at_Camp = $_POST['age']; 
    $Gender = $_POST['gender']; 
    $Address = $_POST['address']; 
    $Contact_No = $_POST['contact']; 
    $Next_of_Kin = $_POST['nextkin']; 
    $Kin_ContactNo = $_POST['nextContact']; 
    $Attendance_Camp = $_POST['attendcamp']; 
    $Attendance_School = $_POST['attendschool']; 
    $Comments = $_POST['comments']; 
    $eventID = $_POST['eventID']; 


mysqli_connect("localhost", "root", ""); 
     mysqli_select_db("event_planner"); 

$insert= mysqli_query("INSERT INTO participants VALUES ('','$Name','$Surname','$Date_of_Birth','$Age_at_Camp','$Gender','$Address','$Contact_No','$Next_of_Kin','$Kin_ContactNo','$Attendance_Camp','$Attendance_School','$Comments','$eventID')") 
    or die("Failed. ".mysqli_error()); 

?> 
+1

該錯誤表示您試圖插入與外鍵不匹配的值。所以...你想要插入什麼值?什麼是有效值? – David

+0

目前在事件表中註冊了兩個事件,這些EventID是1和2,這正是下拉列表生成的。 但是,當我提交此用戶表單時,出現上述錯誤。 –

+1

這並沒有回答你試圖插入到表中的值的問題。您目前正在假設無論您編寫的任何代碼*必須完美無缺,並且無需檢查或調試它。這個假設是錯誤的。 – David

回答

0

您的表單元素需要name屬性將其數據發送到服務器。這其中沒有一個:

<select> 

給它正確的name屬性:

<select name="eventID"> 

沒有它,值不會發送到服務器,並在查詢試圖插入一個空價值進入表格。

此外,你有一個HTML元素實際上並不存在:

<id="eventID" name="eventID" /> 

你或許應該只刪除一個,它不會做任何事情。

此外,請注意,您的代碼是開放式SQL注入式。你會想看看this question

相關問題