PHP从表单提交中挑选内容以填充数据库

时间:2012-09-19 17:40:34

标签: php

非常是PHP的新手,需要一些关于我正在开展的项目的良好起点的建议。

我有一个网站和一个时事通讯,两者都是由新闻文章摘要组成的(该网站类似于旧版本的Digg,但没有用户提交)。 word文档的格式为:

分类

文章标题

新闻文章摘要

网站链接文章可在

找到

一旦word文档填充了所有文章摘要,我希望能够复制文档中的所有文本,将其粘贴到html表单中的单个textarea字段中,并以某种方式选择PHP单独的故事摘要并将它们存储在数据库中,以便以后可以将它们放到网站上。

我能想到的唯一方法是在word文档中添加描述性标记,例如:

<begin_category>Category<end_category>

<begin_title>Article Title<end_title>

依此类推,然后让php识别这些标签(preg_match?)并从中提取信息。那么我的问题是,编程的最佳方法是什么?我应该研究哪些概念?如何告诉PHP查找这些标记并将它们之间的所有内容拉出来?这是一个可怕的方式来解决这个问题吗?我最好只拥有一个表格,其中包含所有项目(类别,标题,摘要,链接)的不同字段,并逐一提交每个摘要?

我希望能够发布整个文档并填充它的唯一原因是为了节省时间。无论简报如何,都必须写出word文档。

任何方向都会受到赞赏;我应该谷歌搜索的东西,我应该阅读的文章等等。

1 个答案:

答案 0 :(得分:0)

我要考虑的第一件事是,如果你的编码错误,粘贴的字可能会非常混乱,所以如果你有任何问题,请确保你的html表单和php文件(可能是同一个)和数据库存储具有匹配的编码。

例如,在utf8中保存php源代码,确保为数据存储使用适当的unicode方案,并在HTML中包含以下标题:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

如果您始终控制输入,则不是这样的问题。你可以经常通过粘贴到记事本,然后从记事本到你的表格来清除单词混乱。更好的是使用记事本,所以使用普通的asci txt。但是如果你得到了全面匹配的编码,你应该很高兴。

您可以按照建议使用标记,并使用以下方法解析内容:

 /**
* parses $string for blocks of content appearing between $starttag and $endtag
* Will parse all matching blocks and return as array.
* 
* @return Array The blocks of content parsed from $string
* 
* @param string $string   This is the content to be parsed, for example this could be the HTML from the buffer
* @param string $starttag This is the start tag, the beginning of a returnable content block i.e <!--customtag  or <img
* @param string $endtag The end of block of content.
*/
function ParseBlocks($string, $starttag, $endtag)
{
    $pattern = "/".preg_quote($starttag).'(.*?)'.preg_quote($endtag)."/"; 
    if(preg_match_all($pattern, $string, $matches, PREG_PATTERN_ORDER) === false)
        $this->WriteError(preg_last_error());
    return $matches[1];
} 

您可以通过以下方式使用此类函数,但它假设输入是偶数,并且每个条目都将包含所有必需的部分,因为您期望输出4个数组,每个数组具有相同的长度:

$categories = ParseBlocks($postedContent,"<!category>","</category");
$titles = ParseBlocks($postedContent,"<!title>","</title");
$summaries = ParseBlocks($postedContent,"<!summary>","</summary");
$links = ParseBlocks($postedContent,"<!link>","</link");

然后,您就可以访问内容以推送到数据库:

$itemCount = count($categories);
for($i =0; $i < $itemCount; $i++)
{//some db insert function -  this is made up, but should give the idea.
  db_execute('insert into t_table values (?,?,?,?)'
      ,array($categories[$i], $titles[$i], $summaries[$i], $links[$i]);
}

作为所有这些的替代,您可以考虑发布实际文件(删除复制和粘贴)并解析该服务器端。或者是否可以从您的网站上删除数据?