Правильный способ использования массива в такой ситуации или какой-либо экспертный совет? - PullRequest
0 голосов
/ 08 марта 2020

Ситуация такова, что у меня есть база данных с тремя таблицами, я хотел вставить данные в каждую таблицу, используя одну форму.

В базе данных у меня есть три таблицы (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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...