将iframe插入mysql db

时间:2011-09-21 13:05:42

标签: php codeigniter bbcode codeigniter-2

我正在使用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); 
    }

我尝试从youtube插入iframe(嵌入视频),但效果不佳。当我加载视图文件时,我只获取文本而不是视频()。

控制器功能:

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 个答案:

答案 0 :(得分:4)

正如NullUserException建议的那样,将整个iframe标记存储在数据库中并不是一个好主意。

首先,它是丑陋的。您在数据库中存储布局相关的数据。永远不要这样做。如果您决定要不同的默认宽度和高度怎么办?您需要编辑数据库中的所有现有记录。

其次,如果YouTube更改了嵌入式代码,那么您的所有数据都将变得毫无用处。

IMO正确的解决方案是从iframe中提取视频ID并将其存储在您的数据库中。

然而,如果我假设的是正确的,并且您有一个包含嵌入式视频的新闻帖子,则需要查看BBCode机制。您的HTML以纯文本格式存储,因此仅在从数据库中输出值时无法正确呈现。通过使用诸如BBCode之类的机制,您可以定义自定义标记(通常用直括号“[]”括起来),以存储在数据库中。

再次显示数据后,所有标记都会转换回正确的HTML格式,您将获得嵌入的视频!

CodeIgniter有一些帮助:BBCode HelperAnother BBCode Helper。 (注意:这些是帮助者的实际名称,我不是想搞笑:))。

在我的CI应用程序中,我总是使用Smarty模板引擎,它也提供了BBCode助手,因此我从未使用过上述任何一种。

HTH。

答案 1 :(得分:-1)

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