0

我有一个带有 4 个文本字段和 2 个复选框的 PHP 表单。复选框是“标签”,可以应用于使用文本字段输入的文章。

例如:

信息:

标题- 定义南美洲候鸟的不及物关系

作者- 作者。S.惠灵顿

访问日期- 19/06/2012

网址- http://www.wellington.org/articles/birds/def-int-rel-mig-bird-s-amer.pdf

标签:

鸟类[X] 南美[X]

在这种情况下,两个复选框都会被选中,因为这篇文章既涉及鸟类,也涉及南美洲。

我有一个包含 3 个表的数据库:

文章: id - 文章标题 - 文章组织 - 文章日期 - 文章网址

标签: id - tag_content

文章标签: article_id - tag_id

目前,我的表单可以使用以下方法将文章信息插入到文章表中:

 mysql_query("INSERT INTO articles SET articletitle='$articletitle',
      articleorganization='$articleorganization',
      articledate='$articledate',
      articleurl='$articleurl' ")

然后,我可以$article_id = mysql_insert_id();用来获取将插入到articles_tags 表中的id。

但在那之后,我完全被难住了。

我需要以某种方式遍历复选框:

<input type="checkbox" name="articletags_birds" value="Birds" id="articletags_0" />
<input type="checkbox" name="articletags_southamerica" value="South America" id="articletags_1" />

但我不知道我应该怎么做。

4

2 回答 2

2
if ($_POST['articletags_birds'] == 'on')
{
    mysql_query("INSERT INTO tags SET id='$article_id', tag_content='articletags_birds'");
}

对其他标签执行相同操作。如果您有一个非常大的数字(5+),或者希望用户输入他们自己的标签,只需执行以下操作:

foreach ($_POST as $key=>$value)
{
    if (strpos($key, 'articletags_') === 0) //identity, otherwise false will set this off
    {
         mysql_query("INSERT INTO tags SET id='$article_id', tag_content='$value'");
    }
}

笔记:

1.) 如果没有选中复选框,则不会发送 POST!

2.) strpos 将检查标签是否以 articletags_ 开头

3.) 请转义查询!我只是简写了这一切,但是可以在这里注入恶意PHP

如果我不清楚/如果它仍然不起作用,请发表评论

于 2012-06-20T01:29:30.510 回答
1

我不是 100% 你的问题是什么,但是:

  1. Offcourse 我会将标签名称保留在数据库中
  2. 然后在生成更新文章的表单时,我会从数据库中获取所有标签并将它们插入循环中,如下所示:

    <input type="checkbox" name="tagArray[]" value = '$tagId' />$tagName
    
  3. 然后在提交表单后,如果在发布请求中设置了这些标签中的任何一个,我将在循环中检查并创建新的articles_tags,如下所示:

    if(isset($_POST['tagArray']))
    {
     $tagArray = $_POST['tagArray'];
         foreach($tagArray as $tagId)
         {
           mysql_query('...');
           // insert new articles_tags with tag_id = $tagId and article_id =$article_id
          }     
    }
    
于 2012-06-20T01:30:31.957 回答