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_tags
3 番目のテーブルは、 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('','','','','');
}
?>