PHP. Запись в MySQL двух массивов

262
12 июля 2018, 05:50

Жизнь злодейка заставила меня разбираться с MySQL В общем, надо составить базу данных. В базе создается таблица с введённым из формы номером.

С этим я успешно покончил и даже полностью это осознал.
Теперь надо в форме ввести два соответствующих числа до 10 раз: 1)На какой номер указывает(от 1 до 699) 2)Расположение указателя (условная система координат из 1-2-...-9-a по X и 1-2-...-6 по Y) (указателей может быть несколько, не известно сколько)

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

Мне казалось, что было бы крайне легко использовать две формы и вводить с новой строки данные для каждого указателя. В одной форме - куда указывает, в другой - где находится. Ну и эти данные разбить на строки и в массив загнать

Система у меня работает так: сначала записывает несколько значений "куда" в один столбец, потом записывает "где находится" в другой, но не от начала, а начинает с того места, где закончилось "куда" (в принципе, я уже потом понял, что так и должно быть, но сначала не догадывался)

Пытался придумать, как значения "где находится" вставлять обновлением, но там совсем всё страшно и не получается таким же способом их вставлять(обновлять)
Код:

   <?php 
$Link = mysql_connect('localhost', '******', '****');
if(!$Link) echo "Не удалось подключится к серверу";
else
{
    mysql_select_db('*****');
    $LO = 'a'.$_POST['LO'];
    $nl_char="\n";
    $arr1=explode($nl_char,$_POST['to']);
    $arr2=explode($nl_char,$_POST['map']);
    $sql = "CREATE TABLE $LO (VedetK  VARCHAR(3) CHARACTER SET utf8 NOT NULL, Location VARCHAR(2) CHARACTER SET utf8 NOT NULL)";
    if (mysql_query($sql))
        echo "Создание таблицы завершено \n";
    else
        echo "Таблицу создать не удалось  \n";
    $query1 = "INSERT INTO $LO (VedetK) VALUES (" . implode("), (", $arr1) . ")";

    if (mysql_query($query1))
        echo "всатвка удалась \n";
    else
        echo "не получилось вставить \n";
    $query2 = "UPDATE $LO (Location) VALUES (" . implode("), (", $arr2) . ")";

    if (mysql_query($query2))
        echo "всатвка 2 удалась \n";
    else
        echo "не получилось вставить 2 \n";
}
?>

Была идея объединить массивы с помощью array_combine, но дальнейшие действия у меня уже покрыты тайной, потому как не имею представления о вставке таких данных
В принципе, без разницы как записывать в формы ввода эти данные, можно хоть "куда","где", просто тут тоже не понимаю плана действий в дальнейшем

Поэтому прошу помощи с любым вариантом внесения сразу двух этих параметров в базу данных (либо сначала одного, а потом другого с первой строчки) Альтернативный вариант: Как внести сразу два этих параметра (и как лучше настроить форму получения(в одной форме получать два параметра или в разных)), как внести сразу два параметра несколько раз?

Гугление не сильно помогло со всем этим (Про безопасность и прочее лучше не упоминать, делается для личного и, в основном, разового использования)

Answer 1

Например так

<?php
$Link = mysql_connect('localhost', '******', '****');
function insert($insData)
{
    $columns = implode(", ", array_keys($insData));
    $escaped_values = array_map('mysql_real_escape_string', array_values($insData));
    $values = implode(", ", $escaped_values);
    $sql = "INSERT INTO `table_name` ($columns) VALUES ($values)";
    mysql_query($sql);
}
if(!$Link) echo "Не удалось подключится к серверу";
else
{
    mysql_select_db('*****');
    $LO = 'a'.$_POST['LO'];
    $nl_char="\n";
    $arr1=explode($nl_char,$_POST['to']);
    $arr2=explode($nl_char,$_POST['map']);
    $sql = "CREATE TABLE $LO (VedetK  VARCHAR(3) CHARACTER SET utf8 NOT NULL, Location VARCHAR(2) CHARACTER SET utf8 NOT NULL)";
    if (mysql_query($sql))
        echo "Создание таблицы завершено \n";
    else
        echo "Таблицу создать не удалось  \n";
    if(count($arr1) != count($arr2)) {
        echo "массивы разного размера!";
        exit();
    }
    foreach ($arr1 as $key=>$value){
        $data = [
            'VedetK' => $arr1[$key],
            'Location' => $arr2[$key],
        ];
        insert($data);
    }

    if (mysql_query($query2))
        echo "всатвка 2 удалась \n";
    else
        echo "не получилось вставить 2 \n";

}
?>
Answer 2

Вот пример стандартного синтаксиса на вставку

INSERT INTO TABLE1(COLUMN1, COLUMN2, ....) VALUES (VALUE1, VALUE2..)

Обычно сначала мы подготавливаем массив вида

$insData = [
    'Location' => 'некое значение 1',
    'VedetK' => 'некое значение 2',
    ........
]

Где ключи массива - это имена полей в таблице, а его значения - те значения, которые мы хотим вставить в таблицу.

Затем мы производим вставку следующим образом

$columns = implode(", ",array_keys($insData));
$escaped_values = array_map('mysql_real_escape_string', array_values($insData));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `table_name` ($columns) VALUES ($values)";
mysql_query($sql)
READ ALSO
Не заносятся координаты с бд в карту

Не заносятся координаты с бд в карту

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

241
Монитор для папки

Монитор для папки

Нужно словить событие удаления(создания) файлаПервая идея, написать прогу которая циклически проверяет файлы в директории

248
Разные проходы по коллекции в С++

Разные проходы по коллекции в С++

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

263
Выбор библиотеки для проекта

Выбор библиотеки для проекта

Требуется примерно определить графическу библиотеку на C++ для следующего проекта

243