Ситуация такова, что у меня есть база данных с тремя таблицами, я хотел вставить данные в каждую таблицу, используя одну форму.
В базе данных у меня есть три таблицы (table_a (профиль), table_b (атрибуты (возраст, рост) и таблица_ c (любимые книги (жанр, название)
table_a
p_id(auto_increment)
p_name
p_surname
table_b
a_id(auto_increment)
p_id
a_age
a_height
table_c
b_id(auto_increment)
p_id
b_type
b_name
в классе. php, у меня есть три запроса, которые вставляют данные в три разные таблицы в в то же время.
class nameOfClass{
function insertData(){
В query_1 имена p_namea и p_ вставляются в table_a
$query_1 = “ INSERT INTO table_a SET p_name=:p_name, p_surname=:p_surname”;
$stmt_1 = $this->conn->prepare(query_1);
$this->p_name=$this->p_name;
$this->p_surname=$this->p_surname;
$stmt_1->bindParam(':p_name', $this->p_name);
$stmt_1->bindParam(':p_surname', $this->p_surname);
if($stmt_1->execute()){
В query_2 значения p_id были из последнего вставленного идентификатора в table_a и вставлены в table_b вместе с a_age и a_height.
В следующем запросе, аналогичном table_b, p_id будет получен из последнего вставленного идентификатора из table_a и вставлен в table_ c вместе со столбцами b_type и b_name. b_type и b_values являются массивом, поскольку a p_name может иметь несколько списков книг.
$query_2 = "INSERT INTO table_b SET p_id=:p_id, a_age=:a_age, a_height=:a_height;
INSERT INTO table_c p_id=:p_id, b_type=:b_type, b_name=:b_name”;
$stmt_2 = $this->conn->prepare($query_2);
$this->p_id=$this->conn->lastInsertId();
$this->a_age=$this->a_age;
$this->a_height=$this->a_height;
foreach($this->b_type AS $key => $value{
$this->b_type=$value;
$this->b_name=$this->b_name[$key];
}
$stmt_2->bindParam(':p_id', $this->p_id);
$stmt_2->bindParam(':a_age', $this->a_age);
$stmt_2->bindParam(':a_height', $this->a_height);
$stmt_2->bindParam(':b_type', $this->b_type;
$stmt_2->bindParam(':b_name', $this->b_name);
if($stmt_2->execute()){
return true;
}else{
return false;
}
}
}
в форме. php, в этой форме он подключается к базе данных, извлекает класс и выполняет функцию, если форма была отправлена
<?php
include_once 'config/database.php';
include_once 'objects/class.php';
$database = new Database();
$db = $database->getConnection();
$nameofclass = new nameOfClass($db);
if($_POST){
$nameofclass ->p_name=$_POST['p_name'];
$nameofclass ->p_surname=$_POST['p_surname'];
$nameofclass ->a_age=$_POST['a_age'];
$nameofclass ->a_height=$_POST['p_height'];
$nameofclass ->b_type=$_POST['b_type'];
$nameofclass ->b_name=$_POST['b_name'];
if($nameofclass->insertData()){
echo “success” ;
} else {
echo “error”;
}
}
<form method="post">
table_a (обычное поле ввода)
<input type="text" name="p_name">
<input type="text" name="p_surname">
table_b (обычное поле ввода)
<input type="text" name="a_age">
<input type="text" name="a_height">
table_ c (Dynami c добавить / удалить поле ввода используя jquery (потому что у человека может быть несколько книг))
<input type="text" name="b_type[]">
<input type="text" name="b_name[]">
Я могу заставить его работать, два запроса касаются вставки данных в table_a и table_b, но когда я добавляю запрос о table_ c вот где у меня проблема, я не могу заставить ее работать, она использует массив, я не знакома с массивом, я просто копирую коды по сети и медленно сшиваю их, чтобы получить желаемый результат.
Я не уверен, что мой код правильный. Когда я сохраняю его или нажимаю кнопку отправки на query_1, происходит вставка данных в table_a.