Голову сломал, не могу решить проблему...
Такой алгоритм. Есть форма, после отправки в обработчик, из одной таблицы вытаскиваются несколько id подразделов. Я хочу эти id хранить в одном поле (или в нескольких ячейках).
Тут затык, их наверное нужно как-то загнать в массив, и как его потом загнать в поле таблицы? С учетом того, что нужно будет по этому полю впоследствии проверять эти id?
if (isset($_POST['id']))
{$id = $_POST['id']; //echo (is_array($id)) ? "Это массив" : "Это НЕ массив";
foreach($id as $item)
if(count($item)>=1)
{
$result = mysql_query(" SELECT `id`,`name` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
$rowww = mysql_fetch_assoc($result);
if(!$rowww) die ("Сбой при доступе к базе данных : ". mysql_error());
do
{
echo "$rowww[id]"." "."$rowww[name]"."<br />";
}
while($rowww = mysql_fetch_assoc($resu));
}
else {$id = "(Нет подразделов)";}
}
Спустя 5 минут, 5 секунд (8.01.2012 - 17:04) nugle написал(а):
Смотри:
1. берешь свой массив и преобразуешь его в строку с помощь функции Implode, к примеру так: $string = implode(',', $arr);
2. Загоняешь в базу эту строку
3. Достаешь и раскладываешь функцией explode, к примеру так $arr = explode(',', $string)
1. берешь свой массив и преобразуешь его в строку с помощь функции Implode, к примеру так: $string = implode(',', $arr);
2. Загоняешь в базу эту строку
3. Достаешь и раскладываешь функцией explode, к примеру так $arr = explode(',', $string)
Спустя 1 час, 35 минут, 16 секунд (8.01.2012 - 18:39) Sergen написал(а):
Спасибо nugle. Принцип понял, че-то я забыл про них... :huh: но почему-то пишет только последний id. Я еще прикрутил запись в файл, там то же пишет одну циферку...
if(!empty($rowww))
{
$fh = fopen("file.txt", 'w+') ;
do
{
$info = array ($rowww[id]);
$inf = implode(',', $info);
print_r($inf);
// Для записи в файл
$tab= '$tab' ;
$text = <<<_END
case '$rowww[id]' : $tab = "sd";
_END;
}
while($rowww = mysql_fetch_assoc($resu));
fwrite($fh, $text) or die("Невозможно записать в файл");
fclose($fh);
echo "Файл 'file.txt' записанн успешно";
$result = mysql_query ("INSERT INTO `sdat`( `id_mod`,`podrazdely`) VALUES ('". $inf ."',45)");
if (isset($result)) echo "Все отлично";
}
Спустя 18 минут, 17 секунд (8.01.2012 - 18:57) nugle написал(а):
$inf = implode(',', $info);
тут надо explode, разделение, а не соединение
тут надо explode, разделение, а не соединение
Спустя 23 минуты, 47 секунд (8.01.2012 - 19:21) Sergen написал(а):
Почему explode? По-моему правильнее implode. Из массива в строку.
Спустя 10 минут, 5 секунд (8.01.2012 - 19:31) caballero написал(а):
А чем обычная сериализация одной готовой функцией не устраивает?
Спустя 20 минут, 31 секунда (8.01.2012 - 19:51) Pulse написал(а):
Солидарен с caballero, почему бы не использовать serialize() и unserialize()

Спустя 12 минут, 38 секунд (8.01.2012 - 20:04) inpost написал(а):
А ещё есть print_r($array,1)
Только он менее удобный для разбора. Загнал, недавно, после пришлось регулярку писать для того, чтобы сложить обратно
Коротенькая, но рабочая.


Спустя 9 минут, 25 секунд (8.01.2012 - 20:14) Guest написал(а):
Честно признаться с serialize() не сталкивался...Надо опробовать.
Спустя 2 минуты, 52 секунды (8.01.2012 - 20:16) Sergen написал(а):
Цитата (Guest @ 8.01.2012 - 17:14) |
Честно признаться с serialize() не сталкивался...Надо опробовать. |
Блин куки с кэшем почистил, зашел как гость. Короче, пошел эксперементировать
Спустя 17 часов, 5 минут, 23 секунды (9.01.2012 - 13:22) Sergen написал(а):
$resu = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
while($rowww = mysql_fetch_assoc($resu));
{
echo "$rowww[id]";
}
Подскажите пожалуйста, как здесь из потока в массив данные загнать?
Спустя 6 минут, 28 секунд (9.01.2012 - 13:28) nugle написал(а):
Цитата |
Почему explode? По-моему правильнее implode. Из массива в строку. |
просто запутался в твоем коде, как ты его сам понимаешь?!)
Совет на будущее, не делай так, я про переменные
$resu = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
while($rowww = mysql_fetch_assoc($resu));
{
echo "$rowww[id]";
}
Название переменной, ну к примеру запрос присваивай переменной $query, $result, $sql. Не один запрос в коде? делай так: бананы вытаскиваешь $query_banan, потому что раньше также делал, путался и долгое время на одном месте стоял
Цитата |
Подскажите пожалуйста, как здесь из потока в массив данные загнать? |
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
while($row = mysql_fetch_assoc($result));
{
$array = $row['id'].',';
}
trim($array, ',');
Спустя 1 час, 51 минута, 19 секунд (9.01.2012 - 15:20) Sergen написал(а):
Цитата |
Название переменной, ну к примеру запрос присваивай переменной $query, $result, $sql. Не один запрос в коде? делай так: бананы вытаскиваешь $query_banan, потому что раньше также делал, путался и долгое время на одном месте стоял |
Спасибки за совет.
Твой код правда не заработал, но мысль понял, немного доработал и вроде получилось!!!
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
do
{
$array[] = $row['id'].',';
}
while($row = mysql_fetch_array($result));
$string = implode(' ', $array);
Вечерком еще потестирую. Но данные в массив загоняются и строка с пробелами выводится- то что надо!
В любом случае еще раз спасибо!
<_<
Спустя 3 часа, 42 минуты, 9 секунд (9.01.2012 - 19:02) nugle написал(а):
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
do
{
$array[] = $row['id'].',';
}
while($row = mysql_fetch_array($result));
$string = implode(' ', $array);
Используй вместо do while просто while, так как ты теряешь первый элемент массива
Спешил, поэтом не работало)
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
while($row = mysql_fetch_assoc($result));
{
$array =$array.$row['id'].',';
}
$array = trim($array, ',');
$array = explode(',',$array);
Спустя 12 часов, 58 минут, 13 секунд (10.01.2012 - 08:00) Sergen написал(а):
Цитата (nugle @ 9.01.2012 - 16:02) |
Используй вместо do while просто while, так как ты теряешь первый элемент массива |
Я то же думал что нужно именно while. Но он почему-то не работает вообще. Поэтому и поставил do while. То что не выводит первый элемент, это да. В моем случае это кстати и не нужно (таблица так устроена) первый элемент он как раз в условии запроса.
Вот что делать, когда нужно будет именно все вывести?
Спустя 1 час, 37 минут, 45 секунд (10.01.2012 - 09:38) Nikitian написал(а):
Цитата (inpost @ 8.01.2012 - 20:04) |
А ещё есть print_r($array,1) :) Только он менее удобный для разбора. Загнал, недавно, после пришлось регулярку писать для того, чтобы сложить обратно :) Коротенькая, но рабочая. |
Запаковать (применительно к файлу):
file_put_contents('file.php','<?php $var = '.var_export($var,true).';');
Распаковать:
include('file.php');
Самый быстрый способ сериализации-унсериалайза для файлов.
Для тс, неправильно изначально решили и вам насоветовали. Тут же классическая связь 1 ко многим, реализуется через хранение этих id в отдельной таблице. Вот что вы будете делать, если вам понадобиться выбрать все элементы, у которых есть привязка к какому-то одному id? Делать поиск по сериализованной подстроке - глупость.
Спустя 33 минуты, 44 секунды (10.01.2012 - 10:11) nugle написал(а):
Поставь while и покажи какие ошибки выдает. и сам код естественно выложи
Спустя 4 часа, 41 секунда (10.01.2012 - 14:12) Sergen написал(а):
Цитата |
Для тс, неправильно изначально решили и вам насоветовали. Тут же классическая связь 1 ко многим, реализуется через хранение этих id в отдельной таблице. Вот что вы будете делать, если вам понадобиться выбрать все элементы, у которых есть привязка к какому-то одному id? Делать поиск по сериализованной подстроке - глупость. |
Я в курсе про связи таблиц. Просто делаю на основе уже существующей (изменить ее, либо даже добавить новые поля - исключено).
Про поиск по строке, почему глупость? Например я загоняю ее в свою созданную (другую) таблицу в ячейку, и потом если понадобится найти какой нибудь id в этой ячейке, я через LIKE думаю смогу отыскать ее, либо определить ее отсутствие. Опять же, это задумка, может пойду другим путем.
Спустя 34 минуты, 30 секунд (10.01.2012 - 14:47) Sergen написал(а):
Цитата (nugle @ 10.01.2012 - 07:11) |
Поставь while и покажи какие ошибки выдает. и сам код естественно выложи |
Код почти такой же как у тебя
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
while($row = mysql_fetch_array($result));
{
$array[] =$row['id'].',';
echo "<pre>";
print_r($array);
}
за исключением того, что поменял mysql_fetch_assoc на mysql_fetch_array и добавил [] к $array
Ошибок не выдает, все пусто.
Array
(
[0] =>
)
Меняю на do while , все работает (кроме первого результата)
$result = mysql_query(" SELECT `id` FROM `menu` WHERE `nomer`= '".$item."' ORDER BY `id`");
do
{
$array[] =$row['id'].',';
echo "<pre>";
print_r($array);
}
while($row = mysql_fetch_array($result));
Спустя 3 минуты, 12 секунд (10.01.2012 - 14:50) nugle написал(а):
Ты наверное не понимаешь
$array - это не массив, а строка. Ты собираешь строку, а потом делаешь из нее массив
$array - это не массив, а строка. Ты собираешь строку, а потом делаешь из нее массив
Спустя 59 минут, 21 секунда (10.01.2012 - 15:49) inpost написал(а):
Sergen
Потому что это нарушение первой нормальной формы БД.
Потому что это нарушение первой нормальной формы БД.
Спустя 6 минут, 20 секунд (10.01.2012 - 15:55) Sergen написал(а):
Цитата (nugle @ 10.01.2012 - 11:50) |
Ты наверное не понимаешь $array - это не массив, а строка. Ты собираешь строку, а потом делаешь из нее массив |
Хмм...Сделал новый файл, удалил все лишнее, просто все сделал под while и ...заработало.
Ничего не понимаю. Где я делал ошибку, не пойму, тысячу раз перепроверял.
Спасибо за помощь nugle.
Спустя 27 минут, 50 секунд (10.01.2012 - 16:23) Sergen написал(а):
Цитата (inpost @ 10.01.2012 - 12:49) |
Sergen Потому что это нарушение первой нормальной формы БД. |
Я не могу делать дополнительную таблицу куда шли бы id дополнительных пунктов меню. Просто не могу по одной причине, нужно ковырять стандартный код. А я этого не хочу. Он должен оставаться стандартным. А сделать дополнение(расширение) - это можно. Вот и приходится всякими обходными маневрами чего -то придумывать.
Спустя 27 минут, 36 секунд (10.01.2012 - 16:51) inpost написал(а):
Sergen
Всмысле не можешь? Теоретически данный участок будет задействован на парочке страниц, а привести в адекватный вид должен ты, ты же нанялся на это.
Всмысле не можешь? Теоретически данный участок будет задействован на парочке страниц, а привести в адекватный вид должен ты, ты же нанялся на это.
Спустя 11 минут, 26 секунд (10.01.2012 - 17:02) Sergen написал(а):
Цитата (inpost @ 10.01.2012 - 13:51) |
Sergen Всмысле не можешь? Теоретически данный участок будет задействован на парочке страниц, а привести в адекватный вид должен ты, ты же нанялся на это. |
Есть кучи смс типа вордпресса, джумлы, и прочих битриксов. А к ним идут всякие компоненты, модули, плагины, и прочие расширения и дополнения. Если не ошибаюсь они не меняют основной код движка а используют его. Вот и в моем случае-низзя трогать.
Спустя 11 минут, 1 секунда (10.01.2012 - 17:13) inpost написал(а):
Sergen
И эти модули, компоненты, плагиты - пишут криворукие недокодеры, и их и надо менять, потому что нормального бесплатно ничего не бывает.
И эти модули, компоненты, плагиты - пишут криворукие недокодеры, и их и надо менять, потому что нормального бесплатно ничего не бывает.
Спустя 48 минут, 51 секунда (10.01.2012 - 18:02) Sergen написал(а):
Цитата (inpost @ 10.01.2012 - 14:13) |
Sergen И эти модули, компоненты, плагиты - пишут криворукие недокодеры, и их и надо менять, потому что нормального бесплатно ничего не бывает. |
inpost, ситуевина следующая. Делаю собственное дополнение. В принципе, можно залезть в код движка и внести изменения, поскольку делаю для себя, для своего сайта. Но, буквально на днях пришла мысль, что это дополнение может понравится и другим людям. И вот тут то рождается другая мысль. А почему бы не сделать ее с прицелом на то, что в будущем удастся ее как-то двигать, например за символическую денешку.
Кстати, бесплатное нормальное бывает. Смотря что это за бесплатное и почему оно бесплатное.