投稿者「」のアーカイブ

PHPで検索表示できるページにトライ

2019年3月25日

PHPでのプログラムも慣れてきたので、次は条件を設定してデータを表示できるページを作ろうかなと思っています。
商品を探すときに、いくらからいくらの範囲で、どういう条件のものを安い順に一覧表示してクリックしたら詳細情報を得られるというようなページってよく見かけますよね。

これをマスターすると、ほぼどんなホームページでも作成できるようになります。

とりあえず、激安の戸建ての家をテーマに作ってみようと思います。
業者に頼らなくても、家を処分したい人が無料で掲載できるようにすれば面白いかなと思います。

データベースの項目はno,id,date,tiiki,tyoumei,tikunensuu,tyuusya,map,setback,saikentiku,bikou1,bikou2,totimenseki,tatemonomenseki,madori,sennin,mail,namae,kakaku,gazou1,gazou2,gazou3,gazou4,gazou5,gazou6,gazou7,gazou8,gazou9,gazou10
検索対象はtiiki,tikunensuu,kakaku,tiiki2
表示順はdate,kakaku
一覧表示はdate,tiiki.tyoumei,tikunensuu,saikentiku,bikou2,totimenseki,tatemonomennseki,kakaku,madori,gazou1,new
だいたい、こういう感じかな。

2019年3月30日

XAMPP上のデータベースを作成してみました。画像ってデータベースに登録するには不向きなようです。画像へのアドレスを登録して画像は別にアップロードするようです。

2019年3月31日

とりあえずデータベースから読み込んで、画像を1つと築年数と価格を表で表示するPHPを作ってみました。
¥は画面上は\になって表示されますがエディターでcopy&pasteは問題なくできます。

<?php
try {
$pdo = new PDO(‘mysql:dbname=gekiyasukodate;host=127.0.0.1;charset=utf8’, ‘root’, ”);
} catch (PDOException $e) {
echo ‘DB接続エラー: ‘ . $e->getMessage();
}
?>

<?php

echo “<table bgcolor=\”#fbe48c\”>\n”;
$stmt =$pdo->query(“SELECT * FROM gekiyasukodate”);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $results) {

$price=number_format($results[‘kakaku’]);

echo “<tr>\n”;
echo “<td bgcolor=\”#ffffff\” ><p class=\”resizeimage2\”><IMG src=\”{$results[‘gazou1’]}\” border=\”0\”></p></td>\n”;
echo “<td bgcolor=\”#ffffff\” class=\”gyou2\”>築年数 {$results[‘tikunensuu’]}年<BR>価格 $price 円</td>\n”;
echo “</tr>\n”;
}
echo “</table>\n”;

?>

2019年4月1日

1ページに5件のデータの表示にして、その以上のデータは次のページで表示しようと思ったのですが、なかなかできません。
ネットで調べて、試してみたのですが、なかなか正常に動作しませんでしたが、なんとか正常に動作するプログラムを見つけました。

https://manablog.org/php-pagination/

を参考に、とりあえず該当するデータを5件ずつ表示する事ができました。まだまだ改良が必要です。

<?php
try {
$pdo = new PDO(‘mysql:dbname=gekiyasukodate;host=127.0.0.1;charset=utf8’, ‘root’, ”);
} catch (PDOException $e) {
echo ‘DB接続エラー: ‘ . $e->getMessage();
}
?>

<?php

// GETで現在のページ数を取得する(未入力の場合は1を挿入)
if (isset($_GET[‘page’])) {
$page = (int)$_GET[‘page’];
} else {
$page = 1;
}

// スタートのポジションを計算する
if ($page > 1) {
// 例:2ページ目の場合は、『(2 × 5) – 5 = 5』
$start = ($page * 5) – 5;
} else {
$start = 0;
}

echo “<table bgcolor=\”#fbe48c\”>\n”;
// postsテーブルから5件のデータを取得する
$stml = $pdo->prepare(”
SELECT *
FROM gekiyasukodate
ORDER BY kakaku ASC
LIMIT {$start}, 5
“);
$stml->execute();
foreach ($stml as $results) {

$price=number_format($results[‘kakaku’]);

echo “<tr>\n”;
echo “<td bgcolor=\”#ffffff\” ><p class=\”resizeimage2\”><IMG src=\”{$results[‘gazou1’]}\” border=\”0\”></p></td>\n”;
echo “<td bgcolor=\”#ffffff\” class=\”gyou2\”>築年数 {$results[‘tikunensuu’]}年<BR>価格 $price 円</td>\n”;
echo “</tr>\n”;
}
echo “</table>\n”;

// postsテーブルのデータ件数を取得する
$page_num = $pdo->prepare(”
SELECT COUNT(*) id
FROM gekiyasukodate
“);
$page_num->execute();
$page_num = $page_num->fetchColumn();

// ページネーションの数を取得する
$pagination = ceil($page_num / 5);

?>

<?php for ($x=1; $x <= $pagination ; $x++) { ?>
<a href=”?page=<?php echo $x ?>”><?php echo $x; ?></a>
<?php } // End of for ?>

PHPのプログラムでエラー表示の際に、行数が表示されるのですが、実際のエディターでの行数とずれるので、不都合だったのですが、原因はエディターで2行に渡る文が実際には1行である場合があって、それが原因だと気づきました。
エディターの1行で表示できる文字数を最大にして解決しました。
秀丸の場合は、表示—-折り返し—-最大 でOKです。

2019年4月2日

ページへのリンクで現在表示されているページへのリンクを外して現在のページが判るようにしました。

// postsテーブルのデータ件数を取得する
$page_num = $pdo->prepare(”
SELECT COUNT(*) id
FROM gekiyasukodate
“);
$page_num->execute();
$page_num = $page_num->fetchColumn();

// ページネーションの数を取得する
$pagination = ceil($page_num / 5);

?>

<?php for ($x=1; $x <= $pagination ; $x++) {
if ($x <> $page ){
?>
<a href=”?page=<?php echo $x ?>”><?php echo $x; ?></a>
<?php
} else {echo $x;}?>
<?php }// End of for ?>

2019年4月5日

チェックボックス、ラジオボタンで条件を設定して、選択条件に従って検索するページを出力するPHPを作ろうと試行錯誤しています。
例えば、データから金沢と野々市の物件を価格の安い順に表示するような感じです。

チェックボックス、ラジオボタンの表示ができるのですが、選択した条件をデータとして取得するところが全く分かりません。結構し選べたのですが、分かりません。
それと複数の条件を1つの「送信する」でデータを取得する方法が判りませんでした。
これで3日間悩みました。

結論として、チェックボックス、プルダウン、ラジオボタンの使い方って、PHPでなくて、HTMLのformの勉強が必要だったのでした。ホームページは長年作っているけど、スタイルシートとformは避けていたので気が付きませんでした。
それと1つのフォームに複数のチェックボックスやプルダウン、ラジオボタンを入れて、まとめて送信する事も可能だとわかりました。

formではmethod= はgetかpostのどちらかを使い、action= では選択したデータを使って改めて表示しなおす場合は、今作動しているphpファイル(というかそのphpファイル自身)の名前を記入すれば良いようです。
(hudousan.phpというファイルなら<form method=”get” action=”hudousan.php”>)

option value= で選択したデータ(<option value=”kakaku”>ならkakaku)は、method=”get” の場合、<select name=”example1″>なら$_GET[‘example1’]で取り出せます。
こういう基本的な事を教えてくれる資料ってなかなか見つからなくて本当に苦労しました。
とりあえず、プルダウンで表示順を選択して表示する事ができるようになりました。

<?php
try {
$pdo = new PDO(‘mysql:dbname=gekiyasukodate;host=127.0.0.1;charset=utf8’, ‘root’, ”);
} catch (PDOException $e) {
echo ‘DB接続エラー: ‘ . $e->getMessage();
}
?>

<?php
function h($var) // HTMLでのエスケープ処理をする関数
{
if (is_array($var)) {
return array_map(‘h’, $var);
} else {
return htmlspecialchars($var, ENT_QUOTES, ‘UTF-8’);
}
}
// 表示する順番を設定 デフォルトは価格順
if (isset($_GET[‘example1’])) {
$example1=h($_GET[‘example1′]);
}
else { $example1=’kakaku’;}
?>

// 選択した条件を基に、現在のページを再読み込み
<form method=”get” action=”hudousan.php”>
<p>掲載順</p>
<select name=”example1″>
<option value=”kakaku”>物件の安い順</option>
<option value=”date”>登録が新しい順</option>
</select>
<p><input type=”submit” value=”送信する”></p>
</form>

<?php
echo “<table bgcolor=\”#fbe48c\”>\n”;
$stml = $pdo->prepare(”
SELECT *
FROM gekiyasukodate
ORDER BY $example1 ASC
“);
$stml->execute();
$result = $stml->fetchAll(PDO::FETCH_ASSOC);

foreach ($result as $results) {
$price=number_format($results[‘kakaku’]);// 数字を3桁ごとに,を入れて表示
echo “<tr>\n”;
echo “<td bgcolor=\”#ffffff\” ><p class=\”resizeimage2\”><IMG src=\”{$results[‘gazou1’]}\” border=\”0\”></p></td>\n”;
echo “<td bgcolor=\”#ffffff\” class=\”gyou2\”>築年数 {$results[‘tikunensuu’]}年<BR>価格 $price 円</td>\n”;
echo “</tr>\n”;
}
echo “</table>\n”;

でもチェックボックスで複数の条件を選択する方法がわかりません。

2019年4月6日

チェックボックスで複数の条件選択して、その選択条件に従って検索表示するPHPが動作しました。これだけで1日以上かかりました。
<input type=”checkbox” name=”example[]” value=”金沢市”>金沢市
<input type=”checkbox” name=”example[]” value=”野々市”>野々市
のようにして受け入れ画面を設置します。
example[] と ”野々市”>野々市 は各自が選びます。
example[]は配列なので[]は必須です。
<input type=”submit” value=”送信する”> でデータを送るのはプルダウンと同様です。

プルダウンの条件とチェックボックスで複数の条件選択の両方を一緒に条件を送るのは下記のような感じです。

 

<form method=”get” action=”hudousan.php”>
<p>掲載順</p>
<select name=”example1″>
<option value=”kakaku”>物件の安い順</option>
<option value=”date”>登録が新しい順</option>
</select>

<p>複数選択可</p>

<input type=”checkbox” name=”example[]” value=”金沢市”>金沢市
<input type=”checkbox” name=”example[]” value=”野々市”>野々市
<input type=”checkbox” name=”example[]” value=”白山市”>白山市
<input type=”checkbox” name=”example[]” value=”川北町”>川北町
<input type=”checkbox” name=”example[]” value=”内灘”>内灘
<input type=”checkbox” name=”example[]” value=”津幡町”>津幡町

<p><input type=”submit” value=”送信する”></p>
</form>

このページはhudousan.phpなのでaction=”hudousan.php”というのは自らのページを読み直すということになります。

最も重要なポイントは、1つの項目(カラム)で複数のデータを対象に検索する書式を把握する事でした。
例えば、tiikiという項目(カラム)で金沢市と白山市と川北町というデータを対象に検索する場合は、SELECT文の条件設定で WHERE  tiiki IN (“金沢市,白山市,川北町)   という書式が必要という事です。
tiiki IN (“金沢市,白山市,川北町)  の部分の文字列を取得するために 変数を設定します。ここでは$where にしました。
<form method=”get” action=”hudousan.php”>
<input type=”checkbox” name=”example[]” value=”金沢市”>金沢市
で入力したので、そのデータを受け取るには $_GET[‘example’] を使います。
つまり method=”get” と name=”example[]” の部分が受け取る配列名を決めているようです。

$where=”tiiki IN (“;
if (isset($_GET[‘example’])) {
foreach ($_GET[‘example’] as $value) {
$where=$where.”‘”.$value.”‘,”;
}
}

配列 $_GET[‘example’]  を 変数$whereに加えて、 $_GET[‘example’] の前に「 ‘ 」を後ろに「 ‘ 」と「 , 」を加えるという処理です。
$whereの文末が「 , 」 になるので、下記で、文末の「 , 」を削除して「 ) 」を加えます。

$where=substr($where, 0, -1).”)”;

SELECT文の条件設定の部分は

WHERE $where

になります。
なお条件設定して表示するので、表示のデータ数も減るのでページネーションの部分の変更も必要になりました。

$page_num = $pdo->prepare(”
SELECT COUNT(*) id
FROM gekiyasukodate
“);
$page_num->execute();
$page_num = $page_num->fetchColumn();

を下記に変更しました。

$page_num = $pdo->prepare(”
SELECT COUNT(*)
FROM gekiyasukodate
where $where
“);
$page_num->execute();
$page_num = $page_num->fetchColumn();

これでPHPで検索表示できるページの基本的な手法は理解できたのだと思います。

2019年4月7日

テーブル内の画像の上下部に余白ができるので、スタイルシートの

<STYLE>
<!–
@media(min-width: 600px){p.resizeimage2{
width: 240px;
}
}
p.resizeimage2 img{
width: 100%;
}
–>
</style>

を下記に書き換えました。

<STYLE>
<!–
@media(min-width: 600px){p.resizeimage2{
margin-top: 0px;margin-bottom: 0px;width: 240px;
}
}
p.resizeimage2 img{
width: 100%;
}
–>
</style>

2ページ目を見る時に、設定した条件がリセットされて、初期条件の2ページが表示され、設定した条件の2ページ目が見れなくなっていました。
2ページ目に飛ぶリンクは

<a href=”?page=<?php echo $x ?>”><?php echo $x; ?></a>

になっていますが、現状のページのアドレスを取得して、それを基に2ページ目のアドレスを指定するプログラムに変更しました。ばっちり動作しました。

<a href=”<?php echo $_SERVER[‘REQUEST_URI’]?> &page=<?php echo $x ?>”><?php echo $x; ?></a>

今まで、XAMPP上で動作させていたのですが、ある程度、動作するようになったので、オンラインで動作させる事にしました。
データベースのアドレスやデータベース名、テーブル名を変更してアップロードしたのですが、データベースのデータが表示されません。
プログラムを簡略化してもダメです。

$stml = $pdo->prepare(“SELECT * FROM gekiyasukodate”);

の部分が、XAMPPでは動作するけどオンラインでは動作しないようです。

$stml = $db->prepare(“SELECT * FROM gekiyasukodate”);

に変更すると動作しました。

https://kimassi.net/hudousan/hudousan.php

2019年4月8日

チェックボックス、ラジオボタンで条件を設定して、選択条件に従って中古戸建ての激安物件を検索一覧表示するページに必要項目をすべて表示できるように作り変えました。
詳細ページへのリンクも挿入しました。
詳細ページを作れば、とりあえずは基本的な処理はできます。
詳細ページの画像はスライドできてクリックで拡大できるといいかな。
投稿者の会員登録のページと投稿者のデータ入力のページや物件ごとの掲示板も設置しようと思います。かなり本格的なシステムになりそうです。

XAMPPが動作しない

2019年1月1日

新年に入って、時間に余裕が出来たので、PHPの勉強を始めました。

2019年1月3日

本を読んでいて、ちょっと理解しにくいところがあって、実際に動作させたくなって、パソコン上で動作できるXAMPPを利用する事にしました。
https://webkaru.net/php/setup/

Apacheの起動をしてみました。
でも、XAMPPのApacheで使うPort 80が他で使われていてApacheの起動ができません。

https://php1st.com/946
を参考にコマンドプロントでnetstat -nao を動作してローカルアドレスの数字が80のPIDを調べると4でした。
タスクマネージャーの詳細を確認するとSystem (NT Kemel & System)になっていました。

http://lovee7.blog.fc2.com/blog-entry-35.html
を参考に、[コントロールパネル] → [プログラム] → [プログラムと機能] → [Windowsの機能の有効化または無効化]で「Windowsの機能」ダイアログを表示させます。
「インターネット インフォメーション サービス」の項目を開いて、「World Wide Web サービス」のチェックを外しました。

XAMPPを管理者として実行(アイコンを右クリックで管理者として実行)する。
Apacheが起動しました。
Attempting to start Apache service.
が表示されましたが、それ以降進みません。
https://lightning2014.ensyutsubu.com/blog/post-6335/
を参考にして
XAMPP Control Panelで「Apache」の左側についたチェックを押すと×マークになります。
これでApacheの起動するようになりました。 ここまでの道は長かったです。
結局、最初にXAMPPを使わないでApacheが動作しなかった原因も、Port 80が他で使われていた事が原因だったようです。

c:/xampp/htdocs/ に動作するPHPファイル(例えば test.php)を設置してあれば
XAMPP Control PanelでApacheとMySQLをStartさせて
http://localhost/test.php
でtest.phpを動作させることができます。

2019年1月4日

実際にPHPのファイルを動作させてみましたが、日本語は文字化けしました。
c:/xampp/php/ のphp.iniを書き換えると解決するということなんですが、
PHPの絵本では、文字コードEUC-JPにすると書いてあったので、その通りにしても解決しなく
本が古いので、新しい環境(Windows10)に合わせたほうが良いのかなと思って
https://techacademy.jp/magazine/2412 を参考に
文字コードUTF-8にして保存してみたのですが、やっぱり解決しません。

2019年1月5日

結果的には文字コードUTF-8にするのが正解だったのですが、PHPのファイルを作る際にも、UTF-8で入力しなければいけなかったのです。
https://hombre-nuevo.com/programming/%E3%80%90php%E3%80%91%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E5%AF%BE%E7%AD%96%E3%81%AE%E3%81%9F%E3%82%81php%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E3%80%90xampp%E3%80%91/
が参考になりました。

これで、やっと日本語を使ったPHPのファイルをパソコン上で動作させる環境が整いました。
これだけの事で、これほど苦労させられるなんて、先が思いやられます。

次はサーバー上で動作できるように設定です。
サーバーでの設定の変更は、サーバーごとに違うんだと思いますが、自分が利用しているサーバーcoreserverの場合は、coreserverにログインして、サイト設定でPHPのバージョンをphp72に変更です。

早速、XAMPP上で動作したphpファイルをFTPでアップロードして、属性を全部実行可(755)に設定し動作を試してみました。
無事動作しました。やったね!

2019年3月24日

PHPのプログラムの製作に成功し、XAMPP 上のPHPで動作させる必要性に迫られたので、主に使うパソコンすべてにXAMPP 上でPHPを動作する環境を設置する事にしました。

さっそくデスクトップの自作パソコンにXAMPPをインストールしたのですが、動作しません。
「or reconfigure Apache and the Control Panel to listen on a different port」というエラーです。

前回同様
[コントロールパネル] → [プログラム] → [プログラムと機能] → [Windowsの機能の有効化または無効化]で「Windowsの機能」ダイアログを表示させます。
「インターネット インフォメーション サービス」の項目を開いて、「World Wide Web サービス」のチェックを外しました。

XAMPPを管理者として実行(アイコンを右クリックで管理者として実行)する。
XAMPP Control Panelで「Apache」の左側についたチェックを押すと×マークになります。
startボタンをクリックすると、許可画面が表示されるので許可するとApacheが起動しました。
XAMPP Control Panel右上部のConfigをクリックして、Autostart of modulesのApacheにチェックを入れてSaveすると自動起動します。
Start Control Panel MinimizedにチェックしてSaveするとXAMPP Control Panelが表示することなく起動します。

次はPHPのインストールです。
前にダウンロードしてあったphp-7.2.13-Win32-VC15-X64 でインストールします。
展開したフォルダの名前をphpに変更してc:¥phpになるように配置し、phpフォルダの直下にある「php.ini-production」ファイルをコピーし、「php.ini」というファイル名に変更しました。

これでPHPがXAMPPで動作するようになりました。

残りもう1台も同じ設定で動作するようになりました。

ついでに、Windows7のAOA150(液晶サイズ:8.9インチ CPU:Atom N270/1.6GHz/1コア メモリ容量:1GB)にもインストールしました。
特に設定を変えることなく、すんなり動作しました。
PHPの処理も問題なくできました。
寝室用に使おうと思います。

やっぱりPLANT3のガソリンは安い

2019年3月19日

最近、ガソリンの値上げが凄くって、どこも高くなっているのかなあと思っていました。

久しぶりに川北のPLANT3の近くに行ったので、給油しに行ったら、129円でした。
カナショクなんて看板価格137円で8円も違います。

ガソリンの品質についても、カナショクのガソリンよりもPLANT3のガソリンのほうが燃費が良いような気がします。

金沢市内のスタンドは今までカナショクの値段より少し高い価格設定をしているお店が多い(多分、そういう話し合いができていると思われます)ので、カナショクは価格決定権を持っているなんていわれていますが、PLAT3はそういう価格協定とは関わりなく価格設定をしているので信用できます。

コストコもガソリンスタンドを建設中なので、だんだんそういう状況は変わってくるのかもしれません。

ちなみにPLANT3の灯油は74円でした。

2019年4月3日

最近、出光の金沢エネルギーとキグナスの北星産業は、カナショクの値段に関係なく、独自に価格設定しているようです。

中国からの送料っていくら?

2019年3月14日

ちょっと前に、カナショクの自動洗車を利用したのですが、ドアについての注意書きはあったのだけど、アンテナについての注意書きは他のところに小さくしか書いてなかったので、大丈夫かなあと思いながら、一番低い位置にしておけばいいのかなと思って、そのまま利用したんです。

そしたら、洗車の装置が元に戻る時、熱風でアンテナがぼよんぼよん上下に振れだして、唖然としてる内にボキっと折れちゃいました。
普段、無人なのですが、その時にたまたま係員がいてアンテナを折られたと言うと、アンテナの破損は利用者の責任で対応できないと言うんです。
今まで知らなかったのですが、自分のアンテナは外れる種類のものだったようです。

最近は自動車でラジオを聴くことは無く、ミュージックプレイヤーの音源をFMトランスミッターで飛ばしていたのでアンテナは不要なのですが、万が一の時には必要になるかもしれないので交換部品を探すことにしました。

それでamazonで調べたら、送料込み345円というのがあったのです。アンテナは結構長いので送料だけでも、かなりするんではないかと思います。
本当に届くのかなと思って注文してみました。
2月27日に注文して配達予定は3月11日までになっていました。
結果的に届いたのは今日だったのですが、ちゃんと届きました。

中国からWish郵という運送業者によって運送されていました。
簡易包装でしたが、40cm以上で重さは50g弱でした。ちなみに定形外郵便だと200円です。
送料がかからない前提で考えても、345円は凄いです。利益はどこからでているのでしょうか?

2019年3月19日

純正品より、少し感度が悪いかなと思いますが、充分に使えます。

2019年3月22日

せめてAmazonに商品レビューだけでもして貢献してあげようかなと思ったのですが、なぜか「申し訳ありませんが、この商品のレビューを受け付けることができません。 通常ではない投稿状況が確認された等いくつかの理由により、この商品のレビュー投稿は制限されています」と表示されてしまいました。

道の駅氷見(氷見漁港場外市場 ひみ番屋街)

2019年3月13日

羽咋の用事が10時過ぎに終わって、14:00の七尾の用事まで、随分な時間の間隔があったので氷見に寄る事にしました。
氷見には海岸を見に行ったり、食事に行ったりはした事があったのですが、道の駅氷見(氷見漁港場外市場 ひみ番屋街)へ行った事は無かったのです。
以前、「氷見フィッシャーマンズワーフ海鮮館」があったのですが、閉鎖移転して道の駅氷見(氷見漁港場外市場 ひみ番屋街)になったということです。
中に入ると、こじんまりとしたブースに複雑に分かれていてちょっとわかりにくい感じです。

今日のお目当ては干物です。平日の午前中ということもあってお客は少なかったのですが、何軒かの干物の店があるにも関わらず、ほとんどのお客は「堀与」に入っていました。
今日は「堀与」でとび魚煮干680円といわしみりん干し250円と氷見産うるちイワシの丸干し950円を購入しました。

家に帰って検索して、以前、氷見に行った時に「堀与」本店で干物を購入した事に気づきました。「堀与」は大正元年創業の干物屋で、人気のお店ですが、その時には、人気の割にはそれほど美味しくなかったので、ちょっと物足りなさも感じたのでした。

道の駅氷見(氷見漁港場外市場 ひみ番屋街)の場所はこちら  富山県氷見市北大町25−5

2019年3月16日

今日、いわしみりん干しを食べました。柔らかくて、とても美味しかったです。

2019年3月23日

今日、氷見産うるちイワシの丸干しを食べました。とても美味しかったです。