質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1042閲覧

Wordpressで1ページだけに閲覧制限をかけたい。シリアルナンバー発行と認証システム。

sai_to

総合スコア20

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/07/19 08:54

編集2017/07/20 00:02

■やりたいこと
いつもお世話になっております。
今回は表題の通りに、あるページに制限をかけたいのです。
よくある飲料のキャンペーンのように、シリアルコードを発行してサイトで入力してもらい初めて見られるページが現れるように。

シリアルナンバー発行の条件は2通りです。
1:サイト上で特定の人物だけが操作し、ナンバー発行ボタンなどを押すと発行。
2:不特定多数からpaypalで入金後、支払い報告をもらったらメールでナンバー発行。

■試したこと
参考サイト「(http://saitetutan.hatenablog.jp/entry/2016/10/20/193225)」
シリアル発行のスクリプト

<?php $salt = "##################"; session_start(); $mysqli = new mysqli('############', '###########', '###################', '##########'); $status = "none"; if(!empty($_POST["serial"])){ $password = md5($_POST["serial"] . $salt); $use = false; $stmt = $mysqli->prepare("SELECT * FROM serial WHERE serial = ? AND used = ?"); $stmt->bind_param('si', $password, $use); $stmt->execute(); $stmt->store_result(); //結果の行数が1だったら成功 if($stmt->num_rows == 1){ $status = "ok"; $use = true; $stmt = $mysqli->prepare("UPDATE serial SET used = ? WHERE serial = ?"); $stmt->bind_param('is', $use, $password); $stmt->execute(); }else $status = "failed"; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Serial</title> </head> <body> <h1>Serial</h1> <?php if($status == "ok"): ?> <p><a href="##################3">ダウンロード</a></p> <?php elseif($status == "failed"): ?> <p>シリアルが間違っています。</p> <?php else: ?> <form method="POST" action="ninshyou.php"> シリアルコード:<input type="text" name="serial" /> <input type="submit" value="認証" /> </form> <?php endif; ?> </body> </html>

シリアル認証用のスクリプト

<?php $salt = "##################"; session_start(); $mysqli = new mysqli('############', '###########', '###################', '##########'); $status = "none"; if(!empty($_POST["serial"])){ $password = md5($_POST["serial"] . $salt); $use = false; $stmt = $mysqli->prepare("SELECT * FROM serial WHERE serial = ? AND used = ?"); $stmt->bind_param('si', $password, $use); $stmt->execute(); $stmt->store_result(); //結果の行数が1だったら成功 if($stmt->num_rows == 1){ $status = "ok"; $use = true; $stmt = $mysqli->prepare("UPDATE serial SET used = ? WHERE serial = ?"); $stmt->bind_param('is', $use, $password); $stmt->execute(); }else $status = "failed"; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Serial</title> </head> <body> <h1>Serial</h1> <?php if($status == "ok"): ?> <p><a href="##################3">ダウンロード</a></p> <?php elseif($status == "failed"): ?> <p>シリアルが間違っています。</p> <?php else: ?> <form method="POST" action="ninshyou.php"> シリアルコード:<input type="text" name="serial" /> <input type="submit" value="認証" /> </form> <?php endif; ?> </body> </html>

やりたいこととして理想的だったので、参考にさせていただいていたのですが

session_start(); $mysqli = new mysqli('############', '###########', '###################', '##########'); $status = "none";

この部分の意味や、発行と認証コードの違いなどがよく理解できませんでした。

もう一つのやり方として
1:あらかじめExcelでシリアルナンバーを作っておき、データベースに入れておく。
2:データベースから引っ張ってくる処理と、入力されたシリアルナンバーの照らし合わせをする。
以上を考えたのですが、データベースのこともよく理解できておらず、どう取り掛かっていいのかもわかりません。

また、会員サイトプラグイン「Simple Membership」を導入してみましたが
パスワードを自由に設定・変更できてしまう仕様だったので向きませんでした。

■環境
データベースはMySQLを使っています。
お分かりになる方がいらっしゃいましたら、なにとどよろしくお願いいたします!

■追記
目指すゴールは、「シリアルナンバー発行と認証後、ログインする一番簡単なプログラムを作りたい」ことです。
①上記参考サイトのコードで可能なのか、どれがどのような動きなのか、変更するとしたらどこを変えたらいいのかが知りたいです。
②①よりも簡単な作り方があるようでしたらご教授いただきたいです。
③paypalの入金が確認できたらメールでシリアルを送る際、①や②でメールを送る機能を加えることはできるのでしょうか?もしくは手動で発行することになるのでしょうか?なるべく自動で送れる機能を作りたいです。

ご教授のほどよろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/19 19:38

やりたいことは理解できたのですが、質問されたい点が今の質問文では不明確のように思います。「コードの意味を解説してほしい」のか「もっとよい認証の方法を知りたい」のか、それとも? 質問したい点をもう少し明確に質問文に記載してはいかがでしょうか。
sai_to

2017/07/19 23:41

mizさん ご指南ありがとうございます。おっしゃる通りですね。早速追記致します。
guest

回答1

0

ベストアンサー

まずは、WordpressでのDBの扱いについて学習されたほうがいいと思います。
上記コードはプレーンのPHPで動くように作られたものです。
wordpressでは動きません。

1の回答:
DBの接続部分、SQLを投げる部分をwordpressの仕様に則って変えれば動くと思います。
あらかじめ、wordpressの仕様に則ってテーブル作成する必要があると思います。

2の回答:
シリアルナンバー発行、認証のコアな部分はOKです。
それより問題なのは、このロジックをどう1ページのみに適用させるかです。
このロジックを実装するページというのは、投稿ですか?固定ページですか?カスタムポストですか?その他にも様々な条件の確認が必要です。
まず、組み込めるのはテーマかプラグインかという問題があります。
具体的に、この1ページをどうやって判別して、どう実装するつもりなのかを聞かせていただきたいです。

3の回答:
支払者のメールアドレスが取得できる状態なら、メール発行の処理を組み込むことは可能です。
上記シリアルナンバー発行時に自動メール送信されるといった流れです。

##さらに質問いただいた分。

1:そうですね。wordpressのcodex日本語版で、そのあたり詳しく書かれていますので、こちらを参考に作られるといいと思います。
日本語CODEX

2:固定ページですね。分けても大丈夫なら分けたほうがわかりやすいかもしれないです。
固定ページなら、各ページ用のページテンプレートを作って、その中に発行や認証の処理いれるといいです。
固定ページテンプレートの作成方法について

3:いえ、wordpressにメール送信用の関数が用意されています。wp_mail()というやつです。
支払いとかでユーザーのメールアドレス取得しているとおもいますが、それをwp_mail()に入れてやれば送信されます。
詳しい仕様は日本語codexに載っていますので、下記ページを参考にしてみてください。
日本語CODEX

投稿2017/07/20 02:01

編集2017/07/21 08:26
Iya712

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sai_to

2017/07/20 02:20

Iya712さん 早速のご回答ありがとうございます。 WordpressではDBの扱い方が変わるのですね!知りませんでした。 重ねての質問で恐縮なのですが、 1:テーブルの作成方法もWordpress用に学ぶ必要がありますね。 2:固定ページに実装したいのです。できれば発行と認証のページは同じだといいと思ったのですが、 シリアル発行ページ→認証ページ→限定ページ、と各1ページごとに分けてもいいかもしれませんね。 初心者が作るため、作りやすい構成ならどのような形でもいいと思っています。 3:できることなんですね! 作り方のイメージがわかないのですが、メールシステムと連動させて行う処理なのでしょうか? 宜しくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問