質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

3656閲覧

CGIファイル、HTMLファイル、SQLファイルを用いてデータベースサイトを構築するときのエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/12/13 07:10

編集2017/12/19 07:02

###前提・実現したいこと
Perlで書かれたCGIファイル、HTMLファイル、SQLファイルを用いてデータベースサイトを作成しようとしています。国名入力し、検索すると国旗の画像、国名、年が表示されるように実装したいです。
記載しているコードとは別にPerlで書かれたモジュールファイル(拡張子.pm)も作成してあります。

###発生している問題・エラーメッセージ

SELECT * FROM flag WHERE cname= 'France';

とSQL分だけが表示され、検索結果が出てこないというエラーが生じています。
アドバイスのほどよろしくお願いいたします。

###該当のソースコード

SQL

1DROP TABLE IF EXISTS flag; 2CREATE TABLE flag ( 3 ID varchar(1024), 4 cname varchar(30), 5 fyear integer 6); 7 8INSERT INTO flag (ID, cname, fyear) VALUES ( 9'https://upload.wikimedia.org/wikipedia/en/thumb/c/c3/Flag_of_France.svg/1280px-Flag_of_France.svg.png','France', 1794);

HTML

1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 5<title>国名検索</title> 6</head> 7<body> 8<form action="pgconnect.cgi" method="get"> 9<p>Country Name<input type="text" name="cname" value="France" size="20" /></p> 10<p><input type="submit"/></p> 11</form> 12</form> 13</body> 14</html>

Perl

1#!/usr/bin/perl 2use CGI; 3use psql; 4 5my $cgi = new CGI; 6$cgi->charset('euc-jp'); 7print $cgi->header, 8 $cgi->start_html(-title=>'検索結果', -lang=>'ja-JP'); 9 10my $conn = psql->connect; 11 12my $query = $conn->quote($cgi->param('title')); 13if (length($cgi->param('title')) > 0) { 14 $sql = "SELECT * FROM flag WHERE cname= $query;"; 15} else { 16 $sql = "SELECT * FROM flag;"; 17} 18 19my $sth = $conn->prepare($sql); 20my $ref = $sth->execute; 21 22print $cgi->h2('PostgreSQL on CNS'), 23 $cgi->p($cgi->escapeHTML($sql)); 24while(my $arr_ref = $sth->fetchrow_arrayref){ 25 my ($ID, $cname, $fyear) = @$arr_ref; 26 my $url = $cgi->escapeHTML($id); 27 my $text = $cgi->escapeHTML("$cname, $fyear"); 28 my $img = $cgi->img({width=>100, src=>$url}); 29 print $cgi->a({href=>$url}, $img), 30 $cgi->span($text), 31 $cgi->br; 32} 33print $cgi->end_html; 34 35$sth->finish; 36$conn->disconnect; 37 38exit;

###試したこと
Perlで書かれたCGI用のコードが怪しいと考え、SQLと同じ変数名にしようと変更しましたが

Perl

1print $cgi->h2('PostgreSQL on CNS'), 2 $cgi->p($cgi->escapeHTML($sql)); 3while(my $arr_ref = $sth->fetchrow_arrayref){ 4 my ($ID, $cname, $fyear) = @$arr_ref; 5 my $url = $cgi->escapeHTML($id); 6 my $text = $cgi->escapeHTML("$cname, $fyear"); 7 my $img = $cgi->img({width=>100, src=>$url}); 8 print $cgi->a({href=>$url}, $img), 9 $cgi->span($text), 10 $cgi->br;

ここの部分を正しく書くことができていないために、画像や検索結果が表示されないのではないかと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scivola

2017/12/13 07:53

「Ruby」と書かれているコードは Perl ではないでしょうか
退会済みユーザー

退会済みユーザー

2017/12/13 10:30

コメントいただきましてありがとうございます。MacのFinderではこのファイルの種類の表示はRubyとなっているのですが、こちらのコードはPerlなのでしょうか。
CHERRY

2017/12/13 11:05

「#!/usr/bin/perl」って指定していますから perl でしょうね。
退会済みユーザー

退会済みユーザー

2017/12/13 12:38

ご指摘いただきましてありがとうございます。
KojiDoi

2017/12/13 15:29

perlとrubyの区別もつかないレベルでいきなりcgiは無謀ではないでしょうか。まずコマンドラインでそのcgi用スクリプトがきちんと動くことを確認するのが先と思います。また、プログラムの構造上の問題が解決したとしても、文字コード設定がバラバラなのでおそらくこのままでは文字化けすると思います。
退会済みユーザー

退会済みユーザー

2017/12/13 22:39

ご意見をいただきましてありがとうございます。しかしながら締め切りがあり、PerlとRubyを学習する時間がなく、困っている状態です。文字コード設定に関しましては、ご指摘いただきましてありがとうございます。
scivola

2017/12/14 17:05

テーブルに正しくレコードが作られていることはどうやって確かめられましたか?
guest

回答1

0

ベストアンサー

フォームでは検索キーワードを

html

1<input type="text" name="cname" value="France" size="20" />

cname で送っているのに,CGI 側では

perl

1my $query = $conn->quote($cgi->param('title'));

title で受けているのはなんだか変ですね。

ただ,画面には

SELECT * FROM flag WHERE cname= 'France';

と SQL 文が表示されるのですよね???

投稿2017/12/14 17:16

scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問