0

MySQL データベースにいくつかの値を挿入しようとするとエラーが発生します - 私のページは現在、URL を介して渡された値「EventID」を読み取り、その EventID に基づいて結果を追加できます。現在、メンバー テーブル内のメンバーによって入力されるドロップダウン ボックスがあります。
私はこの恐ろしいエラーを受け取ります:

子行を追加または更新できません: 外部キー制約が失敗しました ( clubresults. results, CONSTRAINT ResultEventFOREIGN KEY ( EventID) REFERENCES events( EventID) ON DELETE CASCADE)

テーブル構造を変更することはできませんので、助けていただければ幸いです。注-現在、SQLをエコーし​​て、挿入されない理由に関するエラーを見つけています。

<?php

error_reporting (E_ALL ^ E_NOTICE); 
$con = mysql_connect("localhost","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("clubresults", $con);

   // Get id from URL
    $id = mysql_real_escape_string($_GET['EventID']);

    // If id is number
    if ($id > 0) 
    {
         // Get record from database
         $sql = "
            SELECT EventID
            FROM results 
            WHERE EventID = " . $id;
         $result = mysql_query($sql); 
         }
if (isset($_POST['submit'])) {       
  $sql="INSERT INTO results (MemberID, Score, Place)
VALUES
('".$_POST['student']."', '".$_POST['Score']."', '".$_POST['Place']."')";

$add_event = mysql_query($sql) or die(mysql_error());;

echo $add_event;
}

HTML フォーム -

$_SERVER['PHP_SELF']?>" method="post"> 
                        <table border="0"><p>
                        <tr><td colspan=2></td></tr>
                        <tr><td>Member Name: </td><td>
                        <?php
                        $query="SELECT * FROM members";

/* You can add order by clause to the sql statement if the names are to be displayed in alphabetical order */

$result = mysql_query ($query);
echo "<select name=student value=''>Student Name</option>";
// printing the list box select command

while($nt=mysql_fetch_array($result)){//Array or records stored in $nt
echo "<option value='$nt[MemberID]'>$nt[Firstname] $nt[Surname]</option>";
/* Option values are added by looping through the array */
}
echo "</select>";// Closing of list box 
?>

                        <tr><td>Score:</td><td> 
                        <input type="text" name="Score" maxlength="10"> 
                        <tr><td>Place:</td><td> 
                        <input type="text" name="Place" maxlength="10"> 
                        </td></tr> 
                        <tr><th colspan=2><input type="submit" name="submit" 
                        value="Add Result"> </th></tr> </table>
                        </form>
4

1 に答える 1

2

をレコードに挿入する必要がありEventIDます。results

$sql="INSERT INTO results (MemberID, Score, Place, EventID) VALUES (?, ?, ?, ?)";

?変数の代わりにプレースホルダーを使用したことに注意してください (これにより、 SQL インジェクション$_POSTに対して脆弱になりました)。

代わりに、SQL で評価されないパラメーターとして変数を渡す準備済みステートメントを使用する必要がありますが、使用している古い MySQL 拡張機能では使用できません (コミュニティはいずれにせよ非推奨になり始めているため、実際に使用する必要があります)。それを使って新しいコードを書くのをやめる); 代わりに、改善されたMySQLi拡張機能またはPDO抽象化レイヤーのいずれかを使用してください。

于 2012-05-29T01:58:53.043 に答える