powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сравнить данные из mysql и массив
2 сообщений из 2, страница 1 из 1
Сравнить данные из mysql и массив
    #38312465
black_height
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите мне ошибку или как можно иначе сравнить данные из базы и массив.
Есть форма с checkbox'ами, с помощью пост запроса передаю в скрипт данные о пользователях и пытаюсь сравнить их с данными в таблице mysql.
Нужно: если в checkbox пользователь отмечен то добавить его в таблицу или ничего не делать если он в таблице уже существует
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$otvetstv = $_POST['otvetstv']; //  массив для сравнения
	$info_insert_user = $link->prepare("INSERT INTO dugov_podp VALUES (null,?,?,null,null)");
	$user= $link->prepare("SELECT id__dugov, id_users FROM dugov_podp WHERE id__dugov = ?"); // запрос на выбор пользователей из базы
	$user->bind_param('i', $_POST['id_dug']);
	$user->execute();
	$user->bind_result($id__dugov_from_base, $id_users_from_base); 
	
	foreach ($otvetstv as $key=>$line){ //перебираем значения из массива
		$search = 0; 
		while ($user->fetch()) { //перебираем значения из БД
		if ($otvetstv[$key] == $id_users_from_base) {$search = 1;} // если совпадения найдены, переменная =1
			}
		if ($search == 0) { // если совпадений нет то заносим в базу 
			$info_insert_user->bind_param('ii', $_POST['id_dug'], $otvetstv[$key]);
			$info_insert_user->execute();
			$info_insert_user->store_result();
			}
	   	} 


Итог работы скрипта: берет первое значение из массива, сравнивает с каждой записью из базы (как и должно быть), а последующие значения сравниваются почему-то только с последним значением.
Код: php
1.
$user->execute(); 

делать в каждом цикле foreach - как-то тупо. Подскажите выход из данной ситуации. Спасибо.
...
Рейтинг: 0 / 0
Сравнить данные из mysql и массив
    #38312728
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black_height,

плохо разбираюсь в фрэймворках для работы с базами (работал только с Yii в данном вопросе), а потому поясню как сделать в чистом виде, а вы уж подставьте :).

1. Не надо брать из таблицы ВСЕХ пользователей и прогонять их ещё и в цикле неизвестное количество раз. Представляете, если в базе 10000 юзеров, и у Вас было выбрано 500 из них? :)
2. Проверку можно проводить прямо при вставке записи в базу.

Итак, готовим данные:
Код: php
1.
2.
3.
4.
5.
$data=array();
foreach($_POST['otvetstv'] as $otv){
 $data[]="({$otv}, {$_POST['id_dug']})";
}
$data=implode(', ', $data);


А теперь пишем таким запросом:
Код: php
1.
"INSERT INTO dugov_podp (`id_users`, `id_dugov`) VALUES {$data} ON DUPLICATE KEY UPDATE `id_dugov`=`id_dugov`"



Если ничего не перепутал и правильно понял структуру таблицы, то как-то так :)

P.S. Не проверял, но думаю интерпретатор сильно ругаться не будет :)
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Сравнить данные из mysql и массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]