Intereting Posts
(PHP) Настройка цветов для определенных текстовых слов в эхо? Рамка для государственных машин PHP При вставке объекта с ассоциациями существует ли способ использовать FK вместо получения объекта? Как я могу автоматически загружать данные с другого сервера каждый день Использование PHP для создания PDF-файла из простого текста и текста HTML Отключить яркие временные метки Laravel Почему мой 301 Redirect занимает так много времени? Как изменить 302 Перенаправление на 301 Перенаправление в htaccess? Маршрут к контроллеру в подпапке, не работающей в Laravel 4 Регистрация действий пользователя в laravel Проблема с эскизом сообщения WordPress (только 1 миниатюра на главной странице) Могу ли я предсказать, насколько большой будет мой индекс Zend Framework? (и некоторые быстрые Q: s) PHP Как разобрать pkcs7 подпись blob? CakePHP и GROUP BY Как проверить ввод формы на одной странице с помощью случайных чисел?

вставлять в базу данных из дублированного текстового поля, если не пусто php sql

У меня есть база данных с 3 таблицами – Author, Study и Casestudy.

У автора есть столбцы AuthorId (Auto increment, PK ), F_name , L_name , Email , Contact .

Study есть столбцы StudyID (Auto increment, PK ), Title , Summary

CasestudyAuthorId ( FK , reference Author.AuthorId ), StudyId ( FK , reference Study.StudyId ), Submitted (datetime).

У меня есть инструкция, которая вставляет данные в каждую таблицу (получение идентификаторов AuthorId и StudyID) и вставку в casestudy.

Мой вопрос заключается в том, что есть только один автор, как я могу избежать передачи данных для второго автора в базу данных. В противном случае он сохраняет только пустую строку. Пример веб-формы автора https://jsfiddle.net/7un2yf9g/ . Он дублирует весь контейнер и создает идентичную копию с разными именами.

Мой код выглядит следующим образом:

 $AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle'])); $AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2'])); $F_Name = mysqli_real_escape_string($con, ($_POST['first_name'])); $F_Name = mysqli_real_escape_string($con, ($_POST['first_name_ID2'])); $L_Name = mysqli_real_escape_string($con, ($_POST['last_name'])); $L_Name = mysqli_real_escape_string($con, ($_POST['last_name_ID2'])); $Email = mysqli_real_escape_string($con, ($_POST['email'])); $Email = mysqli_real_escape_string($con, ($_POST['email_ID2'])); $Contactauthor = mysqli_real_escape_string($con, ($_POST['contact'])); $Contactauthor = mysqli_real_escape_string($con, ($_POST['contact_ID2'])); $Title = mysqli_real_escape_string($con, ($_POST['Title'])); $Summary = mysqli_real_escape_string($con, ($_POST['Summary'])); mysqli_multi_query($con," START TRANSACTION; INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact) VALUES('$AuthorTitle','$F_Name','$L_Name','$Email','$Contactauthor'), ('$AuthorTitle_ID2','$F_Name_ID2','$L_Name_ID2','$Email_ID2','$Contactauthor_ID2'); SET @AuthorId = LAST_INSERT_ID(); INSERT INTO study(Title, Summary) VALUES('$Title','$Summary'); SET @StudyId = LAST_INSERT_ID(); INSERT INTO casestudy(AuthorId, StudyId, Submitted) VALUES(@AuthorId, @StudyId, NOW()); COMMIT; "); 

Прежде всего, как вы определяете свои переменные, на данный момент Author_ID2 никогда не определяется:

 $AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle'])); $AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2'])); 

Здесь вы просто переопределяете $AuthorTitle со значением от $_POST['AuthorTitle_ID2'] и вообще не определяете $AuthorTitle_ID2 .

Далее, оператор SQL, который у вас есть, свяжет второго author с study в casestudy потому что LAST_INSERT_ID() вернет идентификатор последней вставленной записи, даже если на самом деле было несколько записей, вставленных одним утверждением.

И, наконец, в MySQL есть оператор IF :

 $AuthorTitle = mysqli_real_escape_string($con, ($_POST['AuthorTitle'])); $AuthorTitle_ID2 = mysqli_real_escape_string($con, ($_POST['AuthorTitle_ID2'])); $F_Name = mysqli_real_escape_string($con, ($_POST['first_name'])); $F_Name_ID2 = mysqli_real_escape_string($con, ($_POST['first_name_ID2'])); $L_Name = mysqli_real_escape_string($con, ($_POST['last_name'])); $L_Name_ID2 = mysqli_real_escape_string($con, ($_POST['last_name_ID2'])); $Email = mysqli_real_escape_string($con, ($_POST['email'])); $Email_ID2 = mysqli_real_escape_string($con, ($_POST['email_ID2'])); $Contactauthor = mysqli_real_escape_string($con, ($_POST['contact'])); $Contactauthor_ID2 = mysqli_real_escape_string($con, ($_POST['contact_ID2'])); $Title = mysqli_real_escape_string($con, ($_POST['Title'])); $Summary = mysqli_real_escape_string($con, ($_POST['Summary'])); mysqli_multi_query($con," START TRANSACTION; INSERT INTO study(Title, Summary) VALUES('$Title','$Summary'); SET @StudyId = LAST_INSERT_ID(); INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact) VALUES('$AuthorTitle','$F_Name','$L_Name','$Email','$Contactauthor'); SET @AuthorId = LAST_INSERT_ID(); INSERT INTO casestudy(AuthorId, StudyId, Submitted) VALUES(@AuthorId, @StudyId, NOW()); IF ('$AuthorTitle_ID2' <> '' OR '$F_Name_ID2' <> '' OR '$L_Name_ID2' <> '' OR '$Email_ID2' <> '' OR '$Contactauthor_ID2' <> '') THEN INSERT INTO author(AuthorTitle, F_Name, L_Name, Email, Contact) VALUES('$AuthorTitle_ID2','$F_Name_ID2','$L_Name_ID2','$Email_ID2','$Contactauthor_ID2'); SET @AuthorId = LAST_INSERT_ID(); INSERT INTO casestudy(AuthorId, StudyId, Submitted) VALUES(@AuthorId, @StudyId, NOW()); END IF; COMMIT; ");