こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

入力フォームが上手く動きません。。(mysql,php使っています)

入力フォームが上手く動きません。。(mysql,php使っています)

レビュー系のサイトを作っていて、入力フォームを作ってみたのですが、上手く動きません。どなたかご助言いただけますと幸いです。

【関連するテーブル】
tag
 構造
 tagid , tag
 1 , OPが素晴らしい
 2 , EDが素晴らしい
 3 , 世界観がいい
 ・
 ・
 ・


tag_title
 構造
 tagid , titleid , tagcom(コメント欄) , vote(今回は使いません) , tagcom_date(日付)


【組んだソース】
==============================
<?php
if(isset($_GET['titleid'])){
if(preg_match('/^[0-9]+$/', $_GET['titleid'])){
$titleid = $_GET['titleid'];
}else{
$titleid = 0;
}
}else{
//ダメな場合の処理
$titleid = 0;
}

(中略)

$tag_array = array();
$tagcom_array = array();

if(isset($_POST['tag_regist'])) {

$tag_array = $_POST['tag'];
$tagcom_array = $_POST['tagcom'];

extract($_POST);
mysql_connect('***');
mysql_select_db('***');
$kyou = date("y-m-d");

$tagcnt = 0;
for ($tagcnt=0;$tagcnt<count($tag_array);$tagcnt++) {
$sql_tag = "";
$sql_tag = "INSERT INTO tag_title (tagid, titleid, tagcom, vote, tagcom_date) VALUES (".$tag_array[$tagcnt].", ".$titleid.", '".$tagcom_array[$tagcnt]."', '".$vote."', '".$kyou."')";
mysql_query($sql_tag);
print $tagcom_array[$tagcnt];

}
}

print "<form action=\"tag_input.php?titleid=" . $titleid . "\" method=\"post\" >";

$sql2 = "select * from tag";
$result2 = mysql_query($sql2);
$rows2 = mysql_num_rows($result2);

while($row2 = mysql_fetch_array($result2)){

echo "<p><input type=\"checkbox\" name=\"tag[]\" value=\"" . $row2["tagid"] . "\" >";
echo $row2["tag"];
echo "   <input type=\"text\" name=\"tagcom[]\" size=\"60\">";
echo "</p>";
}
print "<p><input type=\"submit\" value=\"書き込む\" >";
print "<input type=\"reset\" value=\"リセット\"></p>";
print "<input type=\"hidden\" name=\"tag_regist\" value=\"true\" />";
print "</form>";
==============================

【実際に作ってみたやつ(一例)】
ttp://www.game-minzoku.jp/tag_input.php?titleid=4784


【何ができないのか】
tag_titleidにデータを送りたいのですが、コメントのtagcomだけ上手くはいりません。。(たまにはることもあるので謎です。フォームなので100%の精度にしたいです)


ソースは友人と協力して作ったのですが、どうしてもこのあたりで行き詰ってしまいました。
ソースの組み方にこだわりは全くないので、根本からの変更も可能です。
拙いご説明で大変恐縮ですが、お分かりになりましたらよろしくお願いいたします。
また、ご説明が足りない個所などあればおっしゃってください!

投稿日時 - 2010-08-26 00:39:02

QNo.6135930

すぐに回答ほしいです

質問者が選んだベストアンサー

checkboxはチェックされたものしか値がPOSTされません。
textフィールドは未入力でもPOSTされます。

そのため例えばname="tag[]"のチェックボックスが5個あるとして2番目と4番目をチェックしたとすると$_POST["tag"]には2個の配列(キー名は0と1)がセットされていることになります。
name="tagcom[]"は5個あるので$_POST["tagcom"]には5個の配列(キー名は0~4)がセットされています。
そのため"tag"と"tagcom"では画面の入力値とずれる(tagcomの2番目と4番目をINSERTしたいのにキー名がずれるので違うものがINSERTされる)

修正するとしたらhtmlに書き出す時点でキー名を固定すればいいと思います
<!--修正ソース-->
・・・略・・・
foreach ($tag_array as $key => $value) {
$sql_tag = "";
$sql_tag = "INSERT INTO tag_title (tagid, titleid, tagcom, vote, tagcom_date) VALUES (".$tag_array[$key].", ".$titleid.", '".$tagcom_array[$key]."', '".$vote."', '".$kyou."')";
mysql_query($sql_tag);
print $tagcom_array[$key];
}

・・・略・・・

$count=0;
while($row2 = mysql_fetch_array($result2)){

echo "<p><input type=\"checkbox\" name=\"tag[".$count."]\" value=\"" . $row2["tagid"] . "\" >";
echo $row2["tag"];
echo "   <input type=\"text\" name=\"tagcom[".$count."]\" size=\"60\">";
echo "</p>";
$count++;
}

ソースの記述が間違ってたらすいませんです

投稿日時 - 2010-08-26 10:09:29

お礼

お早いご回答いただきまして誠にありがとうございます!
duron様の組んでいただいたもので作り直したら無事誤作動なく作動するようになりました!
とても嬉しいです!本当にありがとうございました!!

投稿日時 - 2010-08-26 16:04:08

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

 「tag_titleid」というキーワードがどこにも無いので、「tag_titleidにデータを送りたい」というのがどういう処理を意味しているのか不明です。
 別のページにPOSTしたりするのですか?
 
 上記のソースではPOSTされたデータをそのままデータベースに登録しているので、正しく登録されるかどうかはPOSTされたデータによります。このページにPOSTする前のページの処理がどうなってるかとかにもよりますし、POSTされたデータの正当性をチェックしていないのも気になります。
 
 データベースに登録した後、データベースを検索し、このページ内のフォームを表示していますが、「tagcom」のフィールドにはvalueが設定されていないので、検索結果のコメントは表示されません。

投稿日時 - 2010-08-26 10:05:31

お礼

お早いご返信誠にありがとうございます!
tag_titleidについてご説明不足で申し訳ありませんでした。
また、
ご丁寧にご解説していただきましてありがとうございました!
まだまだ未熟なため、magicalpass様のご助言を参考にし今後も努力してまいりたいと思います!
ありがとうございました!

投稿日時 - 2010-08-26 15:32:40

あなたにオススメの質問