Вставка iframe в MySQL DB - PullRequest
       22

Вставка iframe в MySQL DB

2 голосов
/ 21 сентября 2011

Я использую codeigniter, и в данный момент у меня есть небольшая проблема. Когда я вставляю iframe (из youtube) в db в файле представления, я получаю код строки следующим образом:

<iframe width="420" height="315" src="http://www.youtube.com/embed/aWvcNkRJhHw" frameborder="0" allowfullscreen></iframe>

Как вставить iframe в БД и правильно отобразить его?

РЕДАКТИРОВАННАЯ ЧАСТЬ:

Форма для вставки:

  <h3>Create News</h3>
<?php echo form_open('news/create_news') ?>
<label for="title">Title</label><input type="text" name="title" class="inputBox" id="title"><br>
<label for="body">Text</label><textarea name="body" class="inputBox" id="body" rows="5"></textarea>
<label for="datepicker">Date</label><input type="text" name="date" class="inputBox" id="datepicker">
<input type="submit" name="submit" value="Create" class="submit" />
<input type="reset" class="button standard" value="Clear" />
<?php echo form_close() ?>

Функция для вставки:

    function create_news()
    {
         $data = array(
   'title' => $_POST['title'],
   'body' => $_POST['body'],
    'date' => $_POST['date']         
);
$this->db->insert('news', $data); 
    }

Я пытался вставить iframe с YouTube (вставлять видео), но он работает не очень хорошо. Когда я загружаю файл представления, я просто получаю текст вместо video ().

Функция контроллера:

function news() {
    $this->load->helper('text');
    if ($this->session->userdata('is_logged_in') == true) {
        $q = $this->news_model->get_all();
        if ($q == false) {
            $data['np'] = 'There is no news at the moment.';
        } else {
            $data['news'] = $q;
        }
        $this->pagg();                      
        $data['main_content'] = 'admin_news';
        $data['title'] = 'Admin News';
        $this->load->view('admin/template', $data);                     
    } else {
        $this->index();
    }
}

Просмотр файла:

  <div id="news">
<?php if (isset($np)) { echo '<p>' . $np . '</p>'; } ?>
<?php if (isset($news)) : ?>    
    <?php foreach ($news as $row) : ?>
    <div class="borderBott col_12">
            <h3><a href="<?php echo base_url() ?>admin/news_update/<?php echo $row['title'] . "/" . $row['id_news'] ?>" ><?php echo $row['title'] ?></a></h3>
            <p class="<?php echo alternator('par', 'nepar') ?>"><?php echo word_limiter($row['body'], 50); ?></p>
            <p>Date written: <?php echo $row['date'] ?></p>
            <a href="#" class="delete" id="<?php echo $row['id_news'] ?>">Delete News</a>            
        </div>
    <?php endforeach; ?>  
<?php endif; ?>

Ответы [ 2 ]

4 голосов
/ 26 сентября 2011

Как рекомендует NullUserException, не стоит хранить весь тег iframe в вашей базе данных.

Прежде всего: это безобразно. Ваше хранение зависимых от макета данных в вашей базе данных. НИКОГДА не делай этого. Что если вы решите, что хотите использовать другую ширину и высоту по умолчанию? Вам нужно будет отредактировать все существующие записи в вашей базе данных.

Во-вторых, если YouTube изменит свой встроенный код, все ваши данные станут бесполезными.

IMO, правильное решение - извлечь идентификатор видео из iframe и сохранить его в вашей базе данных.

Однако , если то, что я предполагаю, правильно, и у вас есть новостное сообщение со встроенным видео в нем, вам нужно взглянуть на механизм BBCode . Ваш HTML хранится в виде простого текста и, следовательно, не отображается правильно при простом выводе значения из вашей базы данных. Используя такой механизм, как BBCode, вы определяете пользовательские теги (обычно заключенные в прямые скобки '[]') для хранения в вашей базе данных.

При повторном отображении данных все ваши теги преобразуются обратно в правильный HTML, и вы получите встроенное видео!

Есть несколько помощников для CodeIgniter: BBCode Helper или Другой BBCode Helper . (Примечание: это настоящие имена помощников, я не пытаюсь быть смешным :)).

В моих приложениях CI я всегда использовал шаблонизатор Smarty, который также предоставлял помощников BBCode, поэтому я никогда не использовал ничего из перечисленного.

НТН.

0 голосов
/ 15 февраля 2015

<iframe width="560" height="315" src="https://www.youtube.com/embed/IwB4idmx7oE" frameborder="0" allowfullscreen></iframe>

...