|
|
|
| Есть форма:
<select name ='category[]' size="7" multiple="MULTIPLE">
|
Пытаюсь записать значения в переменную:
$category = print_r($_POST['category']);
|
Но записывает только самый последний выбор, а не все сделанные, подскажите, что делаю не так. | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 12:53)
| |
$category = $_POST['category'];
print_r($category);
|
ы? | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 13:16)
| |
Array ( [0] => 3 [1] => 4 [2] => 5 )
|
Отлично, значит все заносится, тогда перефразирую свой вопрос:
как эти данные записать в поле таблицы?
сейчас это поле у меня такое:
`id_category` int(11) NOT NULL,
|
| |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 13:22)
| | в одно поле можно только одно число записать.
Или Вам нужно создать несколько строк по числу выбранных элементов селекта? | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 13:28)
| |
Или Вам нужно создать несколько строк по числу выбранных элементов селекта?
|
Честно говоря не совсем понял о чем вы.
Ситуация такая - в данной форме идет специализация предприятия. Специализаций у предприятия, как уже понятно - может быть несколько.
У меня есть таблица:
id_category
name - название категории
id_parent
из нее как раз и берутся значения для формы с параметром MULTIPLE.
Так вот выбранные значения мне нужно каким-то образом записать в таблицу преприятий, она имеет такой вид:
id_enterprise
name
boss
и т.д.
Вот собственно вот так. Как мне это реализовать? | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 13:35)
| | up | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 13:55)
| | up | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 13:35)
| | Добавить еще одну таблицу связки предприятий и категорий.
ent_cat (id_category, id_enterprise)
строка в ней будет означать привязку некоторого предприятия к некоторой категории. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 15:59)
| | Ок, понял, но вопрос собственно все равно остается - как мой массив записать в новую таблицу? То что по одному значению на строку я понимаю, но как это именно написать - не пойму. | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 16:06)
| | Например так:
$sql = "INSERT INTO `ent_cat` (id_ent, id_cat) ";
$sep = ' VALUES ';
$id_ent = 20; // к примеру
foreach($category as $cat)
{
$cat = intval($cat);
$sql .= "$sep\r\n($id_ent,$cat)";
$sep = ',';
}
|
echo $sql; | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 17:35)
| | А можно это как-то расшифровать или описать по строчно что делается, а то честно говоря не понятно. | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 19:58)
| | >А можно это как-то расшифровать или описать по строчно что делается, а то честно говоря не понятно.
Каждую строку? Я ж устану...
Давайте так. Вы начнете построчно описывать., и остановитесь, когда будет совсем невмоготу.
Я продолжу. Две строки готов откомментировать. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 17:35)
| | Извиняюсь за offtop, но как тут не "отомстить" - Trianon, проще надо быть, а то ввели в заблуждение респондента. :) | |
|
|
|
|
|
|
|
для: sim5
(29.07.2008 в 20:11)
| | Я был уверен тогда, Вы поймете, что моя скрытая ирония направлена не на Вас, а на того, кого Вы позже обозначили как UserY . А в моей реплике прочтете искреннее сочувствие. Похоже, ошибся.
Приношу извинения. | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 20:21)
| | Trianon, ну не надо так близко к сердцу, я ведь тоже в кавычках выразился - шутка, думал поймете. ;-) | |
|
|
|
|
|
|
|
для: sim5
(29.07.2008 в 20:26)
| | Кто близко к сердцу? :) | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 20:31)
| | Значит мне показалось, спутал код с комментарием. :) Ладно, а то и так намусорили, бедный Хеопс, опять ему веником... ) | |
|
|
|
|
|
|
|
для: sim5
(29.07.2008 в 20:36)
| |
$sql = "INSERT INTO `ent_cat` (id_ent, id_cat) ";
$sep = ' VALUES ';
$id_ent = 20; // к примеру
foreach($category as $cat)
{
$cat = intval($cat);
$sql .= "$sep\r\n($id_ent,$cat)";
$sep = ',';
}
echo $sql;
|
итак:
$sql = "INSERT INTO `ent_cat` (id_ent, id_cat) "; - это мы указываем что куда записывать. Именно указываем, но не записываем, я правильно понял?
$sep = ' VALUES '; - честно говоря не совсем понятно что именно значит VALUES
$id_ent = 20; // к примеру - ну это порядковый номер предприятия - его из базы тянуть как я понимаю.
foreach($category as $cat)
{
$cat = intval($cat);
$sql .= "$sep\r\n($id_ent,$cat)";
$sep = ',';
}
вот эту часть мне надо объяснить, так как нифига не понятно.
echo $sql; - ну это выводим результат))) | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 20:54)
| | $sql - это тот запрос, который запишет в БД нужную информацию.
foreach - цикл, пока есть необработанные элементы $category - он выполняется.
В цикле мы достраиваем запрос до нужного нам, добавляя обработку элемента массива.
.= добавление в переменную строки в конец.
Способ красивый и универсальный, но под конкретный вариант можно короче написать, наверное. | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 20:54)
| | >итак:
>$sql = "INSERT INTO `ent_cat` (id_ent, id_cat) "; - это мы указываем что куда записывать. Именно указываем, но не записываем, я правильно понял?
Нет. неправильно.
Здесь мы переменной $sql присваиваем текст INSERT INTO `ent_cat` (id_ent, id_cat) .
Простой переменной присваиваем простой текст.
Текст этот, правда, представляет из себя начало запроса на языке SQL.
>$sep = ' VALUES '; - честно говоря не совсем понятно что именно значит VALUES
VALUES - это правильное продолжение текста запроса на языке SQL.
>$id_ent = 20; // к примеру - ну это порядковый номер предприятия - его из базы тянуть как я понимаю.
Я не знаю, из базы или нет.
Вы сказали, что у Вас затруднения с тем, чтобы добавить в БД информацию о том, что некоторое предприятие соответствует нескольким категориям. Откуда брать категории Вы указали. А откуда брать id предприятия - знаете только Вы.
>foreach($category as $cat)
>{
> $cat = intval($cat);
> $sql .= "$sep\r\n($id_ent,$cat)";
> $sep = ',';
>}
>вот эту часть мне надо объяснить, так как нифига не понятно.
Вы не знаете, что значит foreach($category as $cat) ?
Тогда, я уверен, Вам рано решать эту задачу.
>echo $sql; - ну это выводим результат)))
Нет. Всего лишь "выводим текст получившегося запроса к БД".
Чтобы Вы могли посмотреть, что же делает скрипт.
Это, кстати, в боевом скрипте делать не потребуется.
Запрос нужно будет исполнить с помощью mysql_query(); | |
|
|
|
|
|
|
|
для: Trianon
(29.07.2008 в 21:17)
| | Теперь все понял, огромное спасибо - способ действительно очень интересный и красиво записан:)
Теперь появился еще один вопрос:
Так как все это у меня должно обрабатываться в скрипте по добавлению информации о предприятии в БД, то собственно возник вопрос, как брать порядковый номер? Немного поясню:
есть форма enterpriseform.php - в ней форма по добавлению нового предприятия (там помимо основных сведений вы выбираем и специализацию).
и есть файл addenterprise.php:
идет сбор и обработка переданных данных
и потом запрос вида:
$query = "INSERT INTO enterprise VALUES (NULL,
'$name',
'$boss',
и т.д.);";
|
Т.е. как бы я его только создаю и возникает вопрос - как собственно мне брать значение id_enterprise? | |
|
|
|
|
|
|
|
для: Dizels
(29.07.2008 в 21:41)
| | mysql_insert_id() (выполнять сразу после запроса INSERT) возвращает номер последней записи, если вы об этом. | |
|
|
|
|
|
|
|
для: sim5
(29.07.2008 в 21:52)
| | Сделал БД:
CREATE TABLE `ent_cat` (
`id_enterprise` int(11) NOT NULL,
`id_category` int(11) NOT NULL
) ENGINE=MyISAM;
|
Вот такой код:
$id_enterprise= mysql_insert_id();
$sql = "INSERT INTO `ent_cat` (id_enterprise, id_category) ";
$sep = ' VALUES ';
foreach($category as $cat)
{
$cat = intval($cat);
$sql .= "$sep\r\n($id_enterprise,$cat)";
$sep = ',';
}
echo $sql;
|
До этого проверял передачу значения mysql_insert_id(); вот так: print "mysql_insert_id()"; - все работало - значение передавалось правильно.
Но вот какую ошибку выводит:
Warning: Invalid argument supplied for foreach() in Z:\home\agrarii.crimea.ua\www\admin\agro_enterprise\addenterprise.php on line 98
INSERT INTO `ent_cat` (id_enterprise, id_category)
|
Помогите плз разобраться в чем проблема? | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 00:14)
| | $category не массив. | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 00:14)
| | (29.07.2008 в 13:16) я кому писал? | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2008 в 00:33)
| | Извините, понимаю, что уже порядком надоел, но все же с проблемой нужно разобраться.
Почему $category - не массив?
По поводу записи в 13:16 - это моя запись, если смотреть следущую, то там вот что:
в одно поле можно только одно число записать.
Или Вам нужно создать несколько строк по числу выбранных элементов селекта?
|
только как я понял в приведенном Вами коде для того цикл и существует, чтобы по 1 значению в каждую строку записывать или я опять чего-то не понимаю? | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 10:22)
| | Вам BinLaden, сказав, что $category - не массив, - указал причину возникшей ошибки.
Возможно, вы не выбрали ни одного элемента в селекте. | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 10:22)
| | >По поводу записи в 13:16 - это моя запись, если смотреть следущую, то там вот что:
Это моя запись. И там вот что:
$category = $_POST['category'];
|
>Извините, понимаю, что уже порядком надоел, но все же с проблемой нужно разобраться.
>
>Почему $category - не массив?
Потому что Вы это присваивание где-то потеряли. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2008 в 10:48)
| | Огромное спасибо за помощь, вроде все получилось. | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 11:27)
| | И последний вопрос - как теперь из БД выводить эти значения обратно в форму.
Для начала делаю запрос на выборку категорий редактируемого предприятия.
// выясняем категории
$sql=mysql_query("select * from ent_cat where id_enterprise=". $_GET['id_enterprise']);
$s = mysql_fetch_array($sql);
if(is_array($s) && count($s)>0)
{
$category = $s['id_category'];
}
|
Дальше проверяю, что получил в $category:
Выводит только 1 значение. Что не так? | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 11:57)
| | // выясняем категории
$sql = "select * from ent_cat where id_enterprise=". intval($_GET['id_enterprise']);
$res=mysql_query();
if(!$res)
Ашыпка!
for($category = array(); $row = mysql_fetch_assoc($res); )
$category[] = $row['id_category'];
| print_r($category); | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2008 в 12:18)
| | Если я правильно понял, то тут было парочка ошибок, я написал вот так:
$sql = "select * from ent_cat where id_enterprise=". intval($_GET['id_enterprise']);
$res=mysql_query(sql);
if(!$res) {
print "Ашыпка";
}
for($category = array(); $row = mysql_fetch_assoc($res); )
$category[] = $row['id_category'];
print_r($category);
|
В результате выдает вот такое:
Ашыпка
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL
result resource in Z:\home\domen.ru\www\admin\agro_enterprise\editenterpriseform.php
on line 35
Array ( )
|
И еще - поясните плз, что такое intval | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 12:39)
| |
$sql = "select * from ent_cat where id_enterprise=". intval($_GET['id_enterprise']);
$res=mysql_query($sql);
|
intval - http://softtime.ru/dic/id_dic=245&id_group=9 | |
|
|
|
|
|
|
|
для: Roma
(30.07.2008 в 12:44)
| | спс и последнее)))
вот форма:
<select name ='category[]' size="7" multiple="MULTIPLE">
<?php
$query = "SELECT * FROM agro_category";
$result = mysql_query($query);
while ( $print = mysql_fetch_array($result))
{
$chek = $category == $print['id_category'] ? 'selected="selected"' : '';
echo "<option value='{$print['id_category']}' $chek>{$otstup}".$print['name']."</option>";
}
?>
</select>
|
попытался сюда вставить значения из категории - но не правильно, подскажите, как надо.
Если я правильно понял, то тут нужно массив $category прогонять по циклу, но как это сделать - не знаю. | |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 13:08)
| | Вам нужен массив $category - массив выбранных категорий
<select name ='category[]' size="7" multiple="MULTIPLE">
<?php
$query = "SELECT * FROM agro_category";
$result = mysql_query($query);
while ( $print = mysql_fetch_array($result))
{
$chek = in_array($print['id_category'],$category) ? "selected" : "";
echo "<option value='".$print['id_category']."' $chek>".$otstup.$print['name']."</option>";
}
?>
</select>
|
| |
|
|
|
|
|
|
|
для: Dizels
(30.07.2008 в 13:08)
| |
$chek = in_array($print['id_category'], $category )? 'selected="selected"' : '';
|
Хотя вместо этих двух запросов лучше бы подошел один LEFT JOIN
Ну да дело ваше... | |
|
|
|