PHPの話」カテゴリーアーカイブ

WordPressでの不満をまとめて修正しました

2019年5月29日

WordPressのブログでsitemap-generator.php on line 45に関してWarning: Use of undefined constant ddsg_languageのエラーが出るようになりました。
ネットで検索したら、PHP7.2以降でエラー表示するようです。
https://www.seojuku.com/blog/sitemap-generator-php-warning.html#comment-2305
で解決法が掲載されていて無駄な時間を費やさなくて済みました。
ありがたい事です。

そこで気づいたことがありました。pluginsってPHPで出来ているんですよね。
じゃあ、pluginsとかWordpressとか自分で好きなように改造できるんじゃないかと

例えば、sitemapは、従来1ページに50記事しか表示されなく、全部で2000記事があり45ページもあるので全部見るのが大変なんです。
それでsitemapで最初にカテゴリ一覧が表示されて、カテゴリをクリックしたら、そのカテゴリに登録された記事を全部まとめて表示できるようにしたいです。

それと、カテゴリ別での表示の場合、カテゴリごとの最新ページ一覧を表示させたいです。

2019年5月30日

カテゴリ別での記事一覧表示は、WordPress Popular Posts と WPP Plus Widgetというpluginsで対応できることがわかりました。
https://gameusers.org/dev/blog/wpp-plus-widget-new/
を参考に、記事フォーマットを

<li>
<div class=”wpp-list-category-new-title”>{title}</div>
</li>

にしました。記事一覧が10個しか表示されないのは物足りないので、20個ぐらいになるよう改造することにしました。

pluginsの WPP Plus Widgetの中のwpp-plus-widget.phpというファイルの中の

<p><label for=”<?php echo $this->get_field_id( ‘num_posts’ ); ?>”>記事数:</label>
<select class=”widefat” id=”<?php echo $this->get_field_id( ‘num_posts’ ); ?>” name=”<?php echo $this->get_field_name( ‘num_posts’ ); ?>”>
<?php for( $i = 1; $i <= 10; $i++ ) { ?>
<option<?php if( $i == $num_posts ) {echo ‘ selected’;} ?>><?php echo $i; ?></option>
<?php } ?>
</select></p>

の部分の
<?php for( $i = 1; $i <= 10; $i++ ) { ?>

<?php for( $i = 1; $i <= 20; $i++ ) { ?>
に変更すると希望通りになりました。

後で気づいたのですが、個別の記事を単独で表示した場合も、関連のカテゴリの最新記事一覧が表示されるようになりました。便利です。

sitemapのほうもHierarchical HTML Sitemapというpluginsを使用すれば、希望通りに出来る事に気づきました。
さっそく導入しました。
最初にカテゴリ一覧が表示され、その下に記事一覧が延々と表示されます。
カテギリ一覧のカテゴリを表示すると、そのカテゴリ一覧の部分にジャンプします。
これは良いです。

ついでにカテゴリの表示順もMy Category Orderを使って修正しておきました。なんか元々pluginsにインストールしてあり有効化までしてあったのですが、外観—ウィジェットでMy Category Orderを登録してなかったので動作していなかったのです。

ずっと前から不満に思っていた事が、あっという間に解決しました。
もっと早く着手すれば良かった。



PHPのホームページの中に掲示板も設置してみました

2019年4月13日

Swiperを設置したホームページが完成したので、PHPのホームページの中に掲示板も設置してみようかなと思います。
PHPって、本当に面白いです。

2019年4月20日

最初にMySQLのデータベースのテーブルを設定しました。
kimassi_userデータベースで、user_id ,user_name ,user_nickname ,user_email ,user_password ,user_juusyo
kimassi_toukouデータベースで、toukou_id ,toukou_comment ,toukou_date ,toukou_bukken ,toukou_user_id
です。

2019年4月28日

大苦戦しています。
ネットでPHPの掲示板の検索をしてますがPHP7対応の物がほとんどなく、そのままちょっとした改造で使えるものは見つかりません。
その中でも、https://manablog.org/php7-review-bulletin-board/ のサイトが最も求めるものに近いかなと思い、それを基本にして掲示板を作る事にしました。
ただ、この掲示板のプログラムはデータベースの接続方法が最新のPDOを採用してないので、苦戦は覚悟していました。
最初は、データベースの構造も自分向けに改造し、しかも一挙にPDO対応で作ろうと思ったのですが、どうもうまく動作しなく、とりあえずはデータベースの構造だけ変更して、データベースMySQLへの接続方式は、$mysqliでMySQLに接続する仕様のままで動作確認をして、それからPDO対応に改造する方針に切り替えました。
なんで、これだけ苦戦しているのかというと、PHPファイルが単独で動作していないので、複数のファイルが完璧になって初めて正常に動作するのです。しかもデータベースを使うので、共通の仕様にする必要のある部分もあって、ファイルを1つ1つ仕上げていくという訳にはいかないのです。

2019年4月29日

なんとか、すべての機能を動作させることに成功しました。
かなり手を加えました。
これからPDO仕様に改造します。

2019年5月2日

$mysqliでMySQLに接続するプログラムをPDOでMySQLに接続する仕様に作り変えるのはかなり大変です。
今まで気づいたことをなんでもメモしておきます。

function login_user($user_email,$user_name,$user_nickname,$user_tel,$user_juusyo,$user_password,$pdo)
では使用するすべてのカラムの変数と、 $stmt = $pdo->prepare($sql); の変数$pdoを必ず記載する必要があります。

$stmt = $pdo->prepare( について、変数名$stmt、変数名$pdoは関係するプログラムすべてで統一する必要があります。自分で使う変数を統一しておく癖をつけておいたほうが良いようです。

if文で条件が同値の場合は == 条件が2つの分岐は elseif

他のページでも変数の値を受け取れる$_SESSION変数を使う場合は、$_SESSION変数が登録されていない場合の処置(if文)も必要。$_SESSION[‘log’]の場合は
if (!isset($_SESSION[‘log’]))

$_SESSION変数を使う場合は、session_start();が必要で、同じページ内で重複して使うとエラーになるので、functionのページには挿入しないほうが良い。
functionのページには2つの内容のfunctionは入れないほうが良い。

http://localhost/hudousan/public/detail.php?no=1 の1を取得して他のページでも使う場合は

$_SESSION[‘id’]= $_GET[‘no’];

2019年5月5日

なかなか正常に動作しなくて、悩み続けていたのですが、結局、MYSQLの設定が変わっていて、AUTO_INCREMENTが正常に動作していなかったのが主な原因でした。

$sqlの登録

$stmt = $pdo->prepare($sql);
$stmt->execute();

は正常に行われていたのですが、それを実行

$stmt->execute();

しても動作しなかったのです。
$sqlの内容を、直接 MySQLのSQLで直接記入し(copy&pasteできないので)実行させたのですが、何の反応もなく動作しませんでした。
それでプログラムの不備でなくてMYSQLの構造に不備がある事が判明しました。
テーブルtoukou にはtoukou_id というカラムがあるのですが、AUTO_INCREMENTが、うまく動作していなかったようです。

それにいたるまで、Yhooの知恵袋でも、いろいろ教わったし、勉強にもなりました。

次は、投稿内容を運営者と出品者にMAILを送るようにする事です。

【PHPでメール送信】XAMPPのローカル環境上でPHPを使って自分のgmailからメールを送信する


を参考に

XAMPP環境でメールを送る場合はSMTPの設定をC:\xampp\php\php.ini([mail function]のところの変更)、C:\xampp\sendmail/sendmail.ini のSMTPの設定を書き換えました。
Apacheの再起動をしてから設定が有効になりました。
無事、正常に動作しました。

次に、ユーザー登録で、住所と電話番号は任意にしました。
入力があれば、入力を登録し、入力が無ければnullを登録します。
住所と電話番号のカラムはnullでも対応できるようにMySQLを設定しておきます。

if(isset($_POST[‘user_tel’])){$user_tel = $_POST[‘user_tel’];}
else{$user_tel =null;}
if(isset($_POST[‘user_juusyo’])){$user_juusyo = $_POST[‘user_juusyo’];} else{$user_juusyo = null;}

掲示板単独では動作するようになったので、ページの内部に掲示版を挿入しようと思います。

2019年5月6日

XAMPP上ですが、ページの内部に掲示版を挿入することに成功しました。

やったね!!

よく見ると、スタイルシートが外部のサイトと接続して参照されているので、そのサイトが閉鎖されたり移転されると正常に表示されなくなる心配があるので、変更が必要だと気づきました。

2019年5月7日

XAMPP上ですが、ページの内部に掲示版を挿入することに成功しました。

http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js

リンク先のスタイルシートは自分のサイトにインストールすることも可能なようです。BootstrapからDownload Bootstrapをクリックしてダウンロードして、解凍したファイルについて

Bootstrapの公式サイトからダウンロードしたCSSファイル「bootstrap.css他」をCSSフォルダ(元々CSSフォルダに入っている)に入れる。
Bootstrapの公式サイトからダウンロードしたJavascriptファイル「bootstrap.js他」をJSフォルダ(元々JSフォルダに入っている)に入れる。
jQueryの公式サイトからダウンロードしたjavascriptファイル「jquery.min.js」をJSフォルダに入れる。

無事、動作しました。

2019年5月9日

いろいろと試行錯誤して、PDO::FETCH_ASSOC や #result =$stml_>fetch(); などFETCH関数は意味も分からずむやみに使わない方が良いようです。

MySQLからデータを取り込む場合は

$sql=”SELECT user_id,user_email,user_name,user_nickname,user_tel,user_juusyo,user_password
FROM user WHERE user_email = ‘$user_email'”;

$stml = $pdo->prepare($sql);
$stml->execute();

foreach($stml as $result){
$db_hashed_pwd = $result[‘user_password’];
$user_id = $result[‘user_id’];
}

みたいな感じで取得すれば良いようです。

最近、苦労してるのは、他のページやページをリダイヤルする
header(“location: ページURL”);
ですが、かなり制約があって難しいのです。
XAMPP上では正常に動作するのにインターネット上だと動作しない事もあったりします。
header()の前に文字を表示したりするとダメみたいなのですが、実際にどういう場合にはダメなのか、よくわかりません。
それとセッション変数を使っている場合に、途中で登録したデータが消えるという事です。
この2つが解決すると、PHPのプログラムでの不具合が随分減ると思います。

2019年5月10日

セッション変数に登録したデータが消える件は、解決法が見つかりました。
サーバーにあるphp.ini の編集をします。

xrea(coreserver)サーバのトップページからログインします。
php設定から自分のサイトで使っているのPHPバージョンを調べます。自分はphp7.2でした。
FTPでサーバにつなぎpublic_html配下の.fast-cgi-binフォルダ配下のphp53.ini,php54.ini,php55.ini,php56.ini,php70.ini の当該バージョンのphpXX.iniを編集します。
自分の場合はphp7.2.iniです。

session.auto_start = 0 なっているのを session.auto_start = 1 に変更してアップロードします。
これで一挙に解決しました。
ファイル上で、session_start(); が有効に動作しない場合もあるようで、session.auto_start = 1 にすると、常にセッション変数が有効になるようです。

2019年5月11日

セッション変数が記憶されない件と、メールが送れない件と同時に試行錯誤したので、何が原因でメールを送れないのかはっきりしないのですが、無事送れるようになりました。
メールは運営者である自分と、その物の売主に送るように設定しています
下記をCOPY&PASTEすると”や ‘が全角になるので注意して使ってください。
最初のプログラムでは
$to = “kimassi@spacelan.ne.jp,$adress”;
$title = ‘金沢近郊の激安の中古の戸建て物件’.$no;
$content = $add_toukou;
$from = ‘From: kimassi@spacelan.ne.jp’ . “\r\n”;
$result = mb_send_mail($to, $title, $content,$from);
if($result){
echo “メールを送信しました”;
} else {
echo “メールの送信に失敗しました”;
}

 

で、念のためSMTPでも送れるようなプログラムも作ってみました。
PHPMailerを使います。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require ‘../src/Exception.php’;//ディレクトリを確認し修正が必要
require ‘../src/PHPMailer.php’;//ディレクトリを確認し修正が必要
require ‘../src/SMTP.php’;//ディレクトリを確認し修正が必要
/* オブジェクト生成 */
$mail = new PHPMailer(true);
try {
/* サーバー設定 */
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = “mail.spacelan.ne.jp”;
$mail->Username = “メールサーバーのIDを記入”;
$mail->Password = “メールサーバーのパスワードを記入”;

$mail->Port = “587”;
/* 送受信者設定 */
$mail->setFrom(“kimassi@spacelan.ne.jp”, “激安戸建て”);
$mail->addAddress(“kimassi@spacelan.ne.jp,$adress”);
$mail->addReplyTo(“kimassi@spacelan.ne.jp”, “激安戸建て”);
/* コンテンツ設定 */
$mail->CharSet = “UTF-8”;
$mail->Encoding = “base64”;
$mail->Subject = “‘金沢近郊の激安の中古の戸建て物件’.$no”;
$mail->isHTML(【HTMLメール:`true`or`flase`】);
$mail->Body = “h($add_toukou)”;
/* メール送信試行 */
$mail->send();
} catch (Exception $e) {
/* 例外処理 */
die(“Message could not be sent. Mailer Error: “.$mail->ErrorInfo);
}

SMTPでも送れるようにするには、
Exception.php 、PHPMailer.php 、SMTP.php
をアップロードしておかなければいけません。
https://github.com/PHPMailer/PHPMailer/
でダウンロードできます(srcfフォルダ内にあります)。

「C:\xampp\php\php.ini」を編集して「include_path」の項目でinclude_path=”.;C:\xampp\php\PEAR” をinclude_path=“.;C:\xampp\php\PEAR;C:\xampp\php\PHPMailer”  に変更が必要です。

extension=php_openssl.dll の部分を行頭にセミコロンがあれば削除して有効化します。

これでSMTPでメールを送れるようになるはずです。

参考にしていた掲示板のサンプルプログラムでcssの制御にBootstrapが使われていたので、そのまま使っていたのですが、修正もしたいし、便利そうなのでBootstrapの勉強もしようと思います。
Bootstrapは、最も有名なWEBフレームワークだそうです。WEBページでよく使われるフォーム、ボタン、メニューなどの部品がテンプレートとして用意されていてモバイル対応にも優れているそうです。BootstrapではSwiperを使わなくても画像の入れ替えもできるようです。

2019年5月12日

Bootstrapの使い方を知らないままに、参考にしたサイトのままで使っていたのですが、選択画面の位置関係がどうしても気に入らなくて、いろいろ調べてみましたが、なかなか解決しなく苦戦していました。
結局、下記の方法で、希望の幅で表示する事が可能になりました。
(当然<head>より下で</head>より上の方に挿入します)

<STYLE>
<!–
@media (min-width: 800px) {
.container {
max-width: 800px;
}
}
–>
</STYLE>

あと、選択画面のメニューが狭い画面(スマートフォンなど)だと横線3本の表示になりますが、それをクリックしてもメニューが表示されません。ハンバーガーメニューというものらしいです。
XAMPP上では正常に動作しています。
これも解決しければいけません。

header(“location: ページURL”); が動作しない件は、他の件について試行錯誤していたら、知らない間に動作するようになりました。
プログラム上のトラブルでは無かったのかもいれません。
他のプログラムの変更以外は設定など変更したところは無いので不思議です。

ハンバーガーメニューの件も動作するようになりました。
</body> のすぐ後に
<script src=”https://kimassi.net/hudousan/js/jquery-3.4.1.min.js”></script>
<script src=”https://kimassi.net/hudousan/js/bootstrap.min.js”></script>
を入れる事と、jquery-3.4.1.min.jsをダウンロードしてアップロードすることが重要です。
それと、
https://kimassi.net/hudousan/css/bootstrap.min.css
https://kimassi.ne/hudousan/css/bootstrap-theme.min.css
については参考にしたプログラムとバージョンを合わせる事が必要ですし、念のため、ダウンロードしたBootstrapのファイルは全てアップロードしておいたほうが無難です。

https://techacademy.jp/magazine/6270
http://proengineer.internous.co.jp/content/columnfeature/12468

が参考になりました。

一応、すべて完成しました。1ヶ月もかかりましたがPHPの勉強になりました。

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

2019年5月19日

投稿があった時に、運営者と出品者にメールを送るようにしてあるのですが、Gmailのアドレスへ送るとメールが届かないようです。
自動送信メールはSMTP経由で送るようにした方が無難なようです。

SMTPで送るプログラム(PHPMailer使用)も作ってあったのですが、再び使うとインターネット上でもXAMPP上でも動作しなくなっていました。
おかしいなあ、以前は動作していたんだけど・・・・・・

ちなみに、spacelan ,gmail,yahoo,coreserverのいずれのサーバーで設定しても、SMTPホストへの接続ができません。
PHPMailerのバージョンとプログラムの書式の相性の問題かもしれません。
PHPMailerの使い方を説明したサイト自体が少なく、バージョンなど環境が一致しないので、なかなか自分の環境に合うものが見つからないのです。
古いバージョンのPHPMailerを使ったほうが良いようです。

2019年5月20日

PHPMailerのバージョンを6.0.7から5.2.27に入れ替えたら、gmailやcoreserverからは送れました。でもspacelanからは送れません。

それと、header(“location: ページURL”); が動作しなくなりました。メールを送る処理に時間がかかるせいかもしれません。
usleep(2000000); を入れて動作を一時停止をしても状況は変わりません。

2019年5月21日

PHPMailer使用してSMTPでメールを送ってもGmailでは受け取りを拒否するようです。
coreserverやspacelanやyahooメールでは受けとれます。

coreserverのSMTPから送る設定にしていましたが、XAMPP環境ではメールを送れていましたが、インターネット環境からはメールを送れません。
問題山積です。

spacelanからメールを送れない件はプロバイダ(金沢ケーブルテレビ)に問い合わせしておきました。

2019年5月23日

インターネット上でのPHPMailerの不具合とheader(‘Location:の不具合に苦戦しているのですが、それで、問題点を整理してみました。基本はXAMPPの環境で下記のPHPプログラムで動作確認しました。

<?php

mb_language(“japanese”);
mb_internal_encoding(“UTF-8”);

//ソースを全部読み込ませる
//パスは自分がPHPMailerをインストールした場所で

require dirname(__FILE__).’./../../php/phpmailer/PHPMailerAutoload.php’;

require dirname(__FILE__).’./../../php/phpmailer/language/phpmailer.lang-ja.php’;

//autoloderはcomposerでのインストールじゃないとないので
//あえて記述しません。

//SMTPの設定
$mail = new PHPMailer;//インスタンス生成

$mail->IsSMTP();//SMTPを作成
$mail->Host = ‘s197.coreserver.jp’;//メールの環境に合わせて
$mail->SMTPAuth = true ; // SMTP認証を有効に
$mail->CharSet = ‘utf-8’;//文字セットこれでOK

$mail->Username = ‘mail@kimassi.net’; // ユーザー名
$mail->Password = ‘***********’; // パスワードを記入
$mail ->SMTPSecure = ‘STARTTLS’ ; // TLS暗号化を有効に
$mail->Port = 587;//tlsは587でOK

$mail->SMTPDebug = 2;//2は詳細デバッグ1は簡易デバッグ本番はコメントアウトして
$mail->isHTML(true); // HTML形式のメールに設定
//メール本体

$mail->setFrom(‘mail@kimassi.net’,’激安戸建て’); //差出人の設定

$mail->Subject = ‘金沢近郊の激安の中古の戸建て物件’;//件名の設定
$mail->Body = ‘メッセージ本体coreserver’; //メッセージ本体
$mail->AddAddress(‘kanadylan@gmail.com’); // To宛先
$mail->addReplyTo(‘kimassi@spacelan.ne.jp’); //返却アドレス
$mail->addCC(‘syun@kimassi.net’); // Ccアドレス
$mail->isHTML(true);
if(!$mail->send()){
echo ‘Message could not be sent. Mailer Error: ‘, $mail->ErrorInfo;
} else {
echo ‘Message has been sent’;
}

?>
<?php
header(‘Location:https://www.yahoo.co.jp/’);
?>

XAMPP環境では上記のプログラムではSpacelanからはメールを送れませんが、gmailとcoreserverからはメールを送れました。
header(‘Location:https://www.yahoo.co.jp/’); はこれだけの内容だと機能しています。

インターネット上では
require dirname(__FILE__).’./../../php/phpmailer/PHPMailerAutoload.php’;require dirname(__FILE__).’./../../php/phpmailer/language/phpmailer.lang-ja.php’;
の部分を
require_once ‘https://kimassi.net/hudousan/phpmailer/PHPMailerAutoload.php’;
require_once ‘https://kimassi.net/hudousan/phpmailer/language/phpmailer.lang-ja.php’;
に変更しましたが動作しませんでした。
require_once ‘https://kimassi.net/hudousan/phpmailer/PHPMailerAutoload.php’;
require_once ‘https://kimassi.net/hudousan/phpmailer/language/phpmailer.lang-ja.php’;
でも動作しませんでした。

require dirname(__FILE__).’/phpmailer/PHPMailerAutoload.php’;
require dirname(__FILE__).’/phpmailer/language/phpmailer.lang-ja.php’;
にすると動作するようになりました。
絶対パスってhttps://から入れれば良いという事では無いようです。

ちなみに、階層を登ってパスする場合は
require dirname(__FILE__).’/../phpmailer/PHPMailerAutoload.php’;
require dirname(__FILE__).’/../phpmailer/language/phpmailer.lang-ja.php’;
のようにします。
もしrequireが書かれたファイルが元のPHPプログラムではなく、FUNCTIONのPHPプログラムであれば、dirname(__FILE__)はFUNCTIONのPHPプログラムの位置になります。

但し、coreserverからはメールを送れましたが、gmailからは重大なセキュリティ通知が届きました。gmailも身に覚えがあると通知したら、メールを送れるようになりました。

また、いつの間にかgmailでもPHPMailer使用してのSMTPからのメールを受け取れるようになりました。

インターネット上でのPHPMailerの不具合の原因は、絶対パスの記述方法の間違いでした。
こういうのは、ちゃんとエラー表示する設定にしておけば、すぐにわかる事なのかもしれません。
XAMPP上ではエラー表示するけど、ネット上ではエラー表示しないので、ネット上のphp.iniを触ったのだと思います。
とりあえず、プログラム製作中は、プログラム中に
ini_set( ‘display_errors’, 1 );
を入れることにしました。

メールの問題が解決したら、header(‘Location:も解決しました。
header(‘Location: は他に不具合があると正常に動作しないようです。

やっと全てが問題なく動作するようになりました。

2019年5月28日

Spacelanからのメールは、
$mail ->SMTPSecure = false;  を削除して
$mail->SMTPAutoTLS = false;  にすると動作しました。

同時に送ったメールの内、1つはウィルスメール扱いにされました。coreserver.jpからの転送メールです。



XREAやCORESERVERAの制限について

PHPやMySQLを使うようになって、現在使っているサーバーCORESERVERについて、仕様による制限によって不便に感じることが多くなって、いろいろ問い合わせをしてみました。

PHPのプログラムについては、不可の大小に関われず、処理時間が長い場合は強制終了されるようです。
実際には待っているという処理でも、時間が長いと強制終了されるそうです。
なお、その時間は、サーバーの負荷状況によりまして、強制終了となる継続時間に差があるそうです。

毎日、この時間にPHPのプログラムを実行したいという場合にcronという機能が、XREAやCORESERVERAにもあるのですが、1時間に1つしか使えないそうです。つまり1つのPHPのプログラムをcron設定すると、次にcronで動作するPHPのプログラムは1時間以上間隔をあけないとダメということです。

質問の回答に「PHP同時起動数の超過等により、サーバー自体の制限としてプロセスが強制終了となる可能性がある」との事だったのですが、具体的な目安を問い合わせしました。
「サイト設定」<「アクセス統計」で1,000pt前後が限界という事でした。
調べてみたら、該当のページにはいろいろな情報が掲載されていました。
2日間の情報しか掲載されていませんでしたが、使っているサーバーのパソコンにおいて、アカウントの負荷率は1日100pt以下で、そのパソコンでは50番目程度でした。たいした負荷はかけていないようです。
ただ、ドメイン毎の転送量は1日に800~900Mバイトで5番目、ドメイン毎のリクエスト数は1日で60000回程度で3番目、ドメイン毎のユニークホスト数は1日で3000件以上あってトップでした。
ユニークホスト数(アクセスカウンター)はweb上でも検出していますが、1日1500程度の検出なので、半分程度でしか検出できていないようです。
同時にアクセスがあった場合は1個分しか検出できていないのだと思います。



Swiperを設置したホームページを作ってみる

2019年4月9日

PHPで検索表示できるページとして激安の中古戸建てのページを試作してみたのですが、一覧表示のページからリンクされた詳細ページにおいて、Swiperを使って複数の画像を手動で入れ替えるようにしようと思っています。

ページによって画像の数が違うので、Swiperを使ったほうが、すっきりしたページになるんです。
せっかくなので、PHPでMySQLからデータを読み込むようにしようと思います。

とりあえず、HTMLでSwiperを使えるようにします。
https://github.com/nolimits4web/swiper/releases
から、swper(今回は swiper-4.4.6.zip)をダウンロードします。
ダウンロードしたswiper-2.7.6.zipを解凍して、swiper.min.cssとswiper.min.jsを取り出しまて、自分のサイトにアップロードします。
<HEAD></HEAD>の間に
<link rel=”stylesheet” href=”アップロードしたフォルダ/swiper.min.css”>
<BODY></BODY>の間の</BODY>の直前に
<script src=”アップロードしたフォルダ/swiper.min.js”>
</script>
を記載します。この部分がちょっと判りにくかったのでメモしておきます。

とりあえずアップロードしたswiper.min.jsとswiper.mini.cssは使わないで、
https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.3.3/css/swiper.min.css
https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.3.3/js/swiper.min.js
にリンクして動作させることにしました。

ここまで準備出来たら、後は https://garigaricode.com/swiper/ を参考に
Swiperのオプション設定(Javascript)の内容を
<script src=”アップロードしたフォルダ/swiper.min.js”>の下に
<script>    </script>に囲んで記入します。
この位置関係が重要です。
俊は

<script>
var mySwiper = new Swiper(‘.swiper-container’, {
loop: true,
navigation: {
nextEl: ‘.swiper-button-next’,
prevEl: ‘.swiper-button-prev’
},
pagination: {
el: ‘.swiper-pagination’,
type: ‘bullets’,
clickable: true
}
});
</script>

を選びました。

HTML内には表示したい場所に

<!– Swiper START –>
<div class=”swiper-container”>
<!– メイン表示部分 –>
<div class=”swiper-wrapper”>
<!– 各スライド –>
<div class=”swiper-slide”>Slide 1</div>
<div class=”swiper-slide”>Slide 2</div>
<div class=”swiper-slide”>Slide 3</div>
<div class=”swiper-slide”>Slide 4</div>
</div>
<div class=”swiper-button-prev”></div>
<div class=”swiper-button-next”></div>
<div class=”swiper-pagination”></div>
</div>
<!– Swiper END –>

を記入します。
<div class=”swiper-slide”>Slide 1</div>
のSlide 1部分は各自で表示したいものに変更します。
画像の場合は
<div class=”swiper-slide”><IMG src=”abare2.jpg” border=”0″></div>
みたいな感じです。

<div class=”swiper-button-prev”></div>
<div class=”swiper-button-next”></div>
は次のページ、前のページに移動するためのボタンで
<div class=”swiper-pagination”></div>
は何ページ目かを表示するためのものです。

2019年4月13日

実際に、動作させてみたのですが、自分のサイトのファイルでも無事動作しました。

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

PHPで工夫が必要なのは、<div class=”swiper-slide”>Slide 1</div>で画像の登録数を確認し登録数に従って記述の数を調整すところかなと思います。
IF文でデータが無ければ、<!– メイン表示部分 –>の処理を止めるという処理でうまくいけば楽なんですけど。
最終的にはカラムにデータがあれば表示するという処理を、10回繰り返す方法を採用しました。

<!DOCTYPE html>
<html lang=”ja”>
<head>
<META name=”keywords” content=”金沢市,石川県,不動産,戸建て,中古”>
<META name=”description”content=”金沢の激安の中古住宅を紹介しています。”>
<META charset=”UTF-8″>
<STYLE>
<!–
.gyou{
line-height: 18pt ;
}
–>
</STYLE>
<STYLE>
<!–
body, th, td{
font-size: 95%;

// 600px以降から、100pxごとに1px大きくなる
@media (min-width: 600px) {
font-size: calc(112.5% + 4 * (100vw – 600px) / 400)
}

// 1,000px以上は、22pxに
@media (min-width: 1000px) {
font-size: calc(137.5%)
}
}

–>
</STYLE>
<STYLE>
<!–

@media(min-width: 600px){p.resizeimage3{
margin-top: 0px;margin-bottom: 0px;width: 720px;
}
}
p.resizeimage3 img{
width: 100%;
}

body,html{
max-width:800px;
margin-right: auto;
margin-left : auto;
}

–>
</style>

<link rel=”stylesheet” href=”https://kimassi.net/hudousan/swiper.min.css”>

<meta name=”viewport” content=”width=device-width,initial-scale=1″>
<TITLE>物件1  :金沢観光情報 【 きまっし金沢 】</TITLE>
</HEAD>
<BODY bgcolor=”#ffffff”>
<CENTER>
<TABLE>
<TBODY>
<TR>
<TD><A href=”https://kimassi.net/” target=”_top”><IMG src=”https://kimassi.net/kimassitoplogo.gif” alt=”金沢観光情報 【 きまっし金沢 】” width=”120″ border=”0″></A></TD>
<TD align=”left” valign=”middle”><H1 style=”font-size:18px; margin:0px;”><FONT color=”#cc0000″>物件1    </FONT></h1></TD>
</TR>
</TBODY>
</TABLE>
<BR>
</center>
<CENTER>
<TABLE class=”gyou”>
<TBODY>
<TR>
<TD ><FONT color=”#000000″>金沢近郊の激安(500万円以下)の中古の戸建てです。<BR>画像の横の矢印をクリックすると他の画像が見れます。</FONT><BR></TD>
</TR>
</TBODY>
</TABLE>

<?php
try {
$dsn=’mysql:host=127.0.0.1;dbname=kimassi_kodate’;
$db = new PDO($dsn, ‘kimassi_kodate’, ‘********’);
} catch (PDOException $e) {
echo ‘DB接続エラー: ‘ . $e->getMessage();
}
?>

<?php
$where=”no=1″;
?>

<BR>

</CENTER>

<CENTER>

<!– Swiper START –>
<div class=”swiper-container”>
<!– メイン表示部分 –>
<div class=”swiper-wrapper”>

<?php
$stmt = $db->query(”
SELECT *
FROM gekiyasukodate
WHERE $where
“);
$result = $stmt->fetch();

$price=number_format($result[‘kakaku’]);
if (empty($result[‘gazou2’])==false){
//<!– 各スライド –>;
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou2’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou3’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou3’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou4’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou4’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou5’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou5’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou6’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou6’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou7’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou7’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou8’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou8’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou9’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou9’].”\” border=\”0\”></P></div>\n”;}
if (empty($result[‘gazou10’])==false){
echo “<div class=\”swiper-slide\”><p class=\”resizeimage3\”><IMG src=\””.$result[‘gazou10’].”\” border=\”0\”></P></div>\n”;}
?>
</div>
<div class=”swiper-button-prev”></div>
<div class=”swiper-button-next”></div>
<div class=”swiper-pagination”></div>
</div>
<!– Swiper END –>

<?php

echo “<table bgcolor=\”#fbe48c\”>\n”;

echo “<tr>\n”;
echo “<td bgcolor=\”#ffffff\” class=\”gyou2\” valign=\”top\”><span style=\”color: #ff0000;\”><strong>価格 $price 円</strong></span><BR>{$result[‘tiiki’]}{$result[‘tyoumei’]}
<A href=\”{$result[‘map’]}\” target=\”_blank\”>地図を見る</a> <BR>
土地面積 {$result[‘totimenseki’]}㎡ 建物面積 {$result[‘tatemonomenseki’]}㎡ <BR>築年数 {$result[‘tikunensuu’]}年  間取 {$result[‘madori’]}
駐車 {$result[‘tyuusya’]}<BR>
セットバック {$result[‘setback’]}   再建築の可否 {$result[‘saikentiku’]}<BR>
<span style=\”color: #ff0000;\”>{$result[‘bikou1’]}<BR>
{$result[‘bikou2’]}</span> <BR>
媒介種別 {$result[‘sennin’]}  登録日 {$result[‘date’]}</td>\n”;
echo “</tr>\n”;
echo “</table>\n”;

?>
</center>
<script src=”https://kimassi.net/hudousan/swiper.min.js”>
</script>
<script>
var mySwiper = new Swiper(‘.swiper-container’, {
loop: true,
navigation: {
nextEl: ‘.swiper-button-next’,
prevEl: ‘.swiper-button-prev’
},
pagination: {
el: ‘.swiper-pagination’,
type: ‘bullets’,
clickable: true
}
});
</script>

</BODY>
</HTML>

後は掲示板を設置と入会登録(さすがに高額な住宅を掲載するのに登録なしというのは具合悪い)のファイルは必要かな?
掲示板の投稿があった時に投稿者にもメールするようなシステムが良いかなと思います。

 



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日

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