投票コメント機能製作メモ18

 拍手式人気投票の実装に当たってフリーのスクリプト等も探していたのですが、見つかったスクリプトはphpやcgi等のスクリプトファイルから呼び出す物ばかりで、ホームページ作成ソフトで作る単なるhtmlファイルに貼り付けて使う物は有りませんでした。以前にメモしたように、phpによりgif画像の中身を書き出してhtmlのimgタグで表示すればhtml文書から呼び出しても使える物が出来るはずです。
 で、まとめサイトを編集するかたわらでgifファイルの構造をチマチマ調べていた訳ですが、結構複雑でした。もっと簡単な方法は無い物か?と改めて「php」「イメージ」「文字列」「gif」で検索を掛けたら、phpのイメージ関数が見つかり簡単にgif画像と文字列を合成して表示する事ができるのが分かりました。(GDというライブラリがインストールされているサーバーでしか使えませんけど)
 ただ残念な事にImagestring関数は日本語が使えず、日本語の使えるImageTTFText関数はTrueTypeフォントを用意しなくてはならないのでサーバーのスペースを余分に使う事になります。それでも比較的小さなサイズのフリーのフォントが入手できたので良しとしておきます。


button.php
 <?php
$id = $_GET["id"];   //話のID
require "settei.php"; //設定ファイルの挿入
$button = "button.gif";   //ボタンのgif画像のパス
$fontPath = "mplus-1c-bold.ttf";  //TrueTypeフォントのパス
$flg = "1";

switch ($flg) {     //データベースから得票数ゲット
  case "1":
  $taitoru_res = mysql_query("SELECT tcode,tname,turl,tokuhyou FROM taitoru WHERE tcode = '$id'",$my_con);
  if (!$taitoru_res) break;
  $taitoru_tbl = mysql_fetch_array($taitoru_res);
  if (!$taitoru_tbl)  break;
  $tokuhyou = $taitoru_tbl["tokuhyou"]; //得票累計(今は常に0)
  $tokuhyou_res = mysql_query("SELECT count(*) FROM tokuhyou WHERE tcode = '$id'");
  if ($tokuhyou_res != false) {
    $tokuhyou = $tokuhyou + mysql_result($tokuhyou_res,0); //得票数合計
  }
  mysql_free_result($tokuhyou_res);  //リソースの開放
}
mysql_free_result($taitoru_res);  //リソースの開放

$moji = $tokuhyou . " 拍手";   //画像に重ねる文字列の生成

imageput($moji,$button ,$fontPath);  //画像表示用関数の呼び出し

function imageput($mojiretu , $address , $font) {    //画像表示関数本体
  $image = imagecreatefromgif($address);
  header("Content-type: image/gif");

  $mojiretu =  mb_convert_encoding($mojiretu, 'utf-8');
  $black = imagecolorallocate($image, 0,0,0);
  ImageTTFText($image,9,0,8,14,$black,$font,$mojiretu);
  Imagegif($image);
  ImageDestroy($image);  //リソースの開放
}
?>

 これがテストページに○○拍手と書かれたボタン画像の中身です。htmlファイルに
<img border="0" src="../button.php?id=439">
として貼り付けています。画像ファイル扱いでもgetでid番号のやり取りが出来るのにはびっくりしました・・・便利過ぎるだろう。

 スクリプトの大部分は得票数をデータベースから取得する処理で、実際にボタンを表示するのはfunction imageputと関数化した部分です。この関数は文字列、gif画像のパス、フォントファイルのパスを引数として呼び出します。拍手ボタンだけでなく、コメント数の表示も背景色の透明なgifファイルと差し替えれば使えるようになっています。アクセスカウンター等にも応用できそうです。別ファイルに分割して読み込むようにした方が良さそうですね。

 ○○拍手と表示する部分はできたので、後は画像にリンクを張ってリンク先のphpファイルでデータベースに得票数を追加する処理を記述すれば良い事になります。そうするとスクリプトファイルではないhtmlから呼び出せる拍手機能のできあがりです。
 拍手ボタンをクリックした後はもとのページへジャンプすれば良さそうですね。FC2ブログでは拍手ボタンをクリックした後にコメント入力ページにジャンプするようですが、それだと投票とコメントが分離できないので不便そうです。


あれれ

  昨日ブログに書いたプログラムですが・・・できちゃいました。ユーザーインターフェースの部分がやたらと手間が掛かったんで、Windowsアプリを作るのは大変だな〜何て思ってたら、メインのファイルの読み出し、変更、書き出しの部分はあっさりできちゃいました。
 手作業だと1スレ分のページ追加、書き換え作業に1時間くらい掛かっていたのですが、使ってみたところ、数秒で7スレ分までできました。あとはメニューにリンクを張って文章をコピペするだけです。あはは、1週間も掛からずに作れるんならもっと早く作っておけば良かったですよ〜。

 せっかくなんで近いうちに「まとめサイト作成支援セット」として暫定版を公開しますね。まぁこんなのが有ってもまとめサイト作るぜ〜という人が、そうそう出て来るとも思いませんが、気楽に使ってみて意外と自分にも作れそうだと思ってもらえると、してやったりなんですけどね。

 後は、いずれ変更を加えるだろう投票、コメント機能のために既に有るページを大量に書き換えるソフトが必要ですね・・・一段落したら考えよう。

ちょっと楽をしようかな

 人形怖まとめを作る作業をやっている訳ですが、一話ずつ収録するタイプのまとめは話の数だけページを用意しなければならないですよね。文章を貼る前にはページの追加、ページテンプレートのコピペ、投票コメント用IDの書き換え、タイトルのコピペ、ページタイトルの設定、次のページへのリンク等の作業が有ります。現行スレに追いついている場合の量はたかが知れているのですが、過去ログから何スレ分かまとめて作業をすると、結構な量になります。で、7スレ目の当たりまでやった所で面倒になってきたので、この辺の作業をプログラムを組んで自動化しようと考えています。

まとめ支援1

 とりあえず、ポチポチと作り始めているのですが、AccessのVBAは以前に使った事があるものの、Visual StudioのVBは初めてなので手間が掛かってます。このソフトを作る時間で現行スレまでの作業ができそうな気がしないでもないですが、1回作ってしまえば後は楽ができそうなんで良しとしておきます。楽をする為ならどんな苦労もいとわないのか?と疑問に思わなくもないですけど・・・

投票コメント機能製作メモ17

  掲示板スクリプトを書く予定でしたが、バタバタしていてスクリプトが中途までしか書けていません。ただ他所のまとめブログを見ていたら拍手式投票の仕組みが頭に浮んだので忘れないうちにメモを書いておきます。

 投票数は前に書いたように体験談ページにPHPスクリプトを記述したファイルを画像として貼り付け、スクリプト側でGIFのフォーマットでサーバーにデータを送れば画像として数字を表示できるとして、その画像に別のPHPファイルへのIDを指定したリンクを貼り、そのファイルで画面出力をせずに投票数を追加する処理をし体験談ページをリロードすれば拍手方式の投票が出来そうです。
 XX拍手と表示した画像をクリックすれば体験談ページがリロードされ追加された拍手数を表示できるはず。キャッシュの具合によってはリロードされない事も有りそうですが、それはそれで構わないような気もします。
 これでコメントと投票を分離できそうです・・・が投票とコメントの両方したい人にはリロードされると手間が増えそうな気も・・・・
 実際に作るのはまだまだ先になりそうなので、その時にテストしてから決めるとします。

掲示板機能製作メモ前編

 投票コメント機能と同じデータベースを使うけれども掲示板は別物なのでタイトルを変えました。
 実際のスクリプトを書く前に仕様を検討しておきます。

・データベースはコメント機能用のテーブルを使う
・掲示板タイトルは投票用のタイトルテーブルを使う
・書き込み、確認、表示は1つのページで行なう
・複数の掲示板も1つのファイルで実行できるようにリンク元からURL+掲示板IDでGET送信
・書き込み後はPOSTで送信先を送信元と同じファイルにし、掲示板ID、名前、投稿テキストを送る
・よってファイルの先頭部分でPOST送信かGET送信か判定して処理を振り分ける
・前半はPOST送信されたデータが有ればNGワード文字数確認、登録の作業、無ければスルー
・中盤はコメント内容表示処理
・後半は投稿用フォームの表示処理、アク禁チェック、前半でNGワードが有ったらメッセージ表示
・NGワードが有ったら書き込みを行なわず元の文章と名前をテキストボックスに表示
・アク禁NGワードの具体的な処理は専用関数を作って別ファイルに置く
・アク禁の人のアクセスには送信用フォームも表示しない
・文字数はコメントと違い1000文字程度書き込めるようにする
・携帯用のページはレス数が20を超えるまでは考えない、それまでは兼用
・レス数の上限は・・・当分考えなくても良いか・・・500を超えたら検討

 こんなところですかね。アク禁については荒らし対策よりは業者対策の側面が強いですね。テストページで訳の分からない外国語の書き込みが連続して有りましたが、NGワード1個登録したらおさまりました。ホスト名を確認したら、IPアドレスが入ってましたので串を使ったのでしょう。串についてはまだよく理解していませんが、串経由を一律アク禁にすると携帯電話からのアクセスが出来なくなりますからしませんが、IPアドレスとホスト名が同じならアク禁にしても良いかな?と思わなくもないです。まぁアク禁についてはしばらく何もしないで様子見を見ます。NGワードもデータベースに専用テーブルを作った方が良さそうな気もしますが、今のところ1個ですんでますから、こちらもしばらく様子を見ます。

 大体やるべき事が決まったので次回は具体的にスクリプトを書いてみます。

投票コメント機能製作メモ16

 投票数集計は基本的にデータベースの投票テーブルのデータ件数を数えて表示するだけですが、投票数が多くなると処理が重くなる可能性も考慮し、何ヶ月かしたら投票テーブルのデータを消し、消したデータの件数をタイトルテーブルのtokuhyou項目に足し算しようと考えています。ですので投票テーブルのデータ件数にタイトルテーブルの得票数(現在は0)を足し算して表示します。よって得票テーブルの集計とタイトルテーブルを組み合わせて1つのテーブルのように扱うSQL文が必要になります。最初はテーブルの結合なのでJOIN句を書くのだろうと思って色々やってみたのですが、エラーが出るだけでうまくいきませんでした。「結合」「MySQL」でグーグル検索して出てきたサイトの何個目かでWHERE句に結合条件を書きHAVING句で取り出し条件を指定するという記述を見つけようやく解決しました。後で考えてみたらAccessのクェリで同様な物を作りSQLビューを表示してコピーする事でもっと簡単に解決できる事に気が付きました。

<?php
//1週間の得票
$syuukei_res = mysql_query("SELECT COUNT(*) + taitoru.tokuhyou AS syuukei,tokuhyou.tcode AS id,tname,turl,tdate
  FROM tokuhyou,taitoru
  WHERE tokuhyou.tcode = taitoru.tcode AND tdate > SUBDATE(CURDATE(),INTERVAL 8 DAY)
  GROUP BY tokuhyou.tcode
  HAVING id > 10000
  ORDER BY syuukei DESC , tdate DESC LIMIT 50"
 ,$my_con);
if (!$syuukei_res) {
  echo mysql_error();
  die("データベースエラー");
}
while($syuukei_tbl = mysql_fetch_array($syuukei_res)) {
  $msg = sprintf("% 5d ",$syuukei_tbl["syuukei"]);
  echo  str_replace(" ","&nbsp;",$msg),"<a href=¥"",$syuukei_tbl["turl"],"¥">",$syuukei_tbl["tname"],"</a><br>";
}
mysql_free_result($syuukei_res);  //リソースの開放
?>

 これは「読者からのおすすめ」ページで現在使っているバージョンですが、初期の表示部分では最初の投票から1週間経過したら以後の投票も消えてしまうというバグがありました。それはtdate > SUBDATE(CURDATE(),INTERVAL 8 DAY)の日付と比較した取り出し条件をHAVING句に書いていたためでした。また初期バージョンでは得票数が同じ場合の並び順は考慮していませんでしたが、現在はORDER BY句で日付の新しいものを上にもってくるようにしています。ただ投票数が2票以上の場合最初の投票の日付になるのか最後の日付になるのか不定なのかはっきりしません。この辺は気にしないでおきます。
 当初の予定では表示タイトル数は30件にしていましたが、初期バージョンでは40件にし、現在では1週間の投票数も増えてきて40を超えそうなのでLIMIT 50を指定して50件に変更しています。
 それから1週間の投票数としていますが、投票データを記録しているテーブルには日付しか書き込んでいませんから、午前0時に古いデータが非表示になりますので、厳密には最近6日間と当日分の投票数となります。

 1ヶ月分の集計はWHERE句を
WHERE tokuhyou.tcode = taitoru.tcode AND tdate >= SUBDATE(CURDATE(),INTERVAL 1 MONTH)
と変更しているだけで他は全く同じです。累計もWHERE句の日付との比較を消して他は同じにしています。

 さて次は読者掲示板ですが、そちらは今までやってきた事の組み合わせで書き込みと確認、登録、表示の作業を1つのページで実行する事になりそうです。まだ全く手を付けていませんけど。


投票コメント機能製作メモ15

 集計ページのレイアウトは割と迷ったのですが、膨大な量の体験談の中でコメントを付けても誰も気付かないと面白くないだろうと思い最近のコメント欄を最初にもってきました。体験談のタイトルを付けるかどうか迷ったのですが、携帯向けではタイトル付でPC版ではタイトル無しと雰囲気で仕様を決めました。あと投票数を当初の考えどおり週間、月間、累計と多い順に表示するようにします。
 まずホームページ作成ソフトでスレッドメニューのページをコピーし、若干の修正を加え、表のセルのphpで出力したい場所に適当な文字列を目印になるように書き込んで保存し、保存したファイルの拡張子をphpに変更した物を作ります。そのファイルをPHPエディタに読み込んで目印の文字列をPHPスクリプトに変更します。

 悩んだのがコメントの始めの部分を表の幅に納めるように取り出す処理です。文字コードはEUCなのでsubstrやstrlen等の文字列関数では半角を1文字全角を2文字として扱ってくれるので、substr関数でセルの幅に相当する文字数を半角に換算して取り出せば良さそうですが、そうすると最後の文字が全角の1バイト目になって画面にゴミが出てしまう可能性があります。何か良い方法は無いかとグーグルで検索してみたところ、文字列関数には頭にmb_の付く2バイト以上の文字コード用の関数が用意されているのが分かりました。ただmb_系の関数では全角も半角も1文字として扱います。そうなると全角と半角の混在した文章では文字列の画面上の幅が分からなくなります。どうした物かと思いつつも考え付いたのがsubstr関数で半角に換算した必要な幅より1文字大目に取り出し、mb_strlen関数で返った文字数から1マイナスしてmb_substr関数で取り出すという処理です。大丈夫だろうと思って実際にスクリプトを書いてテストしてみたらうまくいきました。

<?php
require "settei.php";  //設定ファイルの挿入
//最近のコメント
$nagasa = 21;
$syuukei_res = mysql_query("SELECT tcode,ktext,DATE_FORMAT(ktime,'%m/%d %H:%i') AS knitiji FROM komento
  WHERE kbflg = 0 AND tcode > 10000
  ORDER BY ktime DESC LIMIT 50",$my_con);
if (!$syuukei_res) {
  echo mysql_error();
  die("データベースエラー");
}
while($syuukei_tbl = mysql_fetch_array($syuukei_res)) {
  $msg = str_replace("<br />"," ",$syuukei_tbl["ktext"]);
  $cho = strlen($msg);
  if ($cho > $nagasa) {
    $msg = substr($msg,0,$nagasa + 1);
    $cho = mb_strlen($msg);
    $msg = mb_substr($msg,0,$cho - 1);
  }
  echo $syuukei_tbl["knitiji"]," <a href=¥"comment.php?id=",$syuukei_tbl["tcode"],"¥">",$msg,"</a><br>";
}
mysql_free_result($syuukei_res);  //リソースの開放
?>

 これがPC版の「最近のコメント」欄です。体験談のタイトルとコメントはデータベースでは別のテーブルに保存されているので、一緒に表示しようとするとSQL文が少し複雑になります。

<?php
require "../settei.php";  //設定ファイルの挿入
//最近のコメント
$nagasa = 22;  //コメント表示桁数(半角換算)
$syuukei_res = mysql_query("SELECT komento.tcode AS id,tname,kbflg,ktext,DATE_FORMAT(ktime,'%m/%d') AS khiduke
  FROM komento,taitoru
  WHERE komento.tcode = taitoru.tcode
  HAVING kbflg = 0 AND id > 10000
  ORDER BY ktime DESC LIMIT 50",$my_con);
if (!$syuukei_res) {
  echo mysql_error();
  die("データベースエラー");
}
while($syuukei_tbl = mysql_fetch_array($syuukei_res)) {
  $msg = str_replace("<br />"," ",$syuukei_tbl["ktext"]);
  $cho = strlen($msg);
  if ($cho > $nagasa) {
    $msg = substr($msg,0,$nagasa + 1);
    $cho = mb_strlen($msg);
    $msg = mb_substr($msg,0,$cho - 1);
  }
  echo $syuukei_tbl["khiduke"],"<a href=¥"../comment.php?id=",$syuukei_tbl["id"],"¥">",$syuukei_tbl["tname"],"</a><br>",$msg,"<br>";
}
mysql_free_result($syuukei_res);  //リソースの開放
?>

 こちらが携帯向けのタイトルの入った物です。SQL文のWHERE句でテーブルを結合するキーになる項目を指定し取り出し条件はHAVING句で設定しています。

 なんだか長くなったので、投票の集計を表示する部分は次回にします。


投票コメント機能製作メモ14

  順番では集計スクリプトの内容を書くところですが、今回は現在の投票コメント機能の不満について書いておきます。

1.体験談ページに投票数、コメント数が表示されない
2.投票しかしなくても確認、コメントページに移動するのは煩雑

 1はhtmlファイルの文字列を動的に変更するにはCGIを使うにしろPHPを使うにしろファイルの拡張子をhtm以外の物に変更しなくてはいけないので無理ですが、方法が全く無いのかと言えばそうでもないです。グラフィックタイプのアクセスカウンターはhtmの拡張子の文書にも付ける事ができますから、同じ方法が使えます。具体的にはカウンターを表示したいところにPHPなりCGIなりのファイル名を画像として貼り付ける事ですね。CGIではよく見かけますが、PHPではどうかと思って調べてみたらPHPでも画像のバイナリデータを出力する事ができるようですからいけそうです。ただ内容がちょっと高度ですから読者掲示板を作ったあとで検討します。

 2は1と関係してきますが、投票した後に投票数を見るにはコメントページに移動するしかないので今の仕様になっています。ただ1が解決すれば投票のみをして、かつその体験談にコメントが無ければ体験談ページのリロードだけにすれば良いのかと思われます。どちらにしろ1が解決しなければどうしようもないのでしばらく時間がかかりそうです。

投票コメント機能製作メモ13

 読者からのおすすめページ1週間の集計欄で最初の投票から1週間すぎたら後で投票された1週間未満の投票も一緒に消える不具合を修正しました。

 しばらく休んでいたメモですが、中途半端に終わらせるのもナニなので続きを書きましょう。

 実は前回のデータベースにタイトルを登録する前にやっておくべきだった処理として、タイトルを記録したテキストファイルに正しく体験談のURLが書かれているか調べる作業が有ります。さてどうしようかと思ったらphpにはファイルが存在するかどうか調べる関数があるとかで、それを使えば良いことになります。まずはまとめサイトの編集に使っているフォルダwarareiをローカルホストから読めるようにhtdocsにコピーします。そして次のスクリプトを書いて実行しました。

<?php
$fp = fopen("title.txt", "r"); //CSVファイルのパス
if (!$fp) {
  die("タイトルテキストのオープンに失敗<br>");
} else {
  while ($data = fgetcsv($fp, 10000)) {
  if (!file_exists("wararei".$data[2]))  {
   echo "wararei" . $data[2]," エラー<br>";
  }
 }
  fclose ($fp);
}
?>

 前回作ったスクリプトの小改造ですね。実行したら1個だけ間違いが見つかりましたのでphpMyAdminで修正しました。タイトルのテキストファイルもまだ使うのでテキストエディタで修正してもう一度実行したらエラーが出なくなったので良しです。

 あとは体験談のページに投票&コメントフォームを追加する面倒な作業が有る訳ですが、ホームページ作成ソフトを使って千以上のページにフォームをコピーペーストするのも大変そうなので楽をする方法を考えてみました。
 体験談のhtmlファイルの中で、修正したい箇所は「Part ?? 次の話」の前に「コメントを読む」のリンクの追加、枠内の1番下の部分に投票コメントフォームを追加の2箇所ですね。該当する場所のhtmlを見てみると、コメントを読むのリンクを挿入したい場所にleft">Partの文字列がありました。この>とPの間にコメントを読むのリンクを挿入すれば良い訳ですから、str_replace関数で置き換えれば良いと思えます。同様にコメントフォームを追加したい部分はTop</a>の文字列があるのでこちらも置き換えます。ただいきなり元のhtmlファイルを書き換えるのも不安なので取り合えずtaikenフォルダを作ってそちらへ書き換えたファイルを置く事にします。

<?php
for ($i=1;$i < 15;$i++) {
  mkdir("taiken/".substr("00".$i,-3));
}

 これはtaikenフォルダの中に'01'〜'14'という名前のフォルダを作る作業です。taiken/01〜taiken/14の中に書き変えたファイルを置きたい訳です。

$tform1 = "Top</a><hr><p class=¥"MsoNormal¥" style=¥"text-indent: 0; mso-char-indent-count: 1.0;
       mso-char-indent-size: 10.5pt; line-height: 200%; margin-left: 50; margin-top: 0; margin-bottom: 0¥" align=¥"left¥">
      <form action=¥"../kakunin.php¥" method=¥"POST¥">投票及びコメント<br>
      <input type=¥"hidden¥" name=¥"taitoru¥" value=¥"";
$tform2 = "¥"><font size=¥"2¥"><input type=¥"checkbox¥" name=¥"touhyou¥" value=¥"1¥"
      >良かったに1票<br>名前:<input type=¥"text¥" name=¥"namae¥" value=¥"¥" size=20>
      <br>コメント(空白なら投票のみになります)<br>
      <textarea name=¥"komento¥" cols=¥"84¥" rows=¥"3¥"></textarea>
      <br><input type=¥"submit¥" name=¥"submit¥" value=¥"投票/コメントする¥">
      <br></form></font>";
$curl1 = "left¥"><a href=¥"../comment.php?id=";
$curl2 = "¥">コメントを読む</a><br>Part";
$tform1 = mb_convert_encoding($tform1, "Shift_JIS", "auto");
$tform2 = mb_convert_encoding($tform2, "Shift_JIS", "auto");
$curl2 = mb_convert_encoding($curl2, "Shift_JIS", "auto");

$fp = fopen("title.txt", "r");
if (!$fp) {
  die("タイトルテキストのオープンに失敗<br>");
} else {
  $i=0;
  $j=0;
  while ($data = fgetcsv($fp, 10000)) {
  $moto = file_get_contents("wararei/".$data[2]);
  if (!$moto)  {
    echo "wararei/" . $data[2]," エラー<br>";
  } else {
    $moto = str_replace("Top</a>",$tform1.$data[0].$tform2,$moto);
    $saki = str_replace("left¥">Part",$curl1.$data[0].$curl2,$moto,$count);
    if ($count != 1) {
      $saki = $moto;
      echo $data[2],"<br>";
      $i++;
    }
    file_put_contents("taiken/".$data[2],$saki);
    $j++;
  }
 }
  fclose ($fp);
  echo $i,"/",$j,"<br>";
}
?>

 何やら変数が長ったらしくてごちゃごちゃしてますが、file_get_contents関数でhtmlファイルを変数に読み込みstr_replace関数で変数の内容を書き換えfile_put_contents関数で書き換えた変数をファイルに保存しています。フォームを追加する部分はどのファイルでも同じなのでそのまま書き換えていますが、コメントを読むの部分は体験談の内容によっては構成が違う場合も有るのでちゃんと書き変えできたか否かを判定して画面に出力するようにしています。
 実行して内容を確認したところ問題なく変換できていましたので14個のフォルダをホームページ編集ソフトの作業フォルダに上書きコピーしました。ただ1389話中74話がうまく書き換えできなかったようで、こちらは手作業で修正しました。


投票コメント機能製作メモ12

  迷ったものの、今回はタイトルのテキストファイルを読み込んでデータベースに追加する処理をします。CSVファイルを読み込んでMySQLのコマンドで追加ですね、慣れてきたので簡単に出来ました。

<?php
require "settei.php";
$fp = fopen("title.txt", "r"); //CSVファイルのパス
if (!$fp) {
  die("タイトルテキストのオープンに失敗<br>");
} else {
  while ($data = fgetcsv($fp, 10000)) {
    $qr = mysql_query("INSERT INTO taitoru (tcode,tname,turl) VALUES ('$data[0]', '".$data[1]."', '".$data[2]."')",$my_con);
    if (!$qr) {
      echo $data[0]," ",$data[1]," 登録失敗<br>";
    }
  }
  fclose ($fp);
}
?>

 ちなみにCSVファイルとは区切り記号の付いたテキストファイルの事で、今回使ったのはこんなの・・・

"10323","空中の女","/001/323.htm"
"10328","もうすぐ…","/001/328.htm"
"10334","心霊写真","/001/334.htm"
"10335","シルモンド","/001/335.htm"
"10371","メロンパン","/001/371.htm"

 引用記号のダブルクォーテーションが付いてなくてもCSVファイルとしては問題無いはずですが、これが無いとローカルホストではちゃんと登録してくれるのに借りてるサーバーの方では名前が空白になってうまく行きませんでした。
  登録スクリプトはできても、千以上のタイトルをこんなテキストデータで入力するの?大変だね〜なんて思う人も居るかと思いますが、私はAccessを使ってスレ番、レス番、タイトル名、備考を記録して重複防止や検索などの管理をしてますから、Accessのクェリを作ってマクロを1個書くだけで済みました。

クェリの一部
ID: Val([スレッド]) & Right("000" & [レス番号],4)
URL: "/" & [スレッド] & "/" & Right("000" & [レス番号],3) & ".htm"

 今回は全て書き出す必要が有りましたけど、以後は追加分のみなのでクェリに1行追加します。

ID:>140512

 今までまとめサイトの更新はミラーリングアップロードのみでしたが、これからはAccessのマクロを1個実行と追加用のphpスクリプト1個を実行という事で、手間が2個ほど増えますが、時間にして1分以内の事なのでたいした影響は無いでしょう。

 さて、投票コメント機能について書いて来たのですが、ブログにもテストページにも全くコメントが付いてないのですが、コメントが無いという事は異論は無いという事ですかね?このまま進めても良いのでしょうか?
 NGワードやアク禁についての処理は運用しながら作っていくとして、ランキングページ等は有る程度の投票が無いと作れないし、そろそろ全ての体験談にコメント投票フォームを付けても良いのかな〜なんて思ってますけど、どうですか?


<< | 2/4PAGES | >>

calendar

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
30      
<< September 2018 >>

テスト

笑える霊体験まとめサイト
の表紙作成に使ったソフト

Poser 10

新品価格
¥14,316から
(2014/4/9 14:19時点)

広告だったり

オリジナル電子書籍

selected entries

categories

archives

recent comment

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM