CGI初心者です。もともと他のプログラムも組んだ経験がないので、テキストも何冊か購入したのですが、いまいちわかりません。
いま、データベース検索のものを作成(カスタマイズ)しているのですが、入力項目で入力したものを、検索する項目(プルダウンメニューにしたいのです)に反映させるには、どういうふうに作成したらいいのでしょうか?
なにか、ヒントでかまわないので教えてください。
例えば、参加型作品のなかで、作者を記入したら、検索項目にその作者が表示されてひとつの検索絞り込みのキーにしたいのです。
よろしくおねがいします。

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

A 回答 (1件)

 いまのboriさんは希望のCGIに対して自分の能力が空回りしている状態なので、もうちょっと細かいプログラム設計をした方がいいですね(^_^;


 たとえば、「A」というプログラムを完成させるためには、「1」「2」「3」という3つの段階を踏まなければならない。
 「1」をやるためには、どういうプログラミングをすればいい、ということを本を読んで1つ1つ調べていくのです。
 とりあえず、手持ちの本の中から1冊選んで、そこに掲載されているプログラムをみんな入力して実行してみてください(このとき、プログラムは手入力しないと勉強になりません)。
 それをやれば、Perl というものがどんなもので、いったいどういうことが出来るのか、といったことが分かってくると思います。
    • good
    • 0
この回答へのお礼

deagleさんのいわれるとおりですね。理想だけが先走っていて、力がぜんぜんたりなくて、前にすすめないのに時間だけすぎちゃうのであせってしまって・・・
勉強の仕方もよくわからなかったのですが、アドバイスにあるように、まずは1冊打ち込んでみます。ありがとうございました。その上で躓いたらまた助けてください。お願いします。

お礼日時:2001/02/08 10:08

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

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

Q全文検索ではなく、必要なデータ(複数フィールド)のみを検索するにはどうしたらいいですか?

はじめまして、まだCGI初心者なものでよくわからないですが教えてください。

あるCGI関連の書籍に付属のCD内に修められた顧客データベースを改造しているところです。このデータベースはCSVデータの全ての情報を検索して結果を表示するものなのですが、これを「備考($ message)以外の情報を全て検索して結果を表示する」とするにはどのように改造したらよろしいでしょうか。備考は検索しないけれど、他の情報は全て検索して結果を表示させるということです。ただし、結果として表示される画面には備考($ message)の内容も表示させたいのです。

検索に関わる箇所を抜き出すと次のようになります。初心者なので説明がうまくできていないと思いますが、ご解答できる方々は是非ともご教授お願いいたします。

############################
# 初期画面、検索結果表示
############################
sub html {
open(IN,"$file") || &error(100,'ファイルをオープンできません');
@DB = <IN>;
close(IN);
@DB = reverse(@DB);

if ($FORM{'action'} eq "search") {
$kw = $FORM{'kw'};
&jcode::convert(*kw,'euc');
foreach $line (@DB) {
$value = $line;
if ($kw =~ m/[\*\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/){
&error(101,'検索キーが不適切です'); }

&jcode::convert(*value,'euc');
if ($value =~ /$kw/i){
push(@HIT,$line);
}
}
}else{
@HIT = @DB;
}
print "Content-type: text/html\n\n";

print <<"EOL";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
<title>$title</title>
@style
</head>
<body>
<div align="center">
<p class="title">$title</p>
<p class="text"><b>|</b><a href="$HomeUrl">ホームページ</a><b>|</b></p>
<form method="post" action="$reload">
<input type="hidden" name="action" value="write">
<input type="submit" value="データベースに書き込む" class="buttonsmall">
</form>
<form method="post" action="$reload">
<input type="hidden" name="action" value="search">
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td>
<p class="text">名前、ユーザー名他、備考文の文字検索ができます。</p>
</td>
</tr>
<tr>
<td>
<table border="0" cellspacing="0" cellpadding="2">
<tr valign="bottom">
<td>
<input type="text" name="kw" size="30" class="textarea">
</td>
<td>
<input type="submit" value="検索" class="buttonsmall">
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
EOL


if ($FORM{'line'} eq ''){
$line = 0;
}else{
$line = $FORM{'line'};
}

$data_count = @HIT - 1;
$view_end = $line + ($view-1);
if ($view_end >= $data_count){
$view_end = $data_count;
}
foreach ($line .. $view_end) {
($date_now,$number,$name,$email,$hp,$message,$tiku,$yuza,$tel,$fax,$busho)
= split(/\,/,$HIT[$_]);
$message =~ s/\r/<br>/g;
print <<"EOL";

############################

はじめまして、まだCGI初心者なものでよくわからないですが教えてください。

あるCGI関連の書籍に付属のCD内に修められた顧客データベースを改造しているところです。このデータベースはCSVデータの全ての情報を検索して結果を表示するものなのですが、これを「備考($ message)以外の情報を全て検索して結果を表示する」とするにはどのように改造したらよろしいでしょうか。備考は検索しないけれど、他の情報は全て検索して結果を表示させるということです。ただし、結果として表示される画面には備考($ mes...続きを読む

Aベストアンサー

検索のロジックは、
------------------------------
1行取りだして、$lineに入れる
$lineの内容を$valueに入れる
$valueにキーワードが含まれているかどうかチェックする
------------------------------
というようになっています。これを全行分くりかえしています。
$valueがチェックの対象ですから、チェックの対象を変更したいなら$valueを調整すればOKです。
上記の「$lineの内容を$valueに入れる」の部分を、「$lineのうち必要なものだけを$valueに入れる」という処理に変えます。

簡単な方法としては、この行を、

$value = $line;
 ↓↓
$value = join ',', (split /,/, $line)[1, 3, 4, 5];

に書き換えれば良いと思います。
CSVの左から2、4、5、6個目の項目だけ取り出して、$valueに入れています。
チェックさせたい項目を指定してください。一番左がゼロ、次が1、2、3…です。

ちなみに、カンマで区切って取り出した後にわざわざまたカンマでつないでいるのは、キーワードとフィールドの切れ目を考慮してのことです。

ところで、最初に書いたロジックをもう一度よく見てください。
なんだか無駄なことしていますよね。$lineは何のためにあるのか?はじめから$valueに入れればいいのに。
そういう意味では、今回のように特定の項目だけ対象にすることを想定してあるのかもしれませんね。

検索のロジックは、
------------------------------
1行取りだして、$lineに入れる
$lineの内容を$valueに入れる
$valueにキーワードが含まれているかどうかチェックする
------------------------------
というようになっています。これを全行分くりかえしています。
$valueがチェックの対象ですから、チェックの対象を変更したいなら$valueを調整すればOKです。
上記の「$lineの内容を$valueに入れる」の部分を、「$lineのうち必要なものだけを$valueに入れる」という処理に変えます。

簡単な方法と...続きを読む

Qプルダウンメニューの選択肢の保持について

こちらにはだいぶお世話になっています。

perlとpostgresを使用してcgiを作成しているのですが、
下記のコードでプルダウンメニューにDBの値を入れて、
DBにデータが追加されてもプルダウンにもデータが追加されているプルダウンメニューを作りました。

$sql="select * from testtable order by code";
$result = $conn -> prepare($sql1);
$ref = $result -> execute;
while(@ref = $result->fetchrow){
$options.="<option value='$ref[0]'>$ref[1]</option>\n";
}
$select="<select name=''>\n<option value=''>選択してください</option>\n$options</select>\n";
print "$select";

データの検索時にこのプルダウンメニューを使っているのですが、選らんだ選択肢を例えばBとして
送信すると、一番上の「選択してください」に戻ってしまします。

これを送信してもその時選択した選択肢を残すやり方を教えて頂けますでしょうか?

testtableの中身:      プルダウンメニュー化
|code|name|      |選択してください▼|
| 1 | A |         |    A    |
| 2 | B |        → |    B    |
| 3 | C |         |    C    |
| 4 | D |         |    D    |

こちらにはだいぶお世話になっています。

perlとpostgresを使用してcgiを作成しているのですが、
下記のコードでプルダウンメニューにDBの値を入れて、
DBにデータが追加されてもプルダウンにもデータが追加されているプルダウンメニューを作りました。

$sql="select * from testtable order by code";
$result = $conn -> prepare($sql1);
$ref = $result -> execute;
while(@ref = $result->fetchrow){
$options.="<option value='$ref[0]'>$ref[1]</option>\n";
}
$select="<...続きを読む

Aベストアンサー

selected で選択状態にすれば?

<select name="select2">
<option value="option1">option1</option>
<option value="option2">option2</option>
<option value="option3" selected>option3</option>
</select>

Qプルダウンメニューの中の値を飛ばしたいです。

こんばんは。
いつもお世話になっております。

Aテキストから持ってきたデータをプルダウンで
表示させ、プルダウンを選択された値でBテキストや
Zテキストの中身を表示させる、という動きがしたいのです。
過去ログで探してみたのですが、ジャバスクリプトを
使えば可能っぽい、という所までしかわからず途方に
くれています。
プルダウンメニュー選択後、「選択」ボタンを押した
場合でのB~Zテキストのデータ表示は出来るのですが
プルダウン選択のみで、という部分が出来ずに困っています。

試しに書いたスクリプトは下記↓です。
<SELECT NAME=\"keyname\" onChange=\"navigate('keyname.cgi?param='this.selectedIndex);\">

$i=$start;
foreach $line (@alllines) {
($keyname,$name) = split(/\,/,$line);

<OPTION VALUE=\"$keyname\">$name</OPTION>
";
$i++;
}

Aテキストの値を、プルダウンで表示される事はされるのですが、
VALUE=\"$keyname\"の値が、keyname.cgiへ渡って
くれないのです。

どうかご指導よろしくお願い申し上げます。

こんばんは。
いつもお世話になっております。

Aテキストから持ってきたデータをプルダウンで
表示させ、プルダウンを選択された値でBテキストや
Zテキストの中身を表示させる、という動きがしたいのです。
過去ログで探してみたのですが、ジャバスクリプトを
使えば可能っぽい、という所までしかわからず途方に
くれています。
プルダウンメニュー選択後、「選択」ボタンを押した
場合でのB~Zテキストのデータ表示は出来るのですが
プルダウン選択のみで、という部分が出来ずに困っています。
...続きを読む

Aベストアンサー

onChange=\"navigate('keyname.cgi?param='this.selectedIndex);\">

onChange=\"this.form.submit()\">
とかしてみたらどうでしょう

QCGI.pmによるプルダウンメニューのvalue値取得方法について

CGI.pmを使ってプルダウンメニューのvalue値を得たいのですが、ラジオボタンと同じ記述で取得できると聞きましたが上手くいきません。ちなみにラジオボタンはうまくいきました。HTMLの記述が良くないのでしょうか?教えてください。
【HTML】
<select size="1" name="q1">
<option>選択してください</option>
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
</select>
【CGI】
use CGI;
$q = new CGI;
$p1 = $q->param('q1');

Aベストアンサー

その記述で問題なく取れました。
確認済み。

ただ、name が q1 なのに、変数が $p1 で取っているので、そこの記述ミスかも知れません。
print のところを確かめてみてください。

Q検索中に「検索中」と表示するには?

Perlスクリプトで作成した、Webでのデータ検索(キーワード検索)等で、
検索結果を出す前に、"検索中・・"のようなページをあいだに出す事は
可能でしょうか?(検索結果を表示する迄に数秒~数十秒かかる場合、
あいだに"検索中"の文字または動画Gifなどのページを表示したい)
何か方法わかりましたらお教え下さい。宜しくお願い致します。
ちなみに検索CGIはここのを基盤にしております
http://tohoho.wakusei.ne.jp/soft/wsrch.htm

Aベストアンサー

これが参考になるのではないでしょうか?

参考URL:http://itb-tech.itboost.co.jp/perl/perl_14.php


おすすめ情報