• Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    ThunderCat, Непонятно, но ясно =) Спасибо.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Ипатьев, благодарю.
    И извиняюсь за предыдущее. Просто после того, как сутки бился об интернет в поисках хоть каких-то мануалов, кроме чёртового стандартного INSERT, совет "погуглить", реально тряхнул. Извините.
    Искал именно вот это, сам принцип запросов из массива (!):
    VALUES (?,?,?)
    ...
       foreach ($data as $row)
        {
            $stmt->execute($row);
        }

    Правда, впервые вижу $pdo->beginTransaction(); В примерах/руководствах, что читал/смотрел никто транзакциями не заморачивался.
    з.ы. Понял. Судя по мануалу, это как бы предохранитель, чтобы в случае ошибки не изнахратить базу, а откатить изменения. Для учебного примера это не нужно, вот и пропускают.
    (пойду искать почему catch (Exception $e) а не catch(PDOException $e) ).
    Ещё раз благодарю за реальный пример.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    О да, как же это банально и просто. Всего лишь погуглить. В жизни бы, сцуко, не догадался! Вы мне вот глаза открыли! Дело то вообще плёвое - СФОРМУЛИРОВАТЬ вопрос. Вот только чтобы задать вопрос надо знать хотя бы половину ответа.

    Ладно, без толку это, объяснять великим гуру ничтожные проблемы жалких нубов.
    Вопрос здесь отредактирую, чтобы прохожих не смущать.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Уф... во-первых, конкретно вопрос был вообще не про базы данных, а про обработку массива (про запись в БД это уже вы в комментариях начали). И ответы уважаемых generate и Rsa97 содержат именно ответы на именно конкретный вопрос. Как обработать массив.
    Давайте я удалю из вопроса упоминания таблицы, оставив только
    Array
    (
        [id] => Array
            (
             ...
            )
    )

    чтобы не смущать неокрепшие умы ничтожных нубов.
    Во-вторых, раз уж на то пошло, если вы дадите ссылку на пример, как ПРАВИЛЬНО и кошерно загонять в БД конструкции типа
    $sql = "INSERT INTO `basa` ($col)
    VALUES
    (1, 'Ноубук', 10030),
    (2, 'Телефон', 33000),
    (3, 'Планшет', 55444),
    (4, 'Смартфон', 15000)
    я, лично, буду безмерно счастлив, и вставлю её в вопрос с указанием на вас и предупреждением, что надо делать только так и никак иначе.
    Вот только вы же не дадите, а отмахнётесь "кури мануал". Но чтобы курить мануал надо хотя бы знать, что в него забивать.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    О, господи. Почему нельзя-то? Да-да, инъекции и подготовленные выражения... Но до того, как пользоваться гербовой, нужно хоть наждачную пощупать. Я пока пытаюсь хотя бы принцип понять, как оно вообще, в общих чертах, возможно ли... а вы про PDO.
    з.ы. Вы сейчас ребёнку, который только-только самокат пробует, говорите "брось каку, надо сразу нормально учиться, вон кроссовый мотоцикл стоит".
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Нет, что вы, я, конечно, чайник, но не настолько чугунный, а потому хочу сделать куда хуже. То есть наколхозить что-то такое
    $col = 'id, name, cena_no_dost';
    $sql = "INSERT INTO `basa` ($col)
    VALUES
    (1, 'Ноубук', 10030),
    (2, 'Телефон', 33000),
    (3, 'Планшет', 55444),
    (4, 'Смартфон', 15000)
    on duplicate key
    UPDATE name=VALUES(name), cena_no_dost=VALUES(cena_no_dost)
    	";
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Уф... извините, долго объяснять, но вот тут именно кривой вариант "слабоумие и отвага".
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    М-мм... простите, не совсем понял... в смыле в базу? Вы имеете ввиду, не собираюсь ли я накодить что-то вроде "UPDATE basa SET `desc` = (1, 'Ноутбук', 30000)"?
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Потому что в это конкретном случае таблица с "name=...[]" и данные получаем из неё.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Извините, но это немного не то.
    Про htmlspecialchars даже не подумал, потому что колхозю не для продакшена. Но вы, конечно правы, лучше привыкать СРАЗУ всё делать как надо, а не спохватываться потом, "а чёрт, вот я лупень!". Запомню.
  • Как преобразовать массив POST в строки?

    @Ntvysq Автор вопроса
    Спасибо! Один вопрос, если позволите: зачем тут $val ?? null?
    То есть, если переменная $val отсутствует, прививаем ей null?
  • Как запустить/отменить скрипт при разных разрешениях?

    @Ntvysq Автор вопроса
    Да. То есть нет. То есть... ну вот если добавить
    $(window).on('resize load', (function() {
    		if ($(window).width() =< 640) {

    То скрипт сработает при уменьшении окна. Однако при ВОЗВРАТЕ на большое разрешение вся вёрстка поедет, потому как добавленные при ресайзе style="display: block;" так и останутся. И чтобы их убрать надо перезагружать страницу.
  • Как получить превьюшку (thumbnail) с RUTUBE?

    @Ntvysq Автор вопроса
    a_disertinsky, да нет, зачем локально? В вопросе же я написал. Надо вставить ролики рутубовские на сайт. Но сейчас, чтобы вытащить адрес превьюшки из API надо целый обработчик прикручивать, который пройдётся по "портянке" и найдёт там thumbnail_url.
    В то время как на ютубе достаточно указать
    <img src="http://img.youtube.com/vi/(тут_айдишник)/1.jpg"/>
  • Как получить превьюшку (thumbnail) с RUTUBE?

    @Ntvysq Автор вопроса
    Так https://rutube.ru/api/video/{id} - это то же самое, что https://rutube.ru/api/play/options/(тут_айдишник)
    thumbnail_url есть, но без обработчика его не вытащить.
  • Как получить все значения из вложенных массивов по ключу?

    @Ntvysq Автор вопроса
    N, извините, понимаю, что уже утомил, но я тут подумал... потом ещё подумал... и немного поразмыслил...
    Ну вот как-то против шерсти создавать ЕЩЁ один массив $RESULT. Когда уже всё, что надо, есть в БДшном $rows и красиво размеченном $arResults.
    А вдруг понадобится подменю ОДНОЙ категории из $arResults вытащить? Снова массив собирать? Типа:
    $cat_id = $row['id']; 
    	$arCATEGORY = [];
    	foreach($RESULT as $val) {
    	  if(array_key_exists($cat_id, $RESULT ))
    		$arCATEGORY[$cat_id] = $RESULT[$cat_id];
    	}

    Этак для массивов страницы не хватит, на каждый случай новый собирать. Понимаю, что все эти костыли из-за дурацкой структуры данных - лежали бы подкатегории в БД никаких проблем бы не было, но всё таки... хочется костылей поменьше.
    В итоге наваял вот такой код вместо нового $RESULT добавив просто проверку:
    $query = mysqli_query($connect, "SELECT `id`, `title` FROM `category` ORDER BY `title`");
    $rows = mysqli_fetch_all($query, MYSQLI_ASSOC);
    $arIDs = [];
    
    foreach($rows as $row) {
        $arIDs[$row['id']] = $row['title'];
    }
    
    $arResults = [];
    foreach($datapost as $data) {
    
        if(array_key_exists($data['category_id'], $arIDs)) {
            $arResults[$data['category_id']]['title'] = $arIDs[$data['category_id']];
            $arResults[$data['category_id']]['items'][] = $data;
        }
    }
    	foreach($rows as $row) {
    		echo '<li>Категория<b> ' .$row['title'].'</b></li>'; //берём тайтл категории прям из БД
    		$idCat = $row['id'];  // так же из БД получаем айдишник категории
    			if ( isset($arResults[$idCat]) ) {  // а потом просто проверяем наличие массива по этому $row['id']
    				foreach($arResults[$idCat]['items'] as $key => $vol) {
    					echo '<li>*подменю: ' .$vol['header'].'</li>';
    				}
    			}
    		}
  • Как получить все значения из вложенных массивов по ключу?

    @Ntvysq Автор вопроса
    Да сделал, всё работает. А со структурой... сложно в общем. Так получается, что лучше приинклюдить файл с массивом, чем дополнительную таблицу в БД создать.
    Ещё раз благодарю за помощь.
  • Как получить все значения из вложенных массивов по ключу?

    @Ntvysq Автор вопроса
    Спасибо, разобрался. Работает как надо.
    Но есть ли смысл в создании ещё одного массива вместо простого условия if ($key == $keyRes)?

    Нет, если менюшка выводится раз пять, на разных страницах и в разных местах, тогда конечно, куда удобнее одним куском вставлять, но если один раз в шапке... будет ли выигрыш в производительности?
  • Как получить все значения из вложенных массивов по ключу?

    @Ntvysq Автор вопроса
    Ну... в БД забиты категории. Примитивно
    `id`		`title`
    1 				Города
    2 				Сёла
    7 				Посёлки
    10 				Природа


    С БД подключившись
    $query = mysqli_query($connect, "SELECT `id`, `title` FROM `category` ");
    $rows = mysqli_fetch_all($query, MYSQLI_ASSOC);

    получаем айдишник с названием категории
    И надо сприцепить данные по id из БД к category_id из массива
    $datapost = array(
      array(
        'header' => 'город Москва',	
        'category_id' => '1',
      ),
      array(
        'header' => 'село Огонёво',	
        'category_id' => '2',
      ),
      array(
        'header' => 'село Быстрино',	
        'category_id' => '2',
      ),
      array(
        'header' => 'посёлок Восточный',	
        'category_id' => '7',
      ),
    );

    Чтобы получилось меню с подпунктами (если они есть в массиве $datapost)
    То есть:
    Города
    - город Москва
    Сёла
    - село Огонёво
    - село Быстрино
    Посёлки
    - посёлок Восточный
    Природа
    - (без подпунктов, потому что в массиве по id = 10 ничего нет)


    И вот этот код
    foreach($rows as $row) {
        $arIDs[$row['id']] = $row['title'];
    }
    $arResults = [];
    
    foreach($datapost as $data) {
        if(array_key_exists($data['category_id'], $arIDs)) {
            $arResults[$data['category_id']]['title'] = $arIDs[$data['category_id']];
            $arResults[$data['category_id']]['items'][] = $data;
        }
    }

    Прекрасно работает, НО, в $arResults попадают только те категории из БД, для которых в массиве есть category_id.
    То есть при выводе
    foreach($arResults as $result) {
        $result['title'] // Название категории  
        foreach($result['items'] as $item) {
            $item['header'] // Название подменю
        }
    }

    получается:
    Города
    - город Москва
    Сёла
    - село Огонёво
    - село Быстрино
    Посёлки
    - посёлок Восточный

    (категория Природа НЕ выводится, так как в $arResults она не попала)

    Ну вот я и прикостылил
    $arIDs (массив собираемый из БД, где есть ВСЕ категории) к выводу результирующего $arResults через условие. Получилось
    foreach($arIDs as $key => $val) {
    			echo '<li>'.$val.'</li>'; //выводим все категории, что есть в БД
    		
    		foreach($arResults as $keyRes => $result) {
    			if ($key == $keyRes) { // проверяем совпадение ключей и выводим подменю, где есть
    					foreach($result['items'] as $item) {
    						echo '<li>'.$item['header'].'</li>';
    				}
    
    			}
    		}
    	}
  • Как получить все значения из вложенных массивов по ключу?

    @Ntvysq Автор вопроса
    N, в общем накостылил такое вот...
    foreach($arIDs as $key => $val) {
    
    						echo "<li>".$key." => ".$val."</li>";
    
    						foreach($arResults as $keyRes => $result) {
    							if ($key == $keyRes) {
    
    								foreach($result['items'] as $item) {
    									echo '<li>--'.$item['header'].'</li>';
    								}
    							}
    						}
    					}

    Дюже погано, или с пивом сойдёт?