Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1 / 1 / 0
Регистрация: 12.03.2012
Сообщений: 57
1
MySQL

Insert в несколько строк из одной формы

02.07.2014, 19:16. Показов 2524. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите пожалуйста разобраться

r_name - идентификатор
id_map - не суть
date3, date4 - даты

задача, из одной формы добавить в одну таблицу две (и более) строки
r_name | id_map | date3
r_name | id_map | date4

HTML5
1
2
3
4
5
6
7
<form method=\"POST\" name=\"add-map\" enctype=\"multipart/form-data\" class=\"\" action=\"php_scripts/add_maps.php\" id=\"edo\">
<input type=\"text\" name=\"r_name\" placeholder=\"Р\"><br>
<input type=\"text\" name=\"id_map\" placeholder=\"Номер карты\"><br>
<input type=\"date\" name=\"date3\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date4\" placeholder=\"Дата выхода\"><br>
<input type=\"submit\" name=\"add-map\" value=\"Добавить\" class=\"send\">
</form>
add_maps.php

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<? 
session_start(); 
 
include("../config/bd.php");
 
IF(isset($_POST['add-map']))
    {
    $r_name = $_POST['r_name'];
    $id_map = $_POST['id_map'];
    $date3 = $_POST['date3'];
    $date4 = $_POST['date4'];
    $user = $_SESSION['login'];
    
    IF (!empty($date3))
        {
        $sql3=mysql_query("SELECT COUNT(*) FROM `maps` WHERE `id_map` = '$id_map' AND `date1` = '$date3'",$db) OR die(mysql_error());
        $row3= mysql_fetch_array($sql3);
        $num3 = $row3[0];
        
        IF ($num3 != 0)
            {
                echo "занято";
            } ELSE {
                $query="INSERT INTO `maps` (`r_name`, `id_map`, `date1`, `user`) VALUES ('$r_name', '$id_map', '$date3', '$user')";
                mysql_query($query);
                echo "принятно";
            }
        }
        
    IF (!empty($date4))
        {
        $sql4=mysql_query("SELECT COUNT(*) FROM `maps` WHERE `id_map` = '$id_map' AND `date1` = '$date4'",$db) OR die(mysql_error());
        $row4= mysql_fetch_array($sql4);
        $num4 = $row4[0];
        
        IF ($num4 != 0)
            {
                echo "занято";
            } ELSE {
                $query="INSERT INTO `maps` (`r_name`, `id_map`, `date1`, `user`) VALUES ('$r_name', '$id_map', '$date4', '$user')";
                mysql_query($query);
                echo "принятно";
            }
        }
    }
?>
в итоге добавляется только строка с последним инсертом
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2014, 19:16
Ответы с готовыми решениями:

Несколько запросов INSERT на одной странице
Добрый день! Я не понимаю, почему не работает код. Может быть из-за того что на одной странице...

INSERT INTO несколько строк
Здравствуйте. Следующий код вставляет только одну первую запись, подскажите плз, как должна...

Insert into несколько строк из 2 таблиц
Здравствуйте, Есть таблицы: 1) Продажи: Код_операции | Код_товара 1 ...

несколько строк из одной
есть у меня такая строка к примеру: King-&gt;Kochar-&gt;Whalen как получить из это строки такую запись:...

8
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
02.07.2014, 20:02 2
Заборы какие то.
Сначала из полученных данных формируешь массив. Потом в цикле подставляешь в запрос.
Допустим у тебя будет 10 полей с датой и одно с пользователем:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$user = $_SESSION['login'];
$date = array();
for($i=1;$i<=10;$i++)
    {
        if(!empty($_SESSION["date$i"])) $date[] = $_SESSION["date$i"];
    }
//а дальше заноси в БД
for($i=0;$i<count($date);$i++)
    {
        $query="INSERT INTO `maps` (`date`, `user`) VALUES ('".$date[$i]."', '$user')";
        mysql_query($query);
        echo "принятно";
    }
 
?>

Пример конечно очень упрощён, но логика я думаю понятна
1
1 / 1 / 0
Регистрация: 12.03.2012
Сообщений: 57
03.07.2014, 12:43  [ТС] 3
спасибо за помощь!)

есть еще один пункт который забыл указать в самом начале, некоторые поля date могут быть пустыми, в таблицу соответственно должны попадать только не пустые, как это можно реализовать в цикле?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if(isset($_POST['add-map']))
    {
    $r_name = $_POST['r_name'];
    $id_map = $_POST['id_map'];
    $user = $_SESSION['login'];
    $date = array(1 => $_POST['date1'],
                    2 => $_POST['date2'],
                    3 => $_POST['date3'],
                    4 => $_POST['date4'],
                    5 => $_POST['date5'],
                    6 => $_POST['date6'] );
    
    for($i=1;$i<=6;$i++)
        {
        if(!empty($_SESSION["date$i"])) {$date[] = $_SESSION["date$i"];}
        }
                //а дальше заноси в БД
    for($i=0;$i<count($date);$i++)
        {
        $query="INSERT INTO `maps` (`r_name`, `id_map`, `date1`, `user`) VALUES ('$r_name', '$id_map', '".$date[$i]."', '$user')";
        mysql_query($query);
        echo "принятно";
        }
 
 
    }
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 12:47 4
В моём примере проверка на пустоту учтена. Но нет проверки на не верное значение.
и зачем ты сделал это?
PHP
1
2
3
4
5
6
$date = array(1 => $_POST['date1'],
                    2 => $_POST['date2'],
                    3 => $_POST['date3'],
                    4 => $_POST['date4'],
                    5 => $_POST['date5'],
                    6 => $_POST['date6'] );
должно быть
PHP
1
$date = array()
а в формах
HTML5
1
2
3
4
5
6
<input type=\"date\" name=\"date1\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date2\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date3\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date4\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date5\" placeholder=\"Дата выхода\"><br>
<input type=\"date\" name=\"date6\" placeholder=\"Дата выхода\"><br>
И зачем тут слеши кстати?
0
1 / 1 / 0
Регистрация: 12.03.2012
Сообщений: 57
03.07.2014, 12:57  [ТС] 5
так я сделал потому что до этого не работал инсерт, когда я прописал элементы массива - заработало, слэши стоят, потому что форма под условием
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 13:05 6
Не не так как раз не будет проверки на пустату
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// возможно я тут что то не учёл
$date = array();
for($i=1;$i<=6;$i++)
    {
        if(!empty($_SESSION["date$i"])) $date[] = $_SESSION["date$i"];
    }
// возможно я тут что то не учёл
 
// поэтому сначала распечатай $date
print_r($date);
 
for($i=0;$i<count($date);$i++)
    {
        $query="INSERT INTO `maps` (`date`, `user`) VALUES ('".$date[$i]."', '$user')";
        mysql_query($query);
        echo "принятно";
    }
0
1 / 1 / 0
Регистрация: 12.03.2012
Сообщений: 57
03.07.2014, 13:29  [ТС] 7
Пусто, данные не получены :

Array ()
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
03.07.2014, 16:30 8
$_SESSION["date$i"] ну значит $i не подставляется. Поиграйся со значениями. Через час другой буду за компом с денвером проверю что там не так

Добавлено через 6 минут
В любом случае будет работать так
PHP
1
2
3
4
5
6
$date = array();
if(!empty($_SESSION["date1"])) $date[] = $_SESSION["date1"];
if(!empty($_SESSION["date2"])) $date[] = $_SESSION["date2"];
if(!empty($_SESSION["date3"])) $date[] = $_SESSION["date3"];
//.....................
if(!empty($_SESSION["date100500"])) $date[] = $_SESSION["date100500"];
но если 100500 инпутов писать запарочно

Добавлено через 2 часа 15 минут
Проверил всё работает на ура с постом по крайней мере. Может ты не правильно в сессию занёс?
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<form method="post">
<input type="date" name="date1" placeholder="Дата выхода"><br>
<input type="date" name="date2" placeholder="Дата выхода"><br>
<input type="date" name="date3" placeholder="Дата выхода"><br>
<input type="date" name="date4" placeholder="Дата выхода"><br>
<input type="date" name="date5" placeholder="Дата выхода"><br>
<input type="date" name="date6" placeholder="Дата выхода"><br>
<input type="submit" value="OK" />
</form>
<?php
$date = array();
for($i=1;$i<=6;$i++)
    {
        if(!empty($_POST["date$i"])) $date[] = $_POST["date$i"];
    }
 
print_r($date);

А ну вот теперь ясно у тебя пост у меня в примере сессия. Ну ладно я не увидел )) я же пример писал а ты куда смотрел то?))
1
1 / 1 / 0
Регистрация: 12.03.2012
Сообщений: 57
03.07.2014, 16:38  [ТС] 9
Спасибо)
Я когда увидел незнакомые обороты не совсем внимателен был, с массивами дела не имел еще))
все прекрасно работает)
0
03.07.2014, 16:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2014, 16:38
Помогаю со студенческими работами здесь

Несколько строк в одной ячейке
Как сделать чтобы в одной ячейке по нажатию Enter курсор не перепрыгивал на другую ячейку, а...

Несколько строк в одной через запятую
Доброго времени суток. Delphi, СУБД BDE, Существует данная таблица: группа имя ...

DataGridView несколько строк в одной ячейке
как сделать чтобы в DataGridView в ячейке было несколько строк текста, например: Фамилия, Имя,...

Несколько строк в одной ячейке таблицы
Для наглядности на форму требуется поместить таблицу каждая из ячеек которой может содержать от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru