Вмъкване в 2 таблици наведнъж в mysql база данни от масиви

Единият се нарича Работа, а другият се нарича Атрибути. Таблицата с атрибути зависи от таблицата за работа, защото една таблица може да има много атрибути. Таблицата със задачи съдържа няколко полета, а именно

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

Таблицата с атрибути съдържа следните полета

id(автоматично нарастване, PRIMARY KEY, AttribName, Score, Jobid(чужд ключ от таблицата с задания).

Броят на атрибутите, които трябва да се въведат за всяка работа, варира, следователно една работа може да има 10 атрибута, докато другата работа може да има 2, 3,4 и т.н. атрибута.

Следното е кодът, който създадох, преди да заседна.

Вмъкване_задание.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);
        }

//извеждане на формулярите на екрана включва '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>'; 

По принцип съхранявам потребителски данни в масив, наречен Attributes, и друг масив, наречен Score. вмъкването на подробностите за работата в таблицата за работа работи добре, но сега трябва да вмъкна информация, съдържаща се в масива Attributes and Score, в базата данни 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