我的目标是创建一个条目表单(addnew.php),以便以后编辑使用其他表单(edit.php)创建的条目。
目前,addnew.php使用了一些文本字段和2个复选框,而我正在尝试做的是将表单中的信息插入到MySQL数据库中。文本字段中的信息将插入到一个表中,复选框中的信息将插入到另一个表中。
现在,我正在尝试使用第3个表(如果需要)来创建一个交集表,这个表允许我在编辑表单中使用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('','','','','');
}
?>
我现在遇到的问题是确切地知道下一步该做什么(在第二次INSERT之后)。我知道我需要建立一种关系,但我不能为我的生活找出如何做到这一点。
我假设我需要将标签存储在tags
表中?但如果是这种情况,我如何获取他们的ID并将其作为标签插入文章?
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用mysql_insert_id()获取最后插入的记录ID。
答案 1 :(得分:0)
如果决定使用此模式,则应使用articles_tags
表作为articles
和tags
表(1 .. *)中条目之间的关系。这意味着articles_tags
表中的多个条目与给定文章相关联的每个标记都具有相同的article_id
和不同的tag_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&amp; 9.标签8也用于文章标识5.
这是SQL处理多对多关系(*..*)
的标准方法。