2017-04-03 3 views
-2

Ich habe ein Benutzerformular erstellt, mit dem Benutzer Teilnehmer registrieren können. Eines der Felder in diesem Benutzerformular ist eine Dropdown-Liste, die den Benutzer auffordert, eine Ereignis-ID auszuwählen. Ereignis-ID ist ein Fremdschlüssel, und die in der Dropdown-Liste aufgelisteten Werte werden aus der Ereignistabelle generiert. Dies bedeutet, dass der Benutzer nur eine Ereignis-ID auswählen kann, die bereits generiert wurde.Warum akzeptiert meine Datenbank meinen Fremdschlüssel nicht von einem Benutzerformular?

Wenn ich diesen Benutzer Formular habe ich den folgenden Fehler:

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

Ich weiß, dass diese Fehlermeldung normalerweise bedeutet, dass ich zur Eingabe eines Wertes in einem Fremdschlüsselfeld bin versucht, das nicht existiert, aber die Drop Die Downlist für EventID wird aus der Ereignistabelle generiert, dh es werden nur EventIds angezeigt, die bereits registriert und vorhanden sind. Kann mir jemand sagen, was das Problem ist?

Jede Hilfe würde sehr geschätzt werden.

<!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

Der Fehler bedeutet, dass Sie versuchen, einen Wert einzufügen, der nicht mit dem Fremdschlüssel übereinstimmt. Also ... Welchen Wert willst du einfügen? Was sind die gültigen Werte? – David

+0

Derzeit sind zwei Ereignisse in der Ereignistabelle registriert, diese Ereignis-IDs sind 1 und 2, was genau das ist, was die Dropdown-Liste generiert. Wenn ich jedoch dieses Benutzerformular einreiche, erhalte ich den oben genannten Fehler. –

+1

Das beantwortet nicht die Frage, welchen Wert Sie in Ihre Tabelle einfügen möchten. Sie arbeiten derzeit unter der Annahme, dass der von Ihnen geschriebene Code * fehlerfrei sein muss und dass es nicht notwendig ist, ihn zu überprüfen oder zu debuggen. Diese Annahme ist falsch. – David

Antwort

0

Ihre Formularelemente benötigen name Attribute, um ihre Daten an den Server zu senden. Dieser keinen hat:

<select> 

Geben Sie ihm die richtige name Attribut:

<select name="eventID"> 

Ohne sie wird der Wert nicht an den Server gesendet und Ihre Abfrage versucht, eine leere einfügen Wert in die Tabelle.

Zusätzlich haben Sie ein HTML-Element, das nicht existiert tatsächlich:

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

Sie sollten wahrscheinlich nur, dass man löschen, es tut nichts.

Beachten Sie auch, dass Ihr Code weit offen zu SQL-Injektion ist. Sie sollten einen Blick auf this question werfen.

Verwandte Themen