0

私の目標は、別のフォーム(edit.php)を使用して作成されたエントリを後で編集できるようにするエントリフォーム(addnew.php)を作成することです。

現在、addnew.phpはいくつかのテキストフィールドと2つのチェックボックスを使用しており、私がやろうとしているのは、フォームからMySQLデータベースに情報を挿入することです。テキストフィールドの情報は1つのテーブルに挿入され、チェックボックスの情報は別のテーブルに挿入されます。

ただし、現在、3番目のテーブル(必要な場合)を使用して、編集フォームのaddnew.phpで使用されているのと同じ形式を使用できる交差テーブルを作成しようとしています。

つまり、addnew.phpにはいくつかのテキストフィールドとチェックボックスがあり、edit.phpもあります。違いは、edit.phpには情報が入力され、チェックボックスの場合は次のようになります。チェックすると、ユーザーはさらにチェックボックスをオンにするか、すでにチェックされているチェックボックスをオフにするかを選択できます。

私が今持っている3つのテーブルは次のとおりです。

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('','','','','');
  }
?>

私が今問題を抱えているのは、次に何をすべきかを正確に理解することです(2回目のINSERTの後)。私は関係を築く必要があることを知っています、しかし私は私の人生のためにそれをする方法を理解することができません。

タグをtagsテーブルに保存する必要があると思いますか?しかし、その場合、どうすればIDを取得して、記事のタグとして挿入できますか?

どんな助けでも大歓迎です。

4

2 に答える 2

0

mysql_insert_id()を使用して、最後に挿入されたレコードIDを取得できます。

于 2012-06-19T20:10:01.147 に答える
0

このスキーマを決定する場合は、テーブルをとテーブル(1 .. *)articles_tagsのエントリ間の関係として使用する必要があります。これは、特定の記事に関連付けられたタグごとに同じで異なる複数のエントリがテーブルに存在することを意味します。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エントリは、ID4の記事にID8および9のタグがあることを意味します。タグ8は記事ID5にも使用されます。

これは、多対多の関係を処理するSQLの標準的な方法(*..*)です。

于 2012-06-19T20:13:39.343 に答える