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 из МАССИВА ?
Короче, вот скрипт:
$_POST['lang'] - вмещает в себя имена ВСЕХ селектов (их у меня 20) и имена опций выбранных селектов.
eng=>lev1
ru=>lev3
ua=>
chi=>
И как *** это вставить в базу ??? Хоть убей, не пойму.
Как мне получить переменные $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 написал(а):
Да вчера вечером, от фонаря писал, что бы проверить работоспособность. Ещё нужно множество мелких заточек.
Спустя 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' ... и тд... ?
А чем тебе не нравится вариант с одним столбцом, содержащим 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 для начинающих" не дают. Выглядит как понт, а помощи никакой. Либо ссылку на источник, либо разжовывай. Либо стой в стороне и молча наблюдай.
У него разное кол-во языков может быть. Поэтому ему лучше использовать 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
Не спорю, а вижу свое видение решения проблемы автора темы.
Не спорю, а вижу свое видение решения проблемы автора темы.
Спустя 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`)
_____________
Гнусный социопат с комплексом Бога.