Я новичок в PHP и хочу знать, хорошо ли написана моя функция.
Я создаю приложение для викторины и у меня есть следующие таблицы: пользователи, курсы, тесты (где prof_id, course_id иquiz_name хранятся), вопросы, quizzes_questions, ответы.Обратите внимание, что вопрос может иметь более одного правильного ответа.
Итак, я написал скрипт, который получает в качестве параметров имя теста, имя пользователя профессора, который его создал, курс, вопрос,вопросы этого вопроса, ответ, и является ли этот ответ правильным или нет.
Мой вопрос заключается в том, правильно ли я его реализовал, поскольку я не совсем уверен в использовании внешних ключей.
Сначала я должен найти идентификатор профессора из таблицы пользователей, затем идентификатор курса из курсов, затем идентификатор теста из викторин и затем проверить, существует ли вопрос в таблице.На основании последней проверки я вставляю ее, если она еще не существует, вместе с ее ответами, но если она уже существует, я выбираю ее идентификатор и выполняю вставку ответов в конкретную таблицу.
public function insert_question($quiz_name,$professor,$course,$question,$points,$answer,$is_correct)
{
$query = "select id from users where username ='$professor'";
$result = mysqli_query($this->connection, $query);
if(mysqli_num_rows($result)>0){
$row=mysqli_fetch_array($result);
$professor_id = $row['id'];
}else{
$json['error'] = 'professor not found';
}
$query = "select id from courses where course ='$course'";
$result = mysqli_query($this->connection, $query);
if(mysqli_num_rows($result)>0){
$row=mysqli_fetch_array($result);
$course_id = $row['id'];
}else{
$json['error'] = 'course not found';
}
$query = "select id from quizzes where professor_id ='$professor_id' and course_id = '$course_id'";
$result = mysqli_query($this->connection, $query);
if(mysqli_num_rows($result)>0){
$row=mysqli_fetch_array($result);
$quiz_id = $row['id'];
}else{
$json['error'] = 'quiz not found';
}
$query = "select id from questions where question ='$question'";
$result = mysqli_query($this->connection, $query);
if(mysqli_num_rows($result)>0){
//question already exists so we need to add its answers
$row=mysqli_fetch_array($result);
$question_id = $row['id'];
$query = "insert into answers (question_id, answer, isCorrect) values ('$question_id','$answer','$is_correct')";
$insertedA = mysqli_query($this -> connection, $query);
if($insertedA == 1 ){
$jsonA['success'] = 'answer added';
}
else{
$jsonA['error'] = 'answer couldn\'t be added';
}
}else if(mysqli_num_rows($result)==0){
//insert the actual question
$query = "insert into questions (question, points) values ('$question','$points')";
$insertedQ = mysqli_query($this -> connection, $query);
if($insertedQ == 1 ){
$jsonQ['success'] = 'question added';
$last_question_id = mysqli_insert_id($this -> connection); //id of the question i just inserted
echo $last_question_id;
}
else{
$jsonQ['error'] = 'question couldn\'t be added';
}
//insert into quizzes_questions
$query = "insert into quizzes_questions(quiz_id, question_id) values ('$quiz_id','$last_question_id')";
$insertedQQ = mysqli_query($this -> connection, $query);
if($insertedQQ == 1 ){
$jsonQQ['success'] = 'queestionQuizz added';
}
else{
$jsonQQ['error'] = 'questionQuizz couldn\'t be added';
}
$query = "insert into answers (question_id, answer, isCorrect) values ('$last_question_id','$answer','$is_correct')";
$insertedA = mysqli_query($this -> connection, $query);
if($insertedA == 1 ){
$jsonA['success'] = 'answer added';
}
else{
$jsonA['error'] = 'answer couldn\'t be added';
}
}else{
$json['error'] = 'something wrong';
}
echo json_encode($json);
echo json_encode($jsonA);
echo json_encode($jsonQ);
echo json_encode($jsonQQ);
mysqli_close($this->connection);
}
Можно ли запустить эти выбранные инструкции, чтобы найти идентификаторы, а затем использовать их таким образом?Есть ли более простой способ сделать это, поскольку у меня может быть много сценариев, в которых мне нужно найти идентификатор профессора, что означает, что мне придется копировать и вставлять этот код в каждый файл?
Кроме того,Я читал о подготовленных выражениях, должен ли я использовать их для каждого параметра, который есть в моей функции, так как все они вводятся пользователем?