[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: foreach()
RCuPeR
Фореч получает данные в таком виде:


eng=>lev1
ru=>lev3
ua=>
chi=>
spa=>
ara=>
hin=>
por=>
ja=>
de=>
fr=>lev4
kor=>
ita=>
tur=>lev1
heb=>
nor=>lev3
dan=>
swe=>lev2
fin=>
pl=>


Где "por=>" - имя селекта.
Где "nor=>lev3" - Имя селекта + опция которую я выбрал.

Нужно эти данные запихнут в БД с такой структурой:

CREATE TABLE `lang` (
`id` int(11) NOT NULL,
`eng` varchar(5) NOT NULL,
`ru` varchar(5) NOT NULL,
`ua` varchar(5) NOT NULL,
`chi` varchar(5) NOT NULL,
`spa` varchar(5) NOT NULL,
`ara` varchar(5) NOT NULL,
`hin` varchar(5) NOT NULL,
`por` varchar(5) NOT NULL,
`ja` varchar(5) NOT NULL,
`de` varchar(5) NOT NULL,
`fr` varchar(5) NOT NULL,
`kor` varchar(5) NOT NULL,
`ita` varchar(5) NOT NULL,
`tur` varchar(5) NOT NULL,
`heb` varchar(5) NOT NULL,
`nor` varchar(5) NOT NULL,
`dan` varchar(5) NOT NULL,
`swe` varchar(5) NOT NULL,
`fin` varchar(5) NOT NULL,
`pl` varchar(5) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM DEFAULT CHARSET=cp1251;


foreach($_POST['lang'] as $key => $value){
$key = stripcslashes($key);

$insert = mysql_query("INSERT INTO `lang`
(`eng`,`ru`,`ua`,`chi`,`spa`,`ara`,`hin`,`por`,`ja`,`de`,`fr`,`kor`,`ita`,`tur`,`heb`,`nor`,`dan`,`sw e`,`fin`,`pl`)
VALUES(
хз чё сюда вставлять и как вообще построить запрос)"
) or die(mysql_error());
}




Спустя 3 минуты, 10 секунд (13.02.2011 - 16:53) Lenarfate написал(а):
нафига тебе цикл здесь?

Спустя 1 минута, 19 секунд (13.02.2011 - 16:55) RCuPeR написал(а):
Хм...Вообще-то не нада. Не подумал...

Ну а потом как ?

VALUES(
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."')

Спустя 1 минута, 59 секунд (13.02.2011 - 16:57) Lenarfate написал(а):
ну, подставляешь значение получаемой переменной вместо твоего $value и все. в чем вопрос-то?

Спустя 6 минут, 4 секунды (13.02.2011 - 17:03) RCuPeR написал(а):
Не понял... $value хранит все выбранные отции. Мне нужно их добавить в базу в соответствии с выбраным языком.

Спустя 19 секунд (13.02.2011 - 17:03) alex12060 написал(а):
Ты все с языком тупишь?
Вообще, покажи. как таблица выглядит.

Спустя 4 минуты, 31 секунда (13.02.2011 - 17:08) RCuPeR написал(а):
alex12060, Прикинь ?! Это ппц какой-то!

Нужно что бы добавлялось вот так !

eng=>lev1
ru=>lev3
ua=>
chi=>
spa=>
ara=>
hin=>
por=>
ja=>
de=>
fr=>lev4
kor=>
ita=>
tur=>lev1
heb=>
nor=>lev3
dan=>
swe=>lev2
fin=>
pl=>


VALUES(
'lev1',
'lev3',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'".$value."',
'lev4',
'".$value."',
'".$value."',
'lev1',
'".$value."',
'".$value."',
'lev3',
'".$value."',
'lev2',
'".$value."')

Спустя 1 минута, 51 секунда (13.02.2011 - 17:09) Lenarfate написал(а):
не нужно все хранить в одном массиве. лишние действия

Спустя 7 минут, 14 секунд (13.02.2011 - 17:17) RCuPeR написал(а):
А как поступить ?!

Спустя 8 минут, 38 секунд (13.02.2011 - 17:25) Lenarfate написал(а):
обычно. получаешь пост данные, или как там у тебя, и добавляешь в базу.

пример. псевдокод
insert into `table` set `a` = $a, `b` = $b, `c` = $c

Спустя 12 минут, 25 секунд (13.02.2011 - 17:38) RCuPeR написал(а):
Фух...Это проклятие !
Как мне получить переменные $a, $b, $c из МАССИВА ?

Короче, вот скрипт:

foreach($_POST['lang'] as $key => $value)
$key = stripcslashes($key);

$insert = mysql_query("INSERT INTO `lang`
(`eng`,`ru`,`ua`,`chi`,`spa`,`ara`,`hin`,`por`,`ja`,`de`,`fr`,`kor`,`ita`,`tur`,`heb`,`nor`,`dan`,`sw e`,`fin`,`pl`)
VALUES(
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."',
'"
.$value."')") or die(mysql_error());


$_POST['lang'] - вмещает в себя имена ВСЕХ селектов (их у меня 20) и имена опций выбранных селектов.

eng=>lev1
ru=>lev3
ua=>
chi=>

И как *** это вставить в базу ??? Хоть убей, не пойму.

Спустя 44 минуты, 27 секунд (13.02.2011 - 18:22) RCuPeR написал(а):
Все умерли ?

Спустя 50 минут, 40 секунд (13.02.2011 - 19:13) Invis1ble написал(а):
$insert = '';

foreach($_POST['lang'] as $lang)
$insert .= "'" . mysql_real_escape_string($lang) . "',";

mysql_query("INSERT INTO `lang` (`eng`,`ru`,`ua`,`chi`,`spa`,`ara`,`hin`,`por`,`ja`,`de`,`fr`,`kor`,`ita`,`tur`,`heb`,`nor`,`dan`,`sw e`,`fin`,`pl`) values (" . substr($insert, 0, -1)) . ")") or die(mysql_error());


так ты хотел?

Спустя 10 минут, 24 секунды (13.02.2011 - 19:23) RCuPeR написал(а):
Эм...Наверное, щас попробую.

Спустя 4 минуты, 13 секунд (13.02.2011 - 19:27) RCuPeR написал(а):
Ееее! Всё получилось ! большое тебе спасибо !

Спустя 14 часов, 32 минуты, 19 секунд (14.02.2011 - 10:00) linker написал(а):
Таки решил пойти по наиболее кривому пути? Не внемлил тому, что я тебе писал?

Спустя 17 минут, 50 секунд (14.02.2011 - 10:18) RCuPeR написал(а):
Да вроде бы нет =)

Подведу небольшой итог:
Вот форма, точнее небольшой кусок селков, стоит обратить внимание на их имена.

                            <label>Английский</label>
<select
name="lang[eng]">
<option
value="" selected="selected">Не владею</option>
<option
value="lev1">Носитель языка</option>
<option
value="lev2">Средний</option>
<option
value="lev3">Средний продвинутый</option>
<option
value="lev4">Высший</option>
</select><br /><br />
<label>
Русский</label>
<select
name="lang[ru]">
<option
value="" selected="selected">Не владею</option>
<option
value="lev1">Носитель языка</option>
<option
value="lev2">Средний</option>
<option
value="lev3">Средний продвинутый</option>
<option
value="lev4">Высший</option>
</select><br /><br />
<label>
Украинский</label>
<select
name="lang[ua]">
<option
value="" selected="selected">Не владею</option>
<option
value="lev1">Носитель языка</option>
<option
value="lev2">Средний</option>
<option
value="lev3">Средний продвинутый</option>
<option
value="lev4">Высший</option>
</select><br /><br />


Далее, кусок кода обработчика, который работает с селектами:
$insert = '';

foreach($_POST['lang'] as $lang)
$insert .= "'" . mysql_real_escape_string($lang) . "',";
$id_for_lang = mysql_insert_id();

$insert = mysql_query("INSERT INTO `lang` (`id_user`,`eng`,`ru`,`ua`,`chi`,`spa`,`ara`,`hin`,`por`,`ja`,`de`,`fr`,`kor`,`ita`,`tur`,`heb`,`nor` ,`dan`,`swe`,`fin`,`pl`) values (".$id_for_lang."," . substr($insert, 0, -1) . ")") or die(mysql_error());

if($insert) {echo 'OK';} else {echo 'ERROR';} exit();


Структура БД:
CREATE TABLE `lang` (
`id` int(11) NOT NULL auto_increment,
`id_user` int(100) NOT NULL,
`eng` varchar(5) NOT NULL,
`ru` varchar(5) NOT NULL,
`ua` varchar(5) NOT NULL,
`chi` varchar(5) NOT NULL,
`spa` varchar(5) NOT NULL,
`ara` varchar(5) NOT NULL,
`hin` varchar(5) NOT NULL,
`por` varchar(5) NOT NULL,
`ja` varchar(5) NOT NULL,
`de` varchar(5) NOT NULL,
`fr` varchar(5) NOT NULL,
`kor` varchar(5) NOT NULL,
`ita` varchar(5) NOT NULL,
`tur` varchar(5) NOT NULL,
`heb` varchar(5) NOT NULL,
`nor` varchar(5) NOT NULL,
`dan` varchar(5) NOT NULL,
`swe` varchar(5) NOT NULL,
`fin` varchar(5) NOT NULL,
`pl` varchar(5) NOT NULL,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=3 ;


Довольно удобное решение.

Спустя 2 минуты, 42 секунды (14.02.2011 - 10:20) Snus написал(а):
RCuPeR
`id_user` int(100) NOT NULL, 
?!?! Ты себе представляешь число со 100 нулями?!

Спустя 2 минуты, 7 секунд (14.02.2011 - 10:22) RCuPeR написал(а):
biggrin.gif Да вчера вечером, от фонаря писал, что бы проверить работоспособность. Ещё нужно множество мелких заточек.

Спустя 4 минуты, 13 секунд (14.02.2011 - 10:27) linker написал(а):
Цитата
Ещё нужно множество мелких заточек.
По хорошему, тут нужно все переделывать.

Спустя 17 минут, 8 секунд (14.02.2011 - 10:44) RCuPeR написал(а):
Почему ? Зачем ? Всё же работает. Для моего уровня достаточно.

Спустя 8 минут, 57 секунд (14.02.2011 - 10:53) Snus написал(а):
RCuPeR
А чем тебе не нравится вариант с одним столбцом, содержащим serialize от твоего массива 'en' => 'lev1' ... и тд... ?

Спустя 9 минут, 17 секунд (14.02.2011 - 11:02) RCuPeR написал(а):
Даже не знаю, слишком сложно, наверное, я и с этим пока не особо-то разобрался.

Спустя 3 минуты, 19 секунд (14.02.2011 - 11:05) Snus написал(а):
RCuPeR
Что сложного-то?

Таблица с юзерами
id | log | pwd | mail | lang


$arr = array(ТВОЙ МАССИВ С ЯЗЫКАМИ);
$lang = serialize($arr);
$query = "INSERT INTO `users` (`log`,`pwd`,`mail`,`lang`) VALUES ('$log','$pwd','$mail','$lang')";
mysql_query($query) or die(mysql_error());


А доставать из БД так
SELECT `lang` FROM `users` WHERE `id` = '1'

$lang = unserialize(mysql_result($sql, 0));

И он вернет твой массив

Спустя 18 минут, 17 секунд (14.02.2011 - 11:24) RCuPeR написал(а):
Но понимаешь, тут же у каждого языка есть свой уровень.

Спустя 1 минута, 2 секунды (14.02.2011 - 11:25) Snus написал(а):
RCuPeR
Так твой массив вроде содержит всю нужную тебе информацию.

Спустя 1 минута, 22 секунды (14.02.2011 - 11:26) linker написал(а):
И даже serialize() - неправильно. Читаем про нормализацию баз данных.

Спустя 2 минуты, 38 секунд (14.02.2011 - 11:29) Snus написал(а):
linker
У него разное кол-во языков может быть. Поэтому ему лучше использовать serialize. А на будущее такие ответы типа "Читаем про нормализацию баз данных. " на форумах "PHP для начинающих" не дают. Выглядит как понт, а помощи никакой. Либо ссылку на источник, либо разжовывай. Либо стой в стороне и молча наблюдай.

Спустя 6 минут, 11 секунд (14.02.2011 - 11:35) linker написал(а):
Snus
Еще раз предлагаю почитать про нормализацию. Если ты не знаешь что такое нормализация, то предлагаю почитать, тема объемная, чтобы тут ее расписывать. Поэтому еще какая польза будет - самому найти и изучить данную тему, чтобы в будущем не пороть глупостей.

Спустя 2 минуты, 51 секунда (14.02.2011 - 11:38) Snus написал(а):
linker
Я имел ввиду не себя.

Спустя 1 минута, 32 секунды (14.02.2011 - 11:39) linker написал(а):
А я для всех, не важно какой уровень знаний. Собственно с этого нужно начинать прежде чем работать с базами данных, это теория, а без нее ну никак.

Спустя 1 минута, 8 секунд (14.02.2011 - 11:40) Snus написал(а):
linker
Теорию тоже кто-то написал. И это не означает, что он не ошибся. Для каждой ситуации - свой подход. Будешь спорить?

Спустя 3 минуты, 40 секунд (14.02.2011 - 11:44) linker написал(а):
Snus
Опять пытаешься спорить с очевидными фактами? Сие далеко не глупые люди придумывали, гораздо умнее тебя и меня вместе взятых. Может ты еще решишь поспорить, например, с Кнутом или Корменом. А фигли.

Спустя 9 минут, 2 секунды (14.02.2011 - 11:53) Snus написал(а):
linker
Не спорю, а вижу свое видение решения проблемы автора темы. smile.gif

Спустя 23 минуты, 24 секунды (14.02.2011 - 12:16) linker написал(а):
Решение может иметь одно важное свойство - неправильность. Как я вижу:
CREATE TABLE `languages`(
`id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
`lang` VARCHAR(32) NOT NULL,
`code` VARCHAR(3) NOT NULL,
UNIQUE (`id`)
)
TYPE = MYISAM

CREATE TABLE `users`(
`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
`login` VARCHAR( 64 ) NOT NULL,
UNIQUE (`id`)
)
TYPE = MYISAM

CREATE TABLE `userlang`(
`userid` SMALLINT UNSIGNED NOT NULL
`langid` TINYINT UNSIGNED NOT NULL,
`level` TINYINT UNSIGNED NOT NULL DEFAULT '0'
) TYPE = MYISAM

ALTER TABLE `userlang` ADD INDEX(`userid`, `langid`)
Разбираем сие и смотрим какие оно выгоды несет.


_____________
Гнусный социопат с комплексом Бога.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.