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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1320閲覧

webpushをほかのページで通知させるコードを書きたい

ariiiiiga

総合スコア66

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/05/17 04:41

編集2022/01/12 10:55

前提・実現したいこと

簡易的な予約サイトを作っています。
店舗側が空き情報をサイト内で表示させ、ユーザーはログインした後にサイト内で予約が出来るという物です。
ユーザー側のログイン後のページ(user_insert.php)で、予約に成功した場合にshop_home.phpでsendWebPush();を実行する書き方を教えて頂きたいです。

*現在user_insert.phpでinsertに成功した時webpushできています。
*DB名
users:ユーザー情報
shop:店舗情報
reserve:予約情報
subscription:shop.webpush.phpの'endpoint'、'p256dh'、'auth'

よろしくお願いします。

<user_submit.php> // データの追加 <?php require 'autoload.php'; require_once 'shop_webpush.php'; error_reporting(E_ALL); ini_set("display_errors",1); try { require("db_user_connect.php"); require("db_usershop_connect.php"); // セッションの開始 $count = $_SESSION['count']; $time = $_SESSION['time']; $comment = $_SESSION['comment']; // 接続設定 // データの追加 $sql = "INSERT INTO reserve(reserve_shop_id,count,time,reserve_comment,reserve_tel) VALUES('".$shop_id."','".$count."','".$time."','".$comment."','".$tel."')"; $stmt = $pdo -> prepare($sql); $stmt -> execute(); if($stmt) { sendWebPush(); //Webpush call when reserve success. } } catch (PDOException $e) { var_dump($e); die(); }
<autoload.php> // autoload.php @generated by Composer require_once __DIR__ . '/autoload_real.php'; return ComposerAutoloaderInit5211635af155434412c2432ac36ae6df::getLoader();
<?php <autoload_real.php> // autoload_real.php @generated by Composer class ComposerAutoloaderInit5211635af155434412c2432ac36ae6df { private static $loader; public static function loadClassLoader($class) { if ('Composer\Autoload\ClassLoader' === $class) { require __DIR__ . '/ClassLoader.php'; } } public static function getLoader() { if (null !== self::$loader) { return self::$loader; } spl_autoload_register(array('ComposerAutoloaderInit5211635af155434412c2432ac36ae6df', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit5211635af155434412c2432ac36ae6df', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInit5211635af155434412c2432ac36ae6df::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } } $loader->register(true); if ($useStaticLoader) { $includeFiles = Composer\Autoload\ComposerStaticInit5211635af155434412c2432ac36ae6df::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { composerRequire5211635af155434412c2432ac36ae6df($fileIdentifier, $file); } return $loader; } } function composerRequire5211635af155434412c2432ac36ae6df($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; } }
<shop_webpush.php> <?php use Minishlink\WebPush\WebPush; use Minishlink\WebPush\Subscription; function sendWebPush() { try { $pdo = new PDO('mysql:host=localhost;dbname=reserve;charset=utf8','root',''); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = "SELECT * FROM subscription"; $stmt = $pdo->prepare($query); $stmt->execute(); if (!$stmt) { print('ユーザークエリーが失敗しました。' . $pdo->error); $pdo->close(); exit(); } $subscriptions = array(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $subscription = new stdClass; $subscription->endpoint = $row['endpoint']; $subscription->p256dh = $row['p256dh']; $subscription->auth = $row['auth']; array_push($subscriptions, $subscription); } $auth = array( 'VAPID' => array( 'subject' => 'localhost', 'publicKey' => 'BMGh50KuOyQcXHWGQrzM_HjuCmC9Z03lqkBae9WFppVolNgUd16na_-2QjMXnCPfHx-j6cFRGXMAigIfzGeiy3U', 'privateKey' => '1xnCy4tn7smJS8bvT9B9DOvNwD8yNT5E2_1DhoP5zVM', ), ); $payload = [ 'title' => '通知があります。', 'body' => 'HelloWorld', 'link' => 'http://localhost/reserve/reserve_shop/shop_home.php' ]; $webPush = new WebPush($auth); foreach ($subscriptions as $subscription) { $subscriptionCreated = Subscription::create([ 'endpoint' => $subscription->endpoint, 'keys' => [ 'p256dh' => $subscription->p256dh, 'auth' => $subscription->auth ], ]); $webPush->sendNotification( $subscriptionCreated, json_encode($payload) ); } // $webPush->flush(); foreach ($webPush->flush() as $report) { //flush $endpoint = $report->getRequest()->getUri()->__toString(); } } catch (Exception $e) { var_dump($e); } } ?>
<db_user_connect.php> <?php session_start(); $pdo = new PDO('mysql:host=localhost;dbname=reserve;charset=utf8','root','',); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if(!isset($_SESSION['user'])) { header("Location: user_index.php"); } // ①ユーザーIDからユーザー名を取り出す $query = "SELECT * FROM users WHERE user_id=:user_id"; $result = $pdo->prepare($query); $result->bindValue(':user_id', $_SESSION['user'], PDO::PARAM_INT); $result->execute(); // ユーザー情報の取り出し while ($row = $result->fetch(PDO::FETCH_ASSOC)) { $user_name = $row['user_name']; $user_id = $row['user_id']; $tel = $row['tel']; }
<db_usershop_connect.php> <?php // 渡されたidを受け取る $shop_id = filter_input(INPUT_GET, 'shop_id', FILTER_SANITIZE_SPECIAL_CHARS); // 受け取ったidからレコード取得sqlを生成 $sql = "SELECT * FROM shop WHERE shop_id = ".$shop_id; //SQL文を実行する $PostData = $pdo->query($sql); //実行結果を配列で受け取る $shop_result = $PostData->fetch( PDO::FETCH_ASSOC); if (!$shop_result) { print('shopクエリーが失敗しました。' . $pdo->error); $pdo->close(); exit(); } // ユーザー情報の取り出し $shop_name = $shop_result['shop_name'];
<save-subscription.php> <?php // データベースにSubscriptionを保存する。 $data = json_decode(file_get_contents("php://input")); // make sure data is not empty if( !empty($data->endpoint) && !empty($data->keys) ){ // set product property values $endpoint = $data->endpoint; $auth = $data->keys->auth; $p256dh = $data->keys->p256dh; // 保存する $query = "INSERT INTO subscription SET endpoint=:endpoint, auth=:auth, p256dh=:p256dh"; //connect to DB $pdo = new PDO('mysql:host=localhost;dbname=reserve;charset=utf8','root',''); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Save Subscription to DB to push $subscription_stmt = $pdo->prepare($query); $subscription_stmt->bindValue(':endpoint',$endpoint , PDO::PARAM_STR); $subscription_stmt->bindValue(':auth', $auth, PDO::PARAM_STR); $subscription_stmt->bindValue(':p256dh', $p256dh, PDO::PARAM_STR); if($subscription_stmt->execute()) { // set response code - 201 created http_response_code(201); // tell the user echo json_encode(array("message" => "Subscription was created.")); } else { // set response code - 503 service unavailable http_response_code(503); // tell the user echo json_encode(array("message" => "Unable to create Subscription.")); } } else { // set response code - 400 bad request http_response_code(400); // tell the user echo json_encode(array("message" => "Unable to create Subscription. Data is incomplete.")); }

試したこと

windows10

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2019/05/17 04:46

>windows10 OSよりもPHPやサーバーの詳細情報を記載してください。 またsendWebPush()はどういう仕組みをお使いでしょうか。 標準機能にはないものですので、プラグインなどであればそのプラグインの公式URLなどを記載してバージョンも追記してください。 また既にuser_insert.phpとやらで出てきているのであれば同じようにすれば良いのでは? どのようにどう通知させるのかの仕様次第なので、その仕様部分を具体的に記載してください。
m.ts10806

2019/05/17 05:37

あと失敗してもいいのでやってみてから質問してください。 既に自身の環境で実装ができているのであれば、最も進んでいるのは質問者さんです。仕様・要件が不明瞭な以上、他人にはアドバイスは不可能です。
ariiiiiga

2019/05/17 10:11

ファイルを追加しました。
m.ts10806

2019/05/17 10:12

>windows10 OSよりもPHPやサーバーの詳細情報を記載してください。 またsendWebPush()はどういう仕組みをお使いでしょうか。 標準機能にはないものですので、プラグインなどであればそのプラグインの公式URLなどを記載してバージョンも追記してください。 また既にuser_insert.phpとやらで出てきているのであれば同じようにすれば良いのでは? どのようにどう通知させるのかの仕様次第なので、その仕様部分を具体的に記載してください。
otolab

2019/05/28 23:41

> 予約に成功した場合にshop_home.phpでsendWebPush();を実行する shop_home.phpが載っていませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問