言葉にイメージを

私は今言葉に対して写真を投稿するWebサービスの作成をしています。言葉は私、私以外の管理者側で用意します。例えばさんまさんが言いました「出川は一流や」を管理者が出して、ユーザーがこの言葉に対して投稿したい写真を投稿するWebサービスです。その他今に思いつきましたのは映画や小説の中の名言です。Neverまとめを見ますと小説の中の20文字ほどの一句を抽出して著作権上で大丈夫そうです。それと作者が小説に対して語りました言葉、映画の監督、演者が語りました言葉も出していきたいと思っています。Webサービス機能面で勝負するほどの力がありませんから、ネタ選びでユーザーに認めてもらいたいと思っています。もちろん最大限の努力してより良い機能があるWebサービスにしたいと思っています。

 

 と言いっていますが、まだ作成し始めてばっかりです。一番大事であります管理側が言葉を用意して、ユーザーが用意された言葉の一覧から投稿したいものを選んで写真を投稿するまでの機能が揃えています試作品を作りました。これを紹介します。

 

  • 管理者が使用します言葉投稿画面(後に<meta name="ROBOTS" content="NOINDEX">を使用して検索させないようしたいと思っています)

    f:id:iwao7707:20160623163359p:plain

 

  • ユーザーが投稿したい言葉を選んで写真を投稿する画面

    f:id:iwao7707:20160623164208p:plain

    f:id:iwao7707:20160623164239p:plain

    f:id:iwao7707:20160623164314p:plain  

  • ユーザーは投稿しました写真がちゃんと自分が選んだ言葉の下に表示するようにするのがちょっと難しかったです。
  1. データベースに写真をアップデートする時、写真を管理するDBテーブルphotosにAUTO_INCREMENTであるidの他にcontent_idをつけて、photosに写真をアップデートする時に言葉を管理するDBテーブルcontentsのAUTO_INCREMENTであるidをcontent_idとして代入する。

    if (!empty($_POST)) {
    $st = $pdo->prepare("INSERT INTO photos(content_id,picture) VALUES(:sentence_id,:photos)");
    $st->bindValue(':sentence_id',$sentence_id, PDO::PARAM_INT);
    $st->bindValue(':photos', $photos, PDO::PARAM_STR);
    $st->execute();

    unset($_SESSION['have']);

    header('Location: output.php');

    }

データベースにアップデートした言葉や写真を取り出して表示する時、1.でDBテーブルphotoscontent_idはDBテーブルcontentsのAUTO_INCREMENTであるidとリレーションしているため、contentsを抽出した配列にcontent_idを条件として取り出したphotosを入れることで出来ました。
$pdo = new PDO("mysql:dbname=haveimage", "root");
$pdo->query('SET NAMES utf8');
$st = $pdo->query("SELECT * FROM contents");
$posts = $st->fetchAll();
for ($i = 0; $i < count($posts); $i++) {
$st = $pdo->query("SELECT * FROM photos WHERE content_id={$posts[$i]['id']} ");
$posts[$i]['photoss'] = $st->fetchAll();

}

 

それとpdoを使いましたデータベース接続で数字も文字列として扱うところでちょっとつまづきました。bindValueを使ってバインドすることで出来ました。

 

より良いWebサービスにするために引き続き頑張り続きます。これからは長いだと思います。良いWebサービスとは誰かに楽しさを与えたWebサービスだと思います。もちろん便利を与えたWebサービスも素晴らしいです。