为什么我的数据库不接受用户表单中的外键?

时间:2017-04-03 17:58:32

标签: php html

我创建了一个用户表单,允许用户注册参与者。此用户表单上的一个字段是下拉列表,要求用户选择事件ID。 事件ID是外键,下拉列表中列出的值是从事件表生成的。这意味着用户无法选择已生成的事件ID以外的任何内容。

当我提交此用户表单时,我收到以下错误:

  

失败。无法添加或更新子行:外键约束失败

我知道这个错误消息通常意味着我试图将值输入到不存在的外键字段中,但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 个答案:

答案 0 :(得分:0)

您的表单元素需要name个属性才能将其数据发送到服务器。这个没有一个:

<select>

为其指定正确的name属性:

<select name="eventID">

没有它,该值不会发送到服务器,并且您的查询正在尝试将空值插入表中。

此外,您有一个实际上不存在的HTML元素:

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

你应该删除那个,它什么都不做。

另外,请注意您的代码是全开 SQL注入。您需要查看this question