0

我的目标是创建一个条目表单 (addnew.php),它允许我稍后使用不同的表单 (edit.php) 编辑条目。

目前 addnew.php 使用了一些文本字段和 2 个复选框,而我正在尝试做的是将表单中的信息插入 MySQL 数据库。来自文本字段的信息被插入到一个表中,来自复选框的信息被插入到另一个表中。

不过,现在,我正在尝试使用第三张表(如果需要)来制作一个交集表,这将允许我在编辑表单中使用 addnew.php 中使用的相同格式。

因此,换句话说,addnew.php 将有一些文本字段和复选框,edit.php 也会有,不同之处在于 edit.php 将填充信息,对于复选框,它们将是选中,用户可以选择选中更多框或取消选中已选中的框。

我现在拥有的三张桌子是:

articles:
id - articletitle - articleorganization - articledate - articleurl

tags:
id - tag_contents

articles_tags:
id - article_id - tag_id

addnew.php 的代码是:

    <?php
 function renderForm($articletitle, $articleorganization, $articledate, $articleurl, $articletags )
 {
 ?>
. . .
            <td width="20%" align="right"><span class="field">Article Title:</span></td>
            <td width="80%" align="left"><span class="field">
              <input name="articletitle" type="text" value="<?php echo $articletitle; ?>" size="50"/>
            </span></td>
          </tr>
          <tr>
            <td align="right"><span class="field">Article Author:</span></td>
            <td align="left"><span class="field">
              <input name="articleorganization" type="text" value="<?php echo $articleorganization; ?>" size="50"/>
            </span></td>
          </tr>
          <tr>
            <td align="right"><span class="field">Access Date:</span></td>
            <td align="left"><span class="field">
              <input name="articledate" type="text" value="MM/DD/YYYY" size="50"/>
            </span></td>
          </tr>
          <tr>
            <td align="right"><span class="field">Article URL:</span></td>
            <td align="left"><span class="field">
            <input name="articleurl" type="text" value="<?php echo $articleurl; ?>" size="50"/>
            </span></td>
          </tr>
          <tr>
            <td align="right"><span class="field">Article Tags:</span></td>
            <td align="left"><span class="field">
              <input type="checkbox" name="articletags[]" value="geology" id="articletags_0" />
              <input type="checkbox" name="articletags[]" value="astronomy" id="articletags_1" />
            </span>
            </td>
          </tr>
          <tr>
            <td colspan="2" align="center" valign="middle"><input type="submit" name="submit" value="Add this Article" /></td>
          </tr>
        </table>
        . . .
</html>
<?php 
 }


 include('settings.php');

 if(count($articletags) > 0)
{
 $articletags_string = implode(",", $articletags);
}

 if($_SERVER['REQUEST_METHOD'] == 'POST')
 { 

 $articletitle = mysql_real_escape_string(htmlspecialchars($_POST['articletitle']));
 $articleorganization = mysql_real_escape_string(htmlspecialchars($_POST['articleorganization']));
 $articledate = mysql_real_escape_string(htmlspecialchars($_POST['articledate']));
 $articleurl = mysql_real_escape_string(htmlspecialchars($_POST['articleurl']));
 $articletags = implode(',', $_POST['articletags']);

 if ($articletitle == '' || $articleorganization == '')
 {

 $error = 'ERROR: Please fill in all required fields!';


 renderForm($articletitle, $articleorganization);
 }
  else
 {

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

$article_id = mysql_insert_id();

mysql_query("INSERT INTO tags SET articletags='$articletags' ");

$tag_id = mysql_insert_id();

mysql_query("INSERT INTO articles_tags SET article_id='$article_id',
      tag_id='$tag_id' ")


 or die(mysql_error()); 

 header("Location:addsuccess.php"); 
 }
  }
    else

  {
   renderForm('','','','','');
  }
?>

我现在遇到的麻烦是弄清楚下一步该做什么(在第二次插入之后)。我知道我需要建立一段关系,但我这辈子都不知道该怎么做。

我假设我需要将标签存储在tags表格中?但如果是这种情况,我如何获取他们的 ID 并将它们作为标签插入到文章中?

任何帮助是极大的赞赏。

4

2 回答 2

0

如果您决定使用此模式,您应该使用表作为表中条目之间的articles_tags关系(1..*)。这意味着表中将有多个条目,与给定文章关联的每个标签具有相同和不同的条目。articlestagsarticles_tagsarticle_idtag_id

article_id或者,您可以通过向表中添加字段来保持对标签所属文章的引用tags

例子:

articles      |        tags          |        articles_tags
id  title         id  tag_text              a_t_id   a_id   t_id
4  Title1         8 Tagblahblah              1        4      8
5  title2         9  tagccccc                2        4      9
                                             3        5      8

所以这些articles_tags 条目意味着ID 为4 的文章具有ID 为8 和9 的标签。标签8 也用于ID 为5 的文章。

这是 SQL 处理多对多关系的标准方式(*..*)

于 2012-06-19T20:13:39.343 回答
0

您可以使用 mysql_insert_id() 来获取最后插入的记录 ID。

于 2012-06-19T20:10:01.147 回答