1

PHP フォーム (new.php) を使用して 2 つの MySQL テーブルを更新し、3 つ目のテーブルから情報を取得しようとしています。3 つのテーブルを使用する必要があるのは、保存されている情報を別のフォーム (search.php) で検索できるようにするためと、情報を簡単に編集できるようにするため (edit.php) です。

New.php は 4 つのテキスト入力フィールドと、現在 3 つのチェックボックスを使用しています (ただし、これら 3 つが機能するようになれば、この数は増えるでしょう)。チェックボックスは、データベースに入力される記事を説明するために使用される「タグ」として機能します。したがって、データベース内の 1 つのエントリには次の情報が含まれます。

記事のタイトル、記事の構成、アクセス日、記事の URL、および記事のタグ (idこのテーブルには列もあります。

タイトル、組織、日付、および URL はすべて という名前のテーブルに格納されますarticles

タグはすべて、という名前のテーブルに格納されますtags(85 個あります)。この表には と の 2 つの列がidありtag_contentsます。

articles_tags3 番目のテーブルは、 article_id と tag_id の 2 つの列で呼び出されるリレーション テーブル (または「交差テーブル」と呼ばれますか?) です。

new.php が現在行っていることは、タイトル、組織、日付、および URL をarticlesテーブルに追加し、それを使用mysql_insert_id()してそのエントリの ID を取得することです。

しかし、その後、チェックボックスで何をする必要があるのか​​ わかりません。

私は3つのチェックボックスを持っています:

<input type="checkbox" name="articletags[]" value="science" id="articletags_0" />
<input type="checkbox" name="articletags[]" value="geology" id="articletags_1" />
<input type="checkbox" name="articletags[]" value="astronomy" id="articletags_2" />

これらのチェックボックスを何らかの方法で使用して、記事との関係を作成する必要があります。たとえば、岩に関する記事を挿入すると、フォームは次のようになります。

Article Title: Great new rocks!
Article Organization: US Geology Assoc.
Access Date: 09/20/2012
Article URL: www.rocks.com

Science [X]    Geology [X]    Astronomy [ ] (note that the X marks a checked checkbox)

また、データベース テーブルは次のようになります。

(table: articles) id | articletitle     | articleorganization | articledate | articleurl
                  13 | great new rocks! | US geology assoc.   | 9/20/2012   | www.rocks.com


(table: tags)     id | tag_contents
                   5 | geology
                   9 | science

(table: articles_tags)   article_id  | tag_id
                            13       |   5
                            13       |   9

tagsテーブルは変更されないことに注意してください。使用可能なタグのみが保存され、テーブルで参照できるようになりますarticles_tags

私はこの状況を理解することができず、今から 1 週間ハッキングしています。参考までに、new.php のコードを以下に追加します。

    <?php 
 }

 // connect to the database
 include('settings.php');

 if(count($articletags) > 0)
{
 $articletags_string = implode(",", $articletags);
}
 // check if the form has been submitted. If it has, start to process the form and save it to the database
 if($_SERVER['REQUEST_METHOD'] == 'POST')
 { 
 // get form data, making sure it is valid
 $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']));

 // check to make sure both fields are entered
 if ($articletitle == '' || $articleorganization == '')
 {
 // generate error message
 $error = 'ERROR: Please fill in all required fields!';

 // if either field is blank, display the form again
 renderForm($articletitle, $articleorganization);
 }
 else
 {
 // save the data to the database
 mysql_query("INSERT INTO articles SET articletitle='$articletitle',
      articleorganization='$articleorganization',
      articledate='$articledate',
      articleurl='$articleurl' ")

 or die(mysql_error()); 

 $article_id = mysql_insert_id();

 foreach( $POST_['articletags'] as $newtag )
{
   mysql_query('INSERT INTO articles_tags (article_id,tag_id) VALUES ($article_id, $newtag)');
}

 // once saved, redirect to success page
 header("Location:addsuccess.php");  
 }
 }
 else
 // if the form hasn't been submitted, display the form
 {
 renderForm('','','','','');
 }
?>
4

1 に答える 1

0
<input type="checkbox" name="articletags[]" value="5" id="articletags_0" />Science
<input type="checkbox" name="articletags[]" value="9" id="articletags_1" />Geology

次にphpで

foreach( $POST_['articletags'] as $newtag )
{
   mysql_query('INSERT INTO articles_tags(article_id,tagID) VALUES( $idFromArticleInsert, $newtag )')
}
于 2012-06-20T14:23:34.763 に答える