###前提・実現したいこと
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;
ここの部分を正しく書くことができていないために、画像や検索結果が表示されないのではないかと考えています。
回答1件
あなたの回答
tips
プレビュー