Как сделать переборку глобально?

CEPlllAHT

Новичок
Вот собственно:
PHP:
$id = $_GET['edit'];
if ($id > 0)
{
  if ($result = $mysqli->query("SELECT * FROM tags_data WHERE main_id='$id'"))
      {
      while($tag_id = $result->fetch_array())
          {
          $tag_id_data = $tag_id['tag_id'];
          echo $tag_id_data; // выводит 1 2 3 4 5 6 7 8
          }
      }

}
echo $tag_id_data; //выводит тока 1
Или может есть другой метод?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
А теперь еще раз и русскими буквами через рот объясни, что ты пытаешься сделать "глобальной переборкой".
 

CEPlllAHT

Новичок
Мне надо чтоб $tag_id_data; выводила везде 1 2 3 4 5 6 7 8 вообщем за пределами while();
 

CEPlllAHT

Новичок
Читал и не один. Можно не отвечать на это сообщение мол "видимо плохо читал" или что-то на этом подобии... Либо кодом либо просто молча. Кому хочется те сразу помогут! Я подожду.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Если ты хочешь,чтобы выхов какой-то одной строки везде выводил тебе 12345... то напиши функцию, внутри которой у тебя будет цикл с перебором массива и выводом.
 

CEPlllAHT

Новичок
Уже лучше. Вот только я функции не писал ещё:
Я уже написал свой движок мне тока осталось сделать в Редакции поста, облако тегов, снимать галочки и ставить другие. вот вообщем сумасшедшая процедура. Вот начало примера, который не работает, не правильный.
PHP:
include ("db.php");
$id = $_GET['edit'];
if ($id > 0)
$checked = 'checked';
if ($result = $mysqli->query("SELECT * FROM tags ORDER BY name")) // id: 1 2 3 4 //name: Accustik Brass Drum Electro
    {
        while($tag = $result->fetch_array())
        {
            if ($res = $mysqli->query("SELECT * FROM tags_data WHERE main_id='$id'")) // tag_id: 1 1 //main_id: 4 1
                {
                    while($tag_id = $res->fetch_array())
                        {
                            $tag_id_data = $tag_id['tag_id'];
                            echo $tag_id_data;
                        }
                }
            echo ('<input type="checkbox" name="ids[]"  value="' . $tag['id'] . '" ' . $checked . '>' . $tag['name']  . ' || ');
        }
    }
Выводит 4 1 checkbox 4 1 checkbox 4 1 checkbox Вообщем ааа... Если кто сможет помочь с данным новым кодом, оплачу.
Надо в редактировании поста сделать так если я на теге снимаю галочку то она удалит с базы tags_data запись, если наоборот ставлю галочку то соответственно добавит запись.
Для меня это сложная задача. Экзамен просто какой-то....
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Тогда в офрум "работа" с указанием размера оплаты труда.
 

HORO

Новичок
CEPlllAHT
почитай про конкатенацию строк и про массивы в php - легко найдешь в гугле
 

CEPlllAHT

Новичок
Да ппц HORO уже 2й день кубатурю скрипт и не могу написать его, я читал всё про массивы, всё к тому и ведёт.
 

HORO

Новичок
если я правильно понял
DELETE FROM tags_data WHERE main_id='$id'
INSERT INTO tags_data (main_id,tag_id) VALUES ('$id','$ids[0]'), ('$id','$ids[1]'), ... и тд
соотв то что после VALUES в цикле генерируй из $_POST['ids']

и tags_data внутри tags выводить не надо, просто выводи список тегов из tags
А чтобы проверить checked или нет, выбери отдельным циклом (не вложеным) tag_id из tags_data в массив $ids для main_id='$id'
и уже потом, при выводе checkbox'ов поверяй if(in_array($tag['id'],$ids)) print "checked";
 

CEPlllAHT

Новичок
Вот таблица:
Код:
-- phpMyAdmin SQL Dump
-- version 4.3.11
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Май 30 2015 г., 13:03
-- Версия сервера: 5.6.24
-- Версия PHP: 5.6.8

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `sound`
--

-- --------------------------------------------------------

--
-- Структура таблицы `main`
--

CREATE TABLE IF NOT EXISTS `main` (
  `id` int(10) NOT NULL,
  `name` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `URL` varchar(255) NOT NULL,
  `img` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `main`
--

INSERT INTO `main` (`id`, `name`, `description`, `URL`, `img`) VALUES
(1, '8Dio', 'Ambient Guitar', 'http://8dio.com', '1432982711.jpeg'),
(2, 'Sample Logic', 'Fanfare', 'http://www.samplelogic.com/products/fanfare', '1432982867.jpeg'),
(3, 'Native Instruments', 'Berlin Concert Grand', 'http://www.native-instruments.com/en/products/komplete/keys/definitive-piano-collection/', '1432982963.jpeg'),
(4, 'Heavyocity', 'Damage', 'http://www.heavyocity.com/product/damage/', '1432983404.jpeg'),
(5, 'Native Instruments', 'Scarbee A-200', 'http://www.native-instruments.com/en/products/komplete/keys/scarbee-a200/', '1432983534.jpeg');

-- --------------------------------------------------------

--
-- Структура таблицы `tags`
--

CREATE TABLE IF NOT EXISTS `tags` (
  `id` int(10) NOT NULL,
  `name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `tags`
--

INSERT INTO `tags` (`id`, `name`) VALUES
(1, 'Guitar'),
(2, 'Piano'),
(3, 'Accustik'),
(4, 'Electro'),
(5, 'Brass'),
(6, 'Drum'),
(7, 'Industrial');

-- --------------------------------------------------------

--
-- Структура таблицы `tags_data`
--

CREATE TABLE IF NOT EXISTS `tags_data` (
  `tag_id` int(10) NOT NULL,
  `main_id` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `tags_data`
--

INSERT INTO `tags_data` (`tag_id`, `main_id`) VALUES
(4, 1),
(1, 1),
(3, 2),
(5, 2),
(3, 3),
(2, 3),
(6, 4),
(7, 4),
(4, 5),
(2, 5);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
HORO Брат давай вместе напишем этот сранный код. Я уже 3е сутки мучаюсь. Мне интересно ппц как должно быть.
Надо вывести так чтоб checkbox стоял там где у main_id есть tag_id(нужный тег).
И когда я снимаю галочку с тега который уже присутствует он удаляется из базы при запросе. Вообщем редактируеться одна таблица "tags_data"
http://www.hotscripts.com/forums/php/27314-displaying-mysql-data-checked-checkboxes.html Вот тут есть ответ но я его не могу переписать под $mysqli->query();
 
Последнее редактирование:

HORO

Новичок
тут не любят готовый код ) так что вот так примерно можно сделать вывод чекбоксов с тегами для записи,
ну а как сохранить результат, я написал
DELETE FROM tags_data WHERE main_id='$id' -- все удалить
INSERT INTO tags_data (main_id,tag_id) VALUES ('$id','$ids[0]'), ('$id','$ids[1]'), ... и тд -- добавить выбранные теги
PHP:
$tag_ids=array();
if ($res = $mysqli->query("SELECT * FROM tags_data WHERE main_id='".(int)$id."'")) // tag_id: 1 1 //main_id: 4 1
{
                    while($tag_id = $res->fetch_assoc())
                        {
                            $tag_ids[] = $tag_id['tag_id'];
                        }
}

if ($result = $mysqli->query("SELECT * FROM tags ORDER BY name")) // id: 1 2 3 4 //name: Accustik Brass Drum Electro
    {
        while($tag = $result->fetch_assoc())
        {
            $checked="";
            if(in_array($tag['id'],$tag_ids)) $checked="checked";
            echo ('<input type="checkbox" name="ids[]"  value="' . $tag['id'] . '" ' . $checked . '>' . $tag['name']  . ' || ');
        }
    }
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
с чем $_POST['ids'] дифать будешь?
состоянием в базе
PHP:
$db=array(1,2,3);
$post=array(3,4,5);
$delete=array_diff($post,$db);
$insert=array_diff($db,$post);
просто странно когда программа делает иначе чем ожидаешь, а если все сложнее и существуют каскадные удаления?

NOT IN() не понял
 
Последнее редактирование:

HORO

Новичок
перед сохранением делать выборку ids из базы, потом diff, а потом сохранять? :)
 
Сверху