プロが教えるわが家の防犯対策術!

PHPとMySQLで構築するという内容の参考書2冊を読んだ程度の知識レベルです。しばらくPHPと離れていたので、さらに退化しているかもしれません。。。
環境はWindowsXP、PHP4.3.2.2です。
ぜひ、皆さんの知恵をお借りできればと思い、質問をさせていただきます。

DBには 
発売日(outday) お菓子名(name) 発売店(shop) などが入っております。
発売日やお菓子名、発売店など1つ~3つの条件で検索することが目的です。

例えば、お菓子名のみの検索をしようとして、

HTMLフォーム
<INPUT size="44" type="text" name="name" maxlength="100">
↑に検索したいお菓子名を記入して、

$sql="select * from okashiwhere (name like '%$name%') order by outday;
↑でnameのデータを受けとって、欲しいお菓子データを取り出すことはできたのですが、

↓のように
<INPUT size="44" type="text" name="shop" maxlength="100">; <INPUT size="44" type="text" name="name" maxlength="100">;
フォームを2つ作り


$sql = "select * from okashi
where (shop like '$%shop%') and
(name like '%$name%')by outday;

↑のように2つ以上の検索条件が重なると、
「0件」みつかりました。と検索が出来なくなってしまいます。

検索条件は、検索項目が1つでも2つでも同じ同一です。

 
本に書いてあるまま、名前を換えて動かしているつもりなのですが、
どこが間違っているか本当に分かりません。

文字制限で全体を載せることができず、はしょってしまいましたが、
わからない点がありましたらおっしゃってください。


お忙しい中恐れ入りますが、ぜひ皆さんのお知恵をお借りしたいのです。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

> 0 toppa 全店 20070116


> 1 焼マロン 南店 20060130
> 2 魚くん 岡山店 20060607
>
> 1つの項目だけのときは「焼きマロン」
> 2つの項目には「焼きマロン」「南店」と入れました。

ここは大事なところですから、厳密な話をしましょう。
「焼きマロン」の「き」はあるのが正しいですか?ないのが正しいですか?

また、
select * from okashi where shop like '%山%' and name like '%く%';
というSQL文をコマンドプロンプト上で実行したとき、
2 魚くん 岡山店 20060607
のレコードがヒットしますか?
    • good
    • 0
この回答へのお礼

本当に早いお答えありがとうございますっ。

申し訳ありません。
「焼マロン」が正しいです。
ご指摘ありがとうございます。 

コマンドプロンプトで
select * from okashi where shop like '%山%' and name like '%く%';
では
Empty set (0.01 sec)
との結果でしたが、

select * from okashi where (name like '%山%') and (shop like '%く%') ;
と記入したところ

+----+--------+--------+----------+
| no | shop | name | outday |
+----+--------+--------+----------+
| 2 | 魚くん | 岡山店 | 20060607 |
+----+--------+--------+----------+
の結果が得られましたっ。


ご教授よろしくお願いいたします。

お礼日時:2007/03/15 10:08

> | 2 | 魚くん | 岡山店 | 20060607 |



この結果を得たということは、プログラム上で
select * from okashi where (name like '%山%') and (shop like '%く%') ;
というSQL文をうまく発行できさえすれば、
少なくとも1件はヒットするということですよね。

PHPスクリプトでSQL文を生成したり実行したりしている箇所や、
HTMLでフォームを作っている箇所を見せてくだされば、
何かわかるかもしれません。
    • good
    • 0
この回答へのお礼

おはようございます。
いつもご返答いただきましてありがとうございます。

select * from okashi where (name like '%山%') and (shop like '%く%') ;
で反応が返ってきたことに感動し、PHPの全文を見直しました。

間違っている箇所は無いと思っていたのですが、
$が抜けている箇所が2点有り、
修正したところ2個以上の条件で検索ができるようになりました!!!

何度も丁寧なご指導いただきましてありがとうございます。
本当に助かりました。
これからはもっと自分の間違いを疑って、しっかり見直しをいたします。
本当に、ありがとうございます!!

お礼日時:2007/03/16 08:49

回答1の者です。



> コマンドプロンプトで同じく行ってみましたが、
> 0件でした。。。

そのwhere句を満たすデータは、okashiテーブルの中に
間違いなく存在しますか?
差し支えなければ、2~3件くらいでよいですから、okashiテーブルの
内容を見せてくださると、「このSQL文はOK」とか「このSQL文はNG」とか
いう話がしやすいように思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございますっっ。

okashiのテーブルはこのように成ってます
(nonameshopoutday)←フィールド名です
0toppa全店20070116
1焼マロン南店20060130
2魚くん岡山店20060607




このような内容が46件登録されています
検索には
1つの項目だけのときは「焼きマロン」
2つの項目には「焼きマロン」「南店」と入れました。

お忙しい中、ありがとうございます。
よろしくお願いいたします。

お礼日時:2007/03/15 08:23

> $sql = "select * from okashi


> where (shop like '$%shop%') and
> (name like '%$name%')by outday;

間違いなく、このとおりになさっていますか?だとすると、
・2行目の $%shop% は、%$shop% が正しいのではありませんか?
・3行目の by の前に order が必要ではありませんか?

また、フォーム上で入力したのと同じ条件を用いて、
コマンドプロンプトからMySQLを使ったとき、検索結果はゼロ件ですか?
それとも何件かヒットしますか?
    • good
    • 0
この回答へのお礼

早速のお答えありがとうございます!!!

>・2行目の $%shop% は、%$shop% が正しいのではありませんか?
>・3行目の by の前に order が必要ではありませんか?
おっしゃるとおりでした。
ありがとうございます。早速修正いたしました。

修正いたしましたが、やはり・・・ヒットいたしません。

コマンドプロンプトで同じく行ってみましたが、
0件でした。。。

すいません、お忙しい中恐れ入りますが
御教授よろしくお願いいたしますっっ

お礼日時:2007/03/14 21:50

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QphpとSQLで複数条件で検索する場合に不要な条件があるとき

下記のようなテーブルがある場合にSQL文を書くとき、
id | aaa | bbb | ccc
1 AAA BBB CCC
2 AAB BBB CCD

項目aaaとbbbを検索対象とした場合
Where aaa=AAA and bbb=BBB
となると思いますが、

この項目aaa,bbb,cccの中から、ユーザが入力した項目のみ検索対象としたい場合にどのように記述すればよいのでしょうか?

現状では、下記のようにphpでaaa,bbb,ccc項目のどこに条件が入力されているかで、ifで分けして複数のSQL文を書いていますが、どうにか1つのSQLでスマートにできませんか?

if aaa !="" and bbb = "" and ccc ="" then
select * from table where aaa = ***
elseif aaa !="" and bbb !="" and ccc="" then
select * from table where aaa = *** and bbb=***
end

下記のようなテーブルがある場合にSQL文を書くとき、
id | aaa | bbb | ccc
1 AAA BBB CCC
2 AAB BBB CCD

項目aaaとbbbを検索対象とした場合
Where aaa=AAA and bbb=BBB
となると思いますが、

この項目aaa,bbb,cccの中から、ユーザが入力した項目のみ検索対象としたい場合にどのように記述すればよいのでしょうか?

現状では、下記のようにphpでaaa,bbb,ccc項目のどこに条件が入力されているかで、ifで分けして複数のSQL文を書いていますが、どうにか1つのSQLでスマートにできま...続きを読む

Aベストアンサー

冗長なSQLを書くよりはデータ渡しの工夫はphp側ですべきです
たとえばこんなかんじ

<form>
aaa:<input type="text" name="aaa" value=""><br>
bbb:<input type="text" name="bbb" value=""><br>
ccc:<input type="text" name="ccc" value=""><br>
<input type="submit" value="search"><br>
</form>

<?PHP
$sql="select * from hogehoge where 1";
$aaa=(isset($_GET["aaa"])and $_GET["aaa"]!=="")?$_GET["aaa"]:null;
$bbb=(isset($_GET["bbb"])and $_GET["bbb"]!=="")?$_GET["bbb"]:null;
$ccc=(isset($_GET["ccc"])and $_GET["ccc"]!=="")?$_GET["ccc"]:null;
if(is_null($aaa) and is_null($bbb) and is_null($ccc)){
$sql.=" and 0";
}else{
if(!is_null($aaa)) $sql.=" and `aaa`='$aaa'";
if(!is_null($bbb)) $sql.=" and `bbb`='$bbb'";
if(!is_null($ccc)) $sql.=" and `ccc`='$ccc'";
}
print $sql;
?>

実際にはプレースホルダで処理する方が賢明。

冗長なSQLを書くよりはデータ渡しの工夫はphp側ですべきです
たとえばこんなかんじ

<form>
aaa:<input type="text" name="aaa" value=""><br>
bbb:<input type="text" name="bbb" value=""><br>
ccc:<input type="text" name="ccc" value=""><br>
<input type="submit" value="search"><br>
</form>

<?PHP
$sql="select * from hogehoge where 1";
$aaa=(isset($_GET["aaa"])and $_GET["aaa"]!=="")?$_GET["aaa"]:null;
$bbb=(isset($_GET["bbb"])and $_GET["bbb"]!=="")?$_GET["bbb"]:null;
$ccc=(isset($_GET[...続きを読む

Qphpで複数の検索語を検索対象にしたい

環境:php+mysql

やりたいこと:
半角や全角スペースの入った複数の検索語を検索対象にしたいです。
例:りんご みかん で検索されたキーワード

現在のコードは以下のとおりです。。
長くなるので、検索結果数だけの処理までを書いてます。
$sql の箇所で for文など使って繰り返し処理をさせればよいのかと思い
google先生で検索しましたが、、どうにも該当しそうなサイトが見つからず
アドバイスいただきたく質問させていただきました。


単語1つの場合だけ検索結果が正しく動きますが、
現在は、検索フォームに「りんご みかん」と入れると 検索結果ゼロになります。
これはこれで正しいのですが、、
希望は「りんご みかん」と入れると りんごとみかんを含む検索をしてほしい
と考えてます。

<?php
$keywords = $_GET["key"];

//検索キーワードのデータが何件あるか?

$sql="select * from item where title like '%".$keywords."%' or Description like '%".$keywords."%' or category like '%".$keywords."%' ";
$datas = mysql_query($sql , $db );
$num = mysql_num_rows($datas);
echo "検索結果は "."<span style=\"font-size:30px;\">".$num."</span>"."件です。<br>";
}

?>

環境:php+mysql

やりたいこと:
半角や全角スペースの入った複数の検索語を検索対象にしたいです。
例:りんご みかん で検索されたキーワード

現在のコードは以下のとおりです。。
長くなるので、検索結果数だけの処理までを書いてます。
$sql の箇所で for文など使って繰り返し処理をさせればよいのかと思い
google先生で検索しましたが、、どうにも該当しそうなサイトが見つからず
アドバイスいただきたく質問させていただきました。


単語1つの場合だけ検索結果が正しく動きますが、
現在は、検索フォ...続きを読む

Aベストアンサー

http://blog.olivesystem.com/824.html

Q検索時の選択内容を保持する方法

質問失礼致します。

PHPで
・テキスト
・ラジオボタン
・チェックボックス
が複数入り混じった検索システムを作っています。

なんとか形になって検索の形はできたのですが、
必要な項目を検索し結果画面に映った際に
入力したテキスト・ラジオ・チェックボックスの内容が初期化されてしまいます。


検索した結果、テキストの方はインプット時に
<input type="text" name="name" size="50" value="<?= $_POST['name'] ?>" >
とすることで、結果画面にある検索システムの入力内容は保持できたのですが、

・ラジオ および ・チェックボックス の内容の保持を
なんとかまとめて設定することはできないでしょうか?


検索はしましたが、初心者なこともあり検索ワードがいまいち的を得てないのか、
考えている答えになかなかたどり着けておりませんので、
この場を借りて質問の方させていただいた次第でございます。


ご存じの方いらっしゃいましたら、是非ともご教授お願い致します。

Aベストアンサー

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_REQUEST["test_d"]]=" selected";

print <<<eof
<form>
<input type="checkbox" name="test_a" value="1"{$checked["test_a"]}>A
<input type="checkbox" name="test_b" value="1"{$checked["test_b"]}>B
<input type="radio" name="test_c" value="1"{$checked["test_c"][1]}>C-1
<input type="radio" name="test_c" value="2"{$checked["test_c"][2]}>C-2
<input type="radio" name="test_c" value="3"{$checked["test_c"][3]}>C-3
<select name="test_d">
<option value="">---</option>
<option value="1"{$selected["test_d"][1]}>D-1</option>
<option value="2"{$selected["test_d"][2]}>D-2</option>
<option value="3"{$selected["test_d"][3]}>D-3</option>
</select>
<input type="submit" value="go">
</form>
eof;
?>

HTMLとプログラム部分の切り分けをするためにはなるべく単純な構造がよいでしょう
私の場合こんな処理をしています。
(実際の運用の際にはデータチェックをしたりするのでもう少し複雑になりますが)

<?
//checkbox
if($_REQUEST["test_a"]=="1") $checked["test_a"]=" checked";
if($_REQUEST["test_b"]=="1") $checked["test_b"]=" checked";

//radio
if(isset($_REQUEST["test_c"])) $checked["test_c"][$_REQUEST["test_c"]]=" checked";

//select
if(isset($_REQUEST["test_d"])) $selected["test_d"][$_...続きを読む

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

Q検索条件で絞込みの方法を教えて下さい。

いつもお世話になります。
1千件ほどのデータからいろいろな条件でデータの絞込みをしたいの
ですが、初歩的な質問で分かりにくいかもしれませんが、御指導
お願いします。

全国の求人情報サイトのように、
市町村テーブル   企業テーブル  条件テーブル  時給    
中京区       花屋      毎日      800円以上
下京区       八百屋     週末だけ    900円以上
上京区       魚屋      平日昼間   1,000円以上
左京区       文房具店    夜専門
右京区       旅館

こんな感じでSQLでテーブルを作っています。
これを検索で絞込みたいのですが、
市町村→企業→条件→時給と全部を絞り込んだり、1つだけの条件
で絞込み方法はわかるのですが、
ある場合は二つだけ、例えば企業と時給で検索をかけたり
ある場合は、市町村と条件と時給で検索をかけたりして
絞込み結果を出したいのですが、

値のない項目があるとその項目の該当条件がないために
検索結果がなしになります。

同じページにリンクを貼って、GETで値を渡して、絞込みを
したいと思っているのですが、よいお知恵をお願いします。

一番基礎的なところからご指導を頂けるとうれしいです。

こんな感じのHPが理想です。
http://www.jobengine.jp/search.html?p=lsk26

いつもお世話になります。
1千件ほどのデータからいろいろな条件でデータの絞込みをしたいの
ですが、初歩的な質問で分かりにくいかもしれませんが、御指導
お願いします。

全国の求人情報サイトのように、
市町村テーブル   企業テーブル  条件テーブル  時給    
中京区       花屋      毎日      800円以上
下京区       八百屋     週末だけ    900円以上
上京区       魚屋      平日昼間   1,000円以上
左京区       文...続きを読む

Aベストアンサー

WHERE条件で likeを使う手もあるかと思います。

#時給条件、なしの場合
if($jikyu == ""){
$other = "";
}
#時給条件、ありの場合
else {
$other = "and jikyu >= '$jikyu'"
}

WHERE shicho like '%$shicho%' and kigyo like '%$kigyo%' and joken like '%$joken%' $plus

市町村、企業、条件はlike '% %' でも大丈夫じゃないでしょうか。時給は~円以上を使う場合if分で条件式を変えてあげればいいと思います。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Qphp+mysqlで検索フォームの作成について

ごく最近PHPとmysqlを勉強しだした初心者です。

PHPでDBの検索フォームを作ろうとしているのですが、どうしてもわからないので質問させていただきました。

検索フォームに電話番号を入れると、該当する人の情報を表示させるようにしたいと思ってます。


私の持っている本では、SQLの検索を行うにはSELECT句を使い

  SELECT フィールド名 FROM テーブル名 WHERE 条件文;

という風にあって、条件文がid=1とかの定数で指定したものしかありません。


検索フォームに入力された数値($_POSTの値)を条件文にいれて、検索フォームで入力された電話番号を検索するようにできますか?
もしできないなら、どのような形で作ればよいでしょうか?

贅沢ですが、できれば簡単に解説もしていただけると非常に助かります。

ご教授の程、何卒よろしくお願い致します。

Aベストアンサー

> もし電話番号に該当者がいない場合は
> 「該当者が存在しません」

$stmt->fetch で条件に該当する件数文だけのループを回していますから、
このループ回数が0回だった時が「該当者が存在しない」時ということになります。
それを数える変数処理でも入れておけばいいでしょう。
あと、私の書いたコードでは、事前にテーブルヘッダを出力していますが、これは該当なしの時は出力不要なので、ちょっと順番を変えて

---ここから---
print "<table><tr><th>id</th><th>c_id</th><th>name</th><th>address</th>\n";
while ($stmt->fetch()) {
print "<tr><td>$id</td><td>$c_id</td><td>$tel</td><td>$address</td></tr>\n";
}
---ここまで---
の部分が

---ここから---
$count = 0;
while ($stmt->fetch()) {
if ($count == 0) print "<table><tr><th>id</th><th>c_id</th><th>tel</th><th>name</th><th>address</th>\n"; #最初の一回だけ出力
print "<tr><td>$id</td><td>$c_id</td><td>$tel</td><td>$name</td><td>$address</td></tr>\n";
$count++;
}
if ($count == 0) print "該当者が存在しません";
---ここまで---
といった感じになるかと思います。

> もし電話番号に該当者がいない場合は
> 「該当者が存在しません」

$stmt->fetch で条件に該当する件数文だけのループを回していますから、
このループ回数が0回だった時が「該当者が存在しない」時ということになります。
それを数える変数処理でも入れておけばいいでしょう。
あと、私の書いたコードでは、事前にテーブルヘッダを出力していますが、これは該当なしの時は出力不要なので、ちょっと順番を変えて

---ここから---
print "<table><tr><th>id</th><th>c_id</th><th>name</th><th>address</th>\n";
...続きを読む

QプルダウンメニューでValue値をPHPへの受け渡しができません

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
に渡す処理ができず、行き詰っています。

http://www.big.or.jp/~mio/ga/ht/htref/ht_ref_optio.htm

で、プルダウンメニューで選択した場合のvalue値を
渡すことは可能と思い、タグを書きましたが、PHPで
データをダンプさせると何も表示されませんでした。
つまりはPHPにはデータが渡されていない状態で、HTM
Lタグレベルでの問題という事が分かり、タグの勉強
もしましたが、option部分の記述は間違っていないの
では?、と思っています。

ではform actionの、データを送信する送信ボタンの
記述で足りないところがあるのでは、と思い、調べた
のですが解決方法が見つかりません。
どなたかご教授いただけましたら幸いです‥
宜しくお願い申し上げます。

クライアント環境はWin2000、IE6.0
サーバーはRedHat9.0でPHPは4.2.2です。

こんばんは。

HTML(apache)+MySQL+PHPの連携で、プルダウンメニュ
ー2つとテキストボックス2つの入力内容をPHPにデー
タとして渡し、それをキーワードにして、データベー
スの検索をする、という処理をさせようと思い、PHP
にデータを渡すためのタグを書いています。

http://ns1.php.gr.jp/pipermail/php-users/2002-December/012011.html

を参考に、テキストボックス2つの内容をPHPに渡すこ
とはできたのですが($_POST関数で渡しています)、
プルダウンメニューで選択した場合のvalue値を、PHP
...続きを読む

Aベストアンサー

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<select name="rev" size="3">
<option value="1">ver 8.01.15</option>
<option value="2">ver 7.01.34</option>
<option value="3">ver 7.00.29</option>
</select>
<br>

キーワード1を入力してください(必須):<input type="text" name="key1"><br>
<p>
キーワード2を入力してください(任意):<input type="text" name="key2"><br>
<p><input type="submit" name="exec" value="検索">
</form>
</body>
</html>

この場合、
<form> タグの位置を変えるだけで動作します。
<select>タグの前に移動させてください。
PHP4.0.6で動作確認済みです。
JavaScript使うまでもなかったですね。失礼しました。
=== 以下ソース ===

<html>
<body>
<form action="yamaha0.php" method="post"> <!-- ここに移動 -->

<br>分類<br>
<select name="clasfct" size="3">
<option value="1">新機能</option>
<option value="2">仕様変更</option>
<option value="3">バグ修正</option>
</select>

<p>

Rev<br>
<...続きを読む

QPHPとMySQL 検索フォームを作りたい。

PHPとMySQLを使って商品一覧を作りました。

◆商品一覧表 http://pips.chu.jp/0/07/index.php
<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<th>登録日</th>
</tr>
<?php foreach ($shohin as $g) { ?>
<tr>
<td><?php echo $g['id'] ?></td>
<td><?php echo $g['name'] ?></td>
<td><?php echo $g['bunrui'] ?></td>
<td class="td-price"><?php echo number_format ($g['htanka']) ?></td>
<td class="td-price"><?php echo number_format ($g['stanka'])?></td>
<td><?php echo $g['day'] ?></td>
</tr>
<?php } ?>
</TABLE>


◆特定の商品一覧表 http://pips.chu.jp/0/07/irui.php

$st = $pdo->query("SELECT * FROM shohin");の部分を
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='衣類' ");に変更すると
分類が衣類だけの表になります。

◆入力フォーム http://pips.chu.jp/0/07/form.php

<form action = "kensaku.php" method="post">
   分類:<input type="text" name="bunrui">
   <input type="submit" name="submit" value="検索">
</form>
こんな感じの入力フォームを作り、分類名を入力すると、その分類名の一覧表に反映されるようにしたいです。

◆検索された一覧表 http://pips.chu.jp/0/07/kensaku.php

<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' ");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<th>登録日</th>
</tr>
<?php foreach ($shohin as $g) { ?>
<tr>
<td><?php echo $g['id'] ?></td>
<td><?php echo $g['name'] ?></td>
<td><?php echo $g['bunrui'] ?></td>
<td class="td-price"><?php echo number_format ($g['htanka']) ?></td>
<td class="td-price"><?php echo number_format ($g['stanka'])?></td>
<td><?php echo $g['day'] ?></td>
</tr>
<?php } ?>
</TABLE>


「入力フォーム」と「検索された一覧表」のソースの書き方がわかりません。
どのようにけば実現するでしょうか。
まだ初心者なので、本やサイトを調べながら見よう見まねでやっています。
具体的に、どの部分を書き換えればよいか教えていただければ有難いです。

よろしくお願いします。

PHPとMySQLを使って商品一覧を作りました。

◆商品一覧表 http://pips.chu.jp/0/07/index.php
<?php
function connect() {
return new PDO("mysql:dbname=★.★","★","★",
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"));
}
$pdo = connect();
$st = $pdo->query("SELECT * FROM shohin");
$shohin = $st->fetchAll();
?>   
<TABLE border="1">
<tr>
<th>商品番号</th>
<th>商品名</th>
<th>分類</th>
<th>販売単価</th>
<th>仕入単価</th>
<t...続きを読む

Aベストアンサー

一番手っ取り早いのは
$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='?' ");

$st = $pdo->query("SELECT * FROM shohin WHERE bunrui='" . $_POST["bunrui"] . "' ");
にすれば動きませんか?
(入力フォームに何かしら文字を入れないと、何も出力されないでしょうけど…)

あとは
・SQL実行前に入力値(POST値)のチェックを行う
・SQL実行時はプレースホルダを使う
・DB接続時、SQL実行時のエラーチェックを行う
を実装すれば、とりあえず大丈夫かと。

※全然的外れなことを言ってましたらスミマセン。

QPHP + MySQL で登録時に重複チェックをしたいです。

PHP + MySQL で登録時に重複チェックをしたいです。
DBには
ID Title Name
1 Book1 Author1
2 Book2 Author2
と3000件ほど入っています。これからも増えていく予定です。

このDBにPHPから新たに100件ほどのレコードを一気に登録したいときに、
・Title名が既にDBに登録されている → 何もせずに次へ
・Title名がまだ登録されていない時 → DBへ登録
と、この様な処理をさせたいと考えています。

現状は登録したい値を配列で回し、一つ一つSELECT文で件数チェックをし、0件で有れば登録。0件以外であれば無視。と、している状況です。
ただこれですと、どうしてもサーバーに負担が掛かってしまう気がするのです。

もし、何か他に良い方法がありましたら教えていただけないでしょうか?
よろしくお願いいたします。

Aベストアンサー

他の方法の例として、

DBにて、"Title" をunique keyにして、登録時に、
INSERT IGNORE INTO table_name 構文を使ってINSERT する

では如何でしょう。
Mysqlが、勝手に重複しいれば無視して、重複がなければ登録してくれます


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング