Моя ситуация:
Я должен создать систему электронного обучения, где лекторы (пользователи) будут загружать задания.Пользователь будет вводить детали назначения (имя, описание и т. Д.), А также загружать файл (ы).Я попытался выполнить многократную загрузку файла с транзакцией, чтобы вставить данные в две таблицы, одна из которых содержит детали назначения, а другая - для файлов, загруженных в одно назначение.
У меня есть 2 связанные таблицы:
1) назначение - где будут храниться все детали назначения
2) файл назначения - где будет сохранен весь путь к файлу
Я ссылался на несколько сообщений, подобных этому:
Вставка нескольких таблиц с транзакциями в mysql
PHP & MySQL: простой код для реализации транзакции -Commit & Rollback
Я пытался подобным образом кодировать, но каким-то образом мои данные не могли быть вставлены в базу данных.
Вот мой код подключения:
$host = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "test";
// Create connection
$con = new mysqli($host, $dbusername, $dbpassword, $dbname);
// Check connection
if (mysqli_connect_error()){
die('Connect Error ('. mysqli_connect_errno() .') '
. mysqli_connect_error());
}
и вот мой код транзакции:
for ($i = 0; $i < count($_FILES['filename']['name']); $i++) {
$filename = $_FILES['filename']['name'][$i];
$target = "upload/";
$filetarget = $target.$filename;
$tempfilename = $_FILES["filename"]["tmp_name"][$i];
$result = move_uploaded_file($tempfilename,$filetarget);
if($result) {
// disable autocommit
mysqli_autocommit($con, FALSE);
$con->begin_transaction();
$con-> query("INSERT INTO assignment (assignid, topicid,classid,a_name,description,startdate,duedate,cutoffdate)VALUES ((SELECT topicid FROM topic WHERE topicid = '$topicid'),(SELECT classid FROM class WHERE classid = '$classid'),'$a_name','$description','$startdate','$duedate','$cutoffdate')");
// last inserted id for assignid
$assignid = mysqli_insert_id($con);
$con->query("INSERT INTO assignmentfile (fileid, assignid, filename, filetarget) VALUES ((SELECT assignid FROM assignment where assignid = '$assignid'), '$filename','$filetarget')");
$con->commit();
} // end of result
else {
$con->rollback();
}
} // end of for loop
}
Что я сделал не так?Ошибка не отображается, но данные не вставляются в базу данных.Есть лучший способ сделать это?