0

MySQLデータベースにエントリを作成するための次のPHPフォームがあります。

<?php
    function renderForm($articletitle, $articleorganization, $articledate, $articleurl, $articletags )
    {
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    . . .
    </head>

    <body>
        <div class="container">
            <div class="header">
            . . .
            </div>
            <div class="sidebar1">
            . . .
            </div>
            <div class="content">
                <div id="stylized" class="myform">
                    <form id="form" name="form" action="" method="post">
                        <h1>Create a new entry in the database</h1>
                        <table width="100%" border="0" cellpadding="6">
                            <tr>
                                <td colspan="2"><legend>Article details</legend></td>
                            </tr>
                            <tr>
                                <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>
                        </table>
                        <footer><input type="submit" name="submit" value="Add this Article"></footer>
                    </form>
                </div>
            <div class="footer">
            . . .
            </div>
    </body>
</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' ");
            mysql_query("INSERT INTO articles_tags SET articletags='$articletags' ")

            or die(mysql_error());

            header("Location:addsuccess.php");
        }
    }
    else
    {
        renderForm('','','','','');
    }
?>

現在、フォームはデータベース内の2つのテーブルに正しい情報を送信しますarticlesarticles_tags、リレーションの作成方法がわかりません。

その結果、別のフォームのチェックボックスが編集可能になります(つまり、入力ページのチェックボックスをオンにしてから編集ページに移動すると、そのボックスは既にオンになっているので、チェックを外すと、エントリは更新できます)。

ただし、現在、リレーションを2番目のテーブルに表示しようとしています。テーブルのレイアウトは次のとおりです。

articles

id | articletitle | 記事の整理| 記事の日付| articleurl

articles_tags

id | article_id | tag_id | 記事タグ

どういうわけか記事IDとタグIDを取得して2番目のテーブル(?)に挿入する必要があると思います。

これには3番目のテーブルが必要ですか?

私もここで正しい軌道に乗っていますか?

4

1 に答える 1

1

インライン タグ ストレージ

article_tagsタグのサイズに応じて、テーブル内に保存できます。

article_id | tag_contents

UNIQUE(article_id, tag_contents)記事ごとに重複したタグを保存しないように追加

重要

このアプローチには欠点があります。タグは互いに接続されていないため、タグに変更が加えられた場合は、article_tagsテーブル全体を更新する必要があります。また、タグが 4 バイトよりかなり長い場合は、次の解決策を使用することをお勧めします。

外部タグ ストレージ

別のテーブルを作成しますtags:

id | tag_contents

UNIQUE(tag_contents)重複したタグを保存しないように追加

`article_tags: を変更します。

article_id | tag_id

UNIQUE(article_id, tag_id)記事ごとに重複したタグを保存しないように追加

于 2012-06-19T07:14:55.427 に答える