2017-12-11 1 views
-1

So habe ich die folgenden Tabellen gemacht und ich versuche, einen Spieler an die Spieler-Tabelle über eine insert.php Seite hinzufügen und wenn ich versuche ich die folgende Fehlermeldung erhalten:Kann untergeordnete Zeile, Fremdschlüsseleinschränkung nicht hinzufügen oder aktualisieren?

ErrorCannot hinzufügen oder ein Kind aktualisieren Reihe: ein Fremdschlüssel fehlschlägt (. football_dbplayer, CONSTRAINT player_ibfk_1 FOREIGN KEY (teamID) LITERATUR team (teamID))

Hier ist die sQL-Code für meine Tabellen, seine ziemlich einfach:

CREATE TABLE player (
    playerID int(3) AUTO_INCREMENT NOT NULL, 
    playerName VARCHAR(50) NOT NULL, 
    playerAge int(3) NOT NULL, 
    playerNation VARCHAR(60) NOT NULL, 
    playerPosition VARCHAR(50) NOT NULL, 
    playerTeam VARCHAR(50) NOT NULL, 
    teamID int(3) NOT NULL, 
    PRIMARY KEY(playerID), 
    FOREIGN KEY(teamID) REFERENCES team(teamID))  ENGINE=innodb; 

CREATE TABLE team (
    teamID int(3) AUTO_INCREMENT NOT NULL, 
    teamName VARCHAR(50) NOT NULL, 
    teamLeague VARCHAR(70), 
    yearFounded int(5) NOT NULL, 
    teamCrest VARCHAR(30), 
    leagueID int(3) NOT NULL, 
    PRIMARY KEY(teamID), 
    FOREIGN KEY(leagueID) REFERENCES league(leagueID)) ENGINE=innodb; 

CREATE TABLE league (
    leagueID int(3) AUTO_INCREMENT NOT NULL, 
    leagueName VARCHAR(50) NOT NULL, 
    leagueRegion VARCHAR(50) NOT NULL, 
    leagueSize int(3) NOT NULL, 
    leagueLogo VARCHAR(50) NOT NULL, 
    yearStarted int(4) NOT NULL, 
    PRIMARY KEY(leagueID)) ENGINE=innodb; 

CREATE TABLE users (
    user_id int(3) AUTO_INCREMENT NOT NULL, 
    user_name VARCHAR(30) NOT NULL, 
    user_email VARCHAR(70) NOT NULL, 
    user_pass VARCHAR(20) NOT NULL, 
    PRIMARY KEY (user_id)) ENGINE=innodb; 

Und hier ist mein PHP-Code auf der Einfügeseite.

<?php 
    include 'connect.php'; 

    if(isset($_POST['button-submit'])){ 
     $sql = "insert into player (playerName, playerAge, playerNation, playerPosition, playerTeam) values ('".$_POST['player_name']."', '".$_POST['player_age']."', '".$_POST['player_nation']."', '".$_POST['player_nation']."', '".$_POST['player_team']."')"; 

     if(mysqli_query($con, $sql)){ 
      header('Location:index.php'); 
     } 
     else { 
      echo 'Error'.mysqli_error($con); 
     } 
    } 
?> 

<h2>Add player</h2> 

<form action="" method="POST"> 
    <label>Player Name: </label> 
    <input name="player_name"> 
    <br> 
    <label>Player Age: </label> 
    <input name="player_age"> 
    <br> 
    <label>Player Nation: </label> 
    <input name="player_nation"> 
    <br> 
    <label>Player Position: </label> 
    <input name="player_position"> 
    <br> 
    <label>Player Team: </label> 
    <input name="player_team"> 
    <br> 
    <input type="submit" name="button-submit"> 
</form> 

und mein Index-Seite der Daten

<?php 
    require "connect.php" 
?> 

<h2> Player Lists </h2> 

<h3><a href="insertPlayer.php">Add player!</a></h3><br> 

<table border="1" cellspacing="0" cellpadding="5px"> 
    <tr> 
     <th>ID</th> 
     <th>Name</th> 
     <th>Age</th> 
     <th>Nation</th> 
     <th>Position</th> 
     <th>Team</th> 
     <th>Team ID</th> 
    </tr> 

    <?php 
     $sql = 'select playerID, playerName, playerAge, playerNation, playerPosition, playerTeam, teamID from player'; 
     $result = mysqli_query($con, $sql); 

     if(mysqli_num_rows($result) > 0) { 
      while($row = mysqli_fetch_assoc($result)) { 
    ?> 
       <tr> 
        <td><?=$row['playerID']?></td> 
        <td><?=$row['playerName']?></td> 
        <td><?=$row['playerAge']?></td> 
        <td><?=$row['playerNation']?></td> 
        <td><?=$row['playerPosition']?></td> 
        <td><?=$row['playerTeam']?></td> 
        <td><?=$row['teamID']?></td> 
       </tr> 
    <?php 
      } 
     } 
    ?> 

</table> 

Ich bin sehr traurig zu zeigen, wenn dies die meisten von Ihnen sehr einfach, aber ich habe gerade mit PHP und MySQL in der Schule wie 2 Monate gestartet Mein Ziel ist es, die teamID 1 zu haben, wenn es chelsea ist, 2 wenn es eine andere Mannschaft ist, 3 wenn eine andere und 1 wieder, wenn es chelsea ist und so weiter.

UPDATE

<?php 
    include 'connect.php'; 

    $teamName = $_POST['player_team']; 
    $teamID = "select teamID from team WHERE teamName = $teamName"; 

    if(isset($_POST['button-submit'])){ 
     $sql = "insert into player (playerName, playerAge, playerNation, playerPosition, playerTeam, teamID) values ('".$_POST['player_name']."', '".$_POST['player_age']."', '".$_POST['player_nation']."', '".$_POST['player_nation']."', '".$_POST['player_team']."', '".$teamName."')"; 

     if(mysqli_query($con, $sql)){ 
      header('Location:index.php'); 
     } 
     else { 
      echo 'Error'.mysqli_error($con); 
     } 
    } 
?> 

<h2>Add player</h2> 

<form action="" method="POST"> 
    <label>Player Name: </label> 
    <input name="player_name"> 
    <br> 
    <label>Player Age: </label> 
    <input name="player_age"> 
    <br> 
    <label>Player Nation: </label> 
    <input name="player_nation"> 
    <br> 
    <label>Player Position: </label> 
    <input name="player_position"> 
    <br> 
    <label>Player Team: </label> 
    <input name="player_team"> 
    <br> 
    <input type="submit" name="button-submit"> 
</form> 

Ok, damit ich den Code aktualisiert haben und nun den Fehler nicht definiert Index auf der Linie 4, die ich bekomme ich

UPDATE 2

<?php 
    include 'connect.php'; 

    if(isset($_POST['button-submit'])){ 
     $teamName = $_POST['player_team']; 
     $teamID = "select teamID from team WHERE teamName = ".$_POST['player_team']; 

     $sql = "insert into player (playerName, playerAge, playerNation, playerPosition, playerTeam, teamID) values ('".$_POST['player_name']."', '".$_POST['player_age']."', '".$_POST['player_nation']."', '".$_POST['player_position']."', '".$_POST['player_team']."', '".$teamID."')"; 

     if(mysqli_query($con, $sql)){ 
      header('Location:index.php'); 
     } 
     else { 
      echo 'Error'.mysqli_error($con); 
     } 
    } 
?> 

<h2>Add player</h2> 

<form action="" method="POST"> 
    <label>Player Name: </label> 
    <input name="player_name"> 
    <br> 
    <label>Player Age: </label> 
    <input name="player_age"> 
    <br> 
    <label>Player Nation: </label> 
    <input name="player_nation"> 
    <br> 
    <label>Player Position: </label> 
    <input name="player_position"> 
    <br> 
    <label>Player Team: </label> 
    <input name="player_team"> 
    <br> 
    <input type="submit" name="button-submit"> 
</form> 

UPDATE verstehen kippe 3

<?php 
    include 'connect.php'; 

    if(isset($_POST['button-submit'])){ 
     $teamName = $_POST['player_team']; 
     $stmt = "SELECT teamID FROM team WHERE teamName = '".$teamName."'"; 
     $teamID = mysqli_query($con, $stmt); 

     $sql = "INSERT INTO player (playerName, playerAge, playerNation, playerPosition, teamID) values ('".$_POST['player_name']."', '".$_POST['player_age']."', '".$_POST['player_nation']."', '".$_POST['player_position']."', $teamID)"; 

     if(mysqli_query($con, $sql)){ 
      header('Location:index.php'); 
     } 
     else { 
      echo 'Error'.mysqli_error($con); 
     } 
    } 
?> 
+0

Kommentare sind nicht für längere Diskussion; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/160950/discussion-on-question-by-shlongmor-cannot-add-or-update-child-row-foreign-key) . – Andy

Antwort

0

Diese Meldung wird angezeigt, wenn Sie versuchen, einen Fremdschlüssel zu aktualisieren oder zu löschen. Dies ist eine gute Sicherheitsvorkehrung. so zu verhindern, dass es auf diesen versucht

ON UPDATE CASCADE ON DELETE CASCADE 

nach der Definition Ihrer Fremdschlüssel wie dies

FOREIGN KEY(teamID) REFERENCES team(teamID) ON UPDATE CASCADE ON DELETE CASCADE 

auch für die andere Tabelle verwendet.

Verwandte Themen