Вставить сразу в 2 таблицы в БД mysql из массивов

Один называется Job, а другой называется Attributes. Таблица атрибутов зависит от таблицы заданий, поскольку в одной таблице может быть много атрибутов. Таблица заданий содержит несколько полей, а именно

Jobid (автоинкремент, PRIMARY KEY), JobName, Jobdescription

Таблица атрибутов содержит следующие поля

id (автоинкремент, PRIMARY KEY, AttribName, Score, Jobid (внешний ключ из таблицы заданий).

Количество атрибутов, которые необходимо ввести для каждого задания, варьируется, поэтому одно задание может иметь 10 атрибутов, а другое задание может иметь 2, 3, 4 и т. д. атрибутов.

Ниже приведен код, который я создал до того, как застрял.

Insert_job.php

<?php

include 'html/head.php';//connect to connect to the database and initialize all functions
include 'scripts/functions/init.php';
include 'html/page_title.php';
include 'html/top_menu.php';
include 'titles/Job_insert.php';

if(empty($_POST)=== false)
    {
        $R_fields = array('JobName','JobDesc','JobDuties','RecruitmentProcess','ContractType','SPackage');
        foreach($_POST as $key=>$value)
        {
            if (empty($value) && in_array($key,$R_fields)=== true)
                {
                    $errors[] = 'fields marked with (*) are required';
                    break 1;
                }


        }

        if(empty($errors)=== true)
            {

                if($_POST['DirectorateName'] == '------ select ------')
                    {
                        $errors[] ='Please select Directorate Name';
                    }
                if($_POST['Attributes'] == '-select-')
                    {
                        $errors[] ='Please Select the Number of Attributes';
                    }

            }
    }

    include 'html/job_insert.php';

    //Check if the form is not empty then submit details
    if(empty($_POST) === false && empty($errors)=== true)
        {
            //store input into the session variables
            $_SESSION['JobName'] = $_POST['JobName'];
            $_SESSION['JobDesc'] = $_POST['JobDesc'];

            //Store the number of attributes to get captured
            $_SESSION['Attributes'] = $_POST['Attributes'];

            //redirect
            header('Location: Rank.php');
            exit();                                                                                                                             
        }
    else if(empty($errors) === false)
        {
            //output errors if the errors array is not empty
            echo output($errors);

        }
?>

                        </div> <!-- div class entry ends here -->
                    </div> <!-- div post ends here -->
                </div> <!-- div idcontents ends here -->
                <!-- end #content -->
                <?php
                    include 'html/top_side.php';
                    include 'html/side_other.php';
                    include 'html/side_bottom.php';
                    include 'html/footer.php';
                ?>

Вы заметите, что я сохраняю все входные данные в переменные сеанса и переношу их на следующую страницу, где я вставляю все сразу в две таблицы.

Следующий код предназначен для Rank.php

<?php

include 'scripts/functions/init.php';
include 'html/head.php';
include 'html/page_title.php';
include 'html/top_menu.php';
include 'titles/Rank.php';


//declare the Array to store user input
$job_array = array();

//declare the Array to store attributes
$attributes = array();

//declare the Array to store attributes scores
$scores = array();

//Number of input fields selected by user on Job_insert.php page
$Number = $_SESSION['Attributes'];

//User Input from Job_insert.php page
$JobName    = $_SESSION['JobName'];
$JobDesc    = $_SESSION['JobDesc'];
$JobDuties  = $_SESSION['JobDuties'];
$RProcess   = $_SESSION['RecruitmentProcess'];
$SPackage   = $_SESSION['SPackage'];
$DName      = $_SESSION['DirectorateName'];

//Store user input Job details into an array
$job_array = array(
            'JobName' =>$JobName,
            'JobDesc'=>$JobDesc,
            'JobDuties' =>$JobDuties,
            'RecruitmentProcess'=>$RProcess,                                                
            'SPackage'=>$SPackage,
            'DirectorateName'=>$DName); 




//Check if the form is not empty then submit details
if(empty($_POST) === false && empty($errors)=== true)
        {
            //submit job details
            job_insert($job_array);                 

            //Store the current jobid into a variable
            $jobid = mysql_insert_id();             

            for($i =0;$i<$Number;$count++)
                {
                    //This is where I am getting stuck
                }

            //redirect
            header('Location: Rank.php');

            exit();                                                                                                                             
        }
    else if(empty($errors) === false)
        {
            //output errors if the errors array is not empty
            echo output($errors);
        }

//вывод форм на экран include 'html/Rank.php';

Ниже приведен пример того, как я сохраняю пользовательский ввод в массив.

<form action = "" method ="POST" enctype="multipart/form-data">
                        <fieldset>
                            <?php

                                    if($Number == 10)
                                        {
                                            echo '<table border="0">';
                                            echo '<th>'.'Attribute'.'</th>';
                                            echo '<th>'.'Score'.'</th>';
                                            //Print the first row of the result set
                                            echo '<tr>';
                                            //First Form
                                                echo '<td>'.'<input type="text" size="35" name="attributes[]">'.'</td>';   
                                                echo '<td>'.'<select id="select1" name ="Score[]">
                                                                <option>-select-</option>
                                                                <option>10</option>
                                                                <option>9</option>
                                                                <option>8</option>
                                                                <option>7</option>
                                                                <option>6</option>
                                                                <option>5</option>
                                                                <option>4</option>
                                                                <option>3</option>
                                                                <option>2</option>
                                                                <option>1</option>
                                                            </select>'.'</td>';            
                                                echo '</tr>'; 

                                                //Second Form
                                                echo '<tr>';
                                                echo '<td>'.'<input type="text" size="35" name="attributes[]">'.'</td>';   
                                                echo '<td>'.'<select id="select2" name = "score[]"">
                                                                <option>-select-</option>
                                                                <option>10</option>
                                                                <option>9</option>
                                                                <option>8</option>
                                                                <option>7</option>
                                                                <option>6</option>
                                                                <option>5</option>
                                                                <option>4</option>
                                                                <option>3</option>
                                                                <option>2</option>
                                                                <option>1</option>
                                                            </select>'.'</td>';            
                                                    echo '</tr>'; 

В основном я храню пользовательский ввод в массиве с именем Атрибуты и в другом массиве, называемом счетом. вставка сведений о задании в таблицу заданий работает нормально, но теперь мне нужно вставить информацию, содержащуюся в массиве атрибутов и оценок, в базу данных mysql. Пожалуйста помогите


person user1783675    schedule 13.03.2013    source источник
comment
В этом коде так много проблем, что трудно помочь. Прежде всего: очищайте ввод перед вставкой данных в базу данных. Не включайте код в середину скрипта. Подготовьте свои библиотеки и включите их. Попробуйте отделить вывод html от логики php.   -  person Ghigo    schedule 13.03.2013
comment
У меня есть функция, которую я использую для очистки ввода, но я делаю это в другом скрипте, а затем вызываю функцию в этом скрипте.   -  person user1783675    schedule 13.03.2013


Ответы (1)


Не совсем уверен, что вы имеете в виду под

//This is where I am getting stuck

Но вы в основном хотите вставить атрибуты для уже созданного задания. Таким образом, вы можете просмотреть список атрибутов и построить для него запрос.

$query = 'INSERT INTO attributes
  (name, score, job_id)
VALUES';

foreach ($_SESSION['Attributes'] as $attribute) {
   $query .= "({$attributep['name']}, {$attribute['score']}, $job_id),";
}

Выполните этот запрос точно так же, как в job_insert.

person tlenss    schedule 13.03.2013
comment
Да, это больше похоже на то, что я хотел бы сделать. Возможно, вы можете объяснить код внутри цикла foreach. Будет ли это автоматически вставлять все значения, содержащиеся в массиве атрибутов и оценок? - person user1783675; 13.03.2013
comment
Он должен построить запрос из всех доступных элементов массива. Приятно слышать, что это работает! - person tlenss; 13.03.2013