データベース設計の大きな欠陥に問題があります。以下は私の4つのテーブルです。
セッションテーブル:
SessionId SessionName
3 EROEW
質問表:
QuestionId(PK) QuestionNo QuestionContent SessionId (FK)
11 1 Question1 3
12 2 Question2 3
13 3 Question3 3
Image_Question:
ImageQuestionId (PK) ImageId (FK) SessionId (Fk) QuestionNo (FK)
1 1 3 1
2 2 3 2
画像:
ImageId (PK) SessionId (Fk) QuestionNo (FK)
1 3 1
2 3 2
Image_Question
表からわかるように、は一意ではない、つまり一意ではないフィールドを参照しQuestionNo
ますQuestionNo
。今、私はこれを悪い習慣にしています。
今、私はあなたがなぜ使用しないのかを言うつもりであることを知っていますQuestionId
。問題はQuestionId
、質問が送信される前に画像が各質問にアップロードされるため、使用できないことです。独自の質問を行う唯一の方法はQuestionId
、ユーザーが質問を送信した後です。
だから私がやろうとしたのはQuestionNo
、ページとから取得することによって、アップロードされた画像がどの質問に属するかを判断することでしたSessionId
。
これは悪いやり方だと聞いたので、に変更QuestionNo (FK)
しImage_Question
たいと思いQuestionId (FK)
ます。ただし、質問を送信して取得した後は、ファイルをアップロードしたり、アップロードの詳細を挿入したりするQuestionId
ことはできません。
だから私の質問は、アップロードされた各画像を一時テーブルに保存し、各画像が属する質問番号とセッションIDを取得し、そこから値を見つけてテーブルにQuestionId
保存する方法があるということです。QuestionId
Image_Question
以下は、画像がアップロードされた後に値を挿入する現在のphpコードです。
誰かが以下のコードを更新できれば非常に素晴らしいですが、どんな答えも役に立ちます:
move_uploaded_file($_FILES["fileImage"]["tmp_name"],
"ImageFiles/" . $_FILES["fileImage"]["name"]);
$result = 1;
$imagesql = "INSERT INTO Image (ImageFile)
VALUES (?)";
//Dont pass data directly to bind_param store it in a variable
$insert->bind_param("s",$img);
//Assign the variable
$img = 'ImageFiles/'.$_FILES['fileImage']['name']; //GET THE IMAGE UPLOADED
$insert->execute();
$insert->close();
$lastImageID = $mysqli->insert_id;
$_SESSION['lastImageID'] = $lastImageID;
$_SESSION['ImageFile'] = $_FILES["fileImage"]["name"];
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : ''); GET THE NAME OF THE SESSION
$sessionquery = "SELECT SessionId FROM Session WHERE (SessionName = ?)"; //FIND SESSIONID by finding it's SESSIONNAME
// Bind parameter for statement
$sessionstmt->bind_param("s", $sessid);
// Execute the statement
$sessionstmt->execute();
// This is what matters. With MySQLi you have to bind result fields to
// variables before calling fetch()
$sessionstmt->bind_result($sessionid);
// This populates $sessionid
$sessionstmt->fetch();
$sessionstmt->close();
$imagequestionsql = "INSERT INTO Image_Question (ImageId, SessionId, QuestionNo) //INSERT DETAILS INTO CURRENT IMAGE_QUESTION TABLE
VALUES (?, ?, ?)";
if (!$insertimagequestion = $mysqli->prepare($imagequestionsql)) {
// Handle errors with prepare operation here
echo "Prepare statement err imagequestion";
}
$qnum = (int)$_POST['numimage']; //QUESTION NUMBER IMAGE IS UPLOADED IN
$insertimagequestion->bind_param("iii",$lastImageID, $sessionid, $qnum);
$insertimagequestion->execute();
if ($insertimagequestion->errno) {
// Handle query error here
}
$insertimagequestion->close();