Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Eur93
47 / 47 / 24
Регистрация: 16.09.2013
Сообщений: 349

Сделать проверку, вывести значение из одной таблицы и отправить в другую таблицу

11.12.2013, 00:57. Показов 1708. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мой вопрос:

У меня есть таблица КЛИЕНТ(CLIENT) и таблица СПРАВОЧНИК(TEST1). В справочнике есть поля: id, страна, город, улица, дом, подъезд. А у клиента помимо других неважных для данной темы полей есть поле АДРЕС, которое содержит тип (int).
Так вот, я хочу, чтобы при регистрации нового клиента, обработчик php сперва проверил, есть ли указанный клиентом адрес в СПРАВОЧНИКЕ, и если нету, то добавить этот адрес в справочник. Далее ID этого адреса присвоить полю АДРЕС таблицы КЛИЕНТ. Если же есть такое сочетание адресов, то просто значение ID этого адреса присвоить полю АДРЕС таблицы КЛИЕНТ.

НАПРИМЕР:

таблица АДРЕС
3 Россия Москва Почтальонская 56 2 (id_test1, t_country, t_city, t_street, t_house, t_entrance)

При регистрации клиент указал в заявке точно такой же адрес.
В таблице КЛИЕНТ есть поле cl_adress, которое имеет тип (int).
В итоге должно получиться, что cl_adress будет содержать значение 3

В моем коде (подправленном) все вроде бы логично, в таблицу СПРАВОЧНИК он добавляет новый адрес, но в таблицу КЛИЕНТ ничего не добавляет, хотя запрос сам по себе правильный - проверял.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    $res1 = mysqli_query($db, 'SELECT `id_test1`, `t_country`, `t_city`, `t_street`, `t_house`, `t_entrance` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // делает проверку, есть ли в таблице СПРАВОЧНИК такой же адрес, который дал в регистрации клиент
    $kolvorows = mysqli_num_rows($res1); // определяет количество строк выведенных записей
    if ($kolvorows == 0) { // если кол-во строк равно нулю, то
        $res2 = mysqli_query($db, 'INSERT INTO test1 VALUES ("'.$id_test1.'", "'.$_POST["cl_country"].'", "'.$_POST["cl_city"].'", "'.$_POST["cl_street"].'", "'.$_POST["cl_house"].'", "'.$_POST["cl_entrance"].'")'); //добавляет новый адрес 
        $res3 = mysqli_query($db, 'SELECT `id_test1` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // выводит индификатор недавно добавленного адреса
        $row = myqsli_fetch_assoc($res3); //обрабатываем все в массиве
        $temp1=$row[0]; //присваеваем переменной $temp1 значение первого элемента массива $row 
        $res6 = mysqli_query($db, 'INSERT INTO client VALUES ("'.$_POST["cl_passport"].'", "'.$_POST["cl_name"].'", "'.$_POST["cl_surname"].'", "'.$_POST["cl_mdname"].'", "'.$_POST["cl_phone"].'", "'.$temp1.'")'); // по идее здесь он должен создать новую строку в таблице КЛИЕНТ, но не выходит
              }
              else { //если количество строк отлично от нуля (т.е. такой адрес уже есть в справочнике)
        $res4 = mysqli_query($db, 'SELECT `id_test1` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // выводит индификатор нашедшего адреса
        $row1 = myqsli_fetch_assoc($res3)); // //обрабатываем все в массиве
                            $temp1=$row[0]; // присваеваем переменной $temp1 значение первого элемента массива $row (id адреса)
        $res6 = mysqli_query($db, 'INSERT INTO client VALUES ("'.$cl_id.'", "'.$_POST["cl_passport"].'", "'.$_POST["cl_name"].'", "'.$_POST["cl_surname"].'", "'.$_POST["cl_mdname"].'", "'.$_POST["cl_phone"].'", "'.$row1["id_test1"].'")'); //  и здесьпо идее здесь он должен создать новую строку в таблице КЛИЕНТ, но не выходит
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.12.2013, 00:57
Ответы с готовыми решениями:

Как совершить проверку и отправить соответствующее значение в таблицу
мой контролер public function update(Request $request) { $user= User::find($request->id); $user_role =...

Скопировать id с одной таблицы на другую таблицу другую форму
Добрый день! Подскажите, как и где написать,чтобы id с одной таблицы скопировался в другую таблицу (связанную), или в запросе надо...

Переместить текст в stringgrid из одной ячейки в другую и сделать проверку
Как переместить текст в stringgrid из одной ячейки в другую (т.е. расставить их в нужном порядке) и при этом при нажатии кнопки проверить в...

3
 Аватар для Доктор Зойдберг
104 / 88 / 21
Регистрация: 19.05.2012
Сообщений: 458
11.12.2013, 10:03
Слишком много не нужных запросов, и кстати вообще никак не безопасно отправлять данные с формы введённые пользователем сразу в запрос, можно даже сказать самоубийство.
И не нужно столько комментариев, 1-2 комментария описывающих что вообще делает данный блок кода. В остальном просто давайте переменным и полям человеческие имена, лучше существительные, и всё будет и так понятно.

Ниже, где вы выполняете запрос чтобы определить последний id в таблице справочник, это не нужно.
Возьмите id_test1 из $res1,+1.

Для проверки то ли вы пытаетесь записать в базу, поместите массив в var_dump

И снизу у вас не ошибка ли?
$temp1=$row[0]
Может $temp1=$row1[0]?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$res1 = mysqli_query($db, 'SELECT `id_test1`, `t_country`, `t_city`, `t_street`, `t_house`, `t_entrance` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // делает проверку, есть ли в таблице СПРАВОЧНИК такой же адрес, который дал в регистрации клиент
 
if (mysqli_num_rows($res1) == 0) { // если кол-во строк равно нулю, то
$res2 = mysqli_query($db, 'INSERT INTO test1 VALUES ("'.$id_test1.'", "'.$_POST["cl_country"].'", "'.$_POST["cl_city"].'", "'.$_POST["cl_street"].'", "'.$_POST["cl_house"].'", "'.$_POST["cl_entrance"].'")'); //добавляет новый адрес 
 
$res3 = mysqli_query($db, 'SELECT `id_test1` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // выводит идентификатор недавно добавленного адреса
 
$row = myqsli_fetch_assoc($res3); //обрабатываем все в массиве
 
$res6 = mysqli_query($db, 'INSERT INTO client VALUES ("'.$_POST["cl_passport"].'", "'.$_POST["cl_name"].'", "'.$_POST["cl_surname"].'", "'.$_POST["cl_mdname"].'", "'.$_POST["cl_phone"].'", "'.$row[0].'")'); // по идее здесь он должен создать новую строку в таблице КЛИЕНТ, но не выходит
}
else { //если количество строк отлично от нуля (т.е. такой адрес уже есть в справочнике)
$res4 = mysqli_query($db, 'SELECT `id_test1` FROM test1 where `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"'); // выводит индификатор нашедшего адреса
 
$row1 = myqsli_fetch_assoc($res3)); // //обрабатываем все в массиве
 
$temp1=$row[0]; // присваеваем переменной $temp1 значение первого элемента массива $row (id адреса)
$res6 = mysqli_query($db, 'INSERT INTO client VALUES ("'.$cl_id.'", "'.$_POST["cl_passport"].'", "'.$_POST["cl_name"].'", "'.$_POST["cl_surname"].'", "'.$_POST["cl_mdname"].'", "'.$_POST["cl_phone"].'", "'.$row1["id_test1"].'")'); //  и здесьпо идее здесь он должен создать новую строку в таблице КЛИЕНТ, но не выходит
}
И по моему можно обойтись одной таблицей.
0
 Аватар для Eur93
47 / 47 / 24
Регистрация: 16.09.2013
Сообщений: 349
11.12.2013, 19:32  [ТС]
Нашел в просторах инета статью про INSERT...SELECT. Типа два запроса в одном, добавляет то что найдет. Ну попробовал "смастерить" его. Тоже лажа. Не могу понять где ошибка.

PHP
1
2
3
4
$res8 = mysqli_query($db, 'INSERT INTO client (`cl_id`, `cl_passport`, `cl_name`, `cl_surname`, `cl_mdname`, `cl_phone`, `cl_adress`) VALUES ( "'.$cl_id.'", "'.$_POST["cl_passport"].'", "'.$_POST["cl_name"].'", "'.$_POST["cl_surname"].'", "'.$_POST["cl_mdname"].'", "'.$_POST["cl_phone"].'", "'.$id_test1.'")
        SELECT `test1.id_test1` 
        FROM test1 
        WHERE `t_country`="'.$_POST["cl_country"].'" and `t_city`="'.$_POST["cl_city"].'" and `t_street`="'.$_POST["cl_street"].'" and `t_house`="'.$_POST["cl_house"].'" and `t_entrance`="'.$_POST["cl_entrance"].'"');
Ах да, и второй вопрос тут же: $cl_id (id клиента) имеет Auto_Increment, читал, что если он использует A_I, то его не нужно добавлять в запросах, он добавляет автоматом, но проблема такова, что без него у меня никакие запросы не работают, а с ним норм
0
 Аватар для Eur93
47 / 47 / 24
Регистрация: 16.09.2013
Сообщений: 349
13.12.2013, 01:59  [ТС]
Выше вопрос снимается. Неверный запрос.

Студент-с, благодаря твоей подсказке-массиву var_dump все таки нашел ошибку. Даже стыдно в ней признаваться
я вместо mysqli_getch_accos
написал myQsli_getch_accos

да и array нужно было брать вместо accos
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.12.2013, 01:59
Помогаю со студенческими работами здесь

Из одной таблицы создать другую таблицу
#include <iostream> //#include <cstdlib> #include <ctime> #include <iomanip> #include <cmath> //#define MAX_RAND 0x7fff ...

Из одной таблицы вычесть в другую таблицу
есть таблица производство: Количество_товараTextBox из производства Количество_товараNumericUpDown из сырья я хочу из таблицы...

Запись данных одной колонки таблицы в другую таблицу
Пытаюсь из таблицы purchases добавить в users все суммы. В purchases есть колонки sum и userID, а в users id и balance. Как записать в...

Из одной таблицы БД(foxpro) перенести в другую таблицу БД(mssql).
Нужно несколько столбцов из одной таблицы базы данных(foxpro) перенести в другую таблицу бд (mssql), тоесть по нажатию на кнопку выбираются...

Как из одной таблицы перенести строку в другую таблицу
Не могу перенести строку из одной таблицы в другую. begin Table1.Open; Table.Open; Table1.FieldByName('name').AsString...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru