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

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

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

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

PHP

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

Q&A

解決済

1回答

387閲覧

指定した予約枠を予約負荷にするには

phpsyoshinsya

総合スコア156

MySQL

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

PHP

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

0グッド

0クリップ

投稿2018/11/18 03:52

編集2018/11/18 22:07

###PHPからMYSQLを呼び出すとき"{}"や"'"の使い方がよくわかりません
下の行の78行目のエラーが解決できません。

できれば今後応用できるように考え方をご教授いただければと存じます。
###ソースコード

#!/user/local/bin/php <?php mb_internal_encoding("sjis"); if($_POST["modify"]) modify(); else start(); function start(){ print <<<output <html> <head> <title>modify reserve slot</title> </head> <body> <h1> input day </h1> <form method="post" action="{$_SERVER['PHP_SELF']}"> <label>year<input name="year"type="text" maxlength="4" placeholder="yyyy"></label> <label>month<input name="month" type="text" maxlength="2" placeholder="mm"></label> <label>day<input name="day" type="text" maxlength="2" placeholder="dd"><br></label> <br> <label>rs1<input type="checkbox" name="rs1" value="19:00">start from 19:00</label> <label>rs2<input type="checkbox" name="rs2" value="20:30">start from 20:30</label> <label>rs3<input type="checkbox" name="rs3" value="22:00">start from 22:00</label> <label>rs4<input type="checkbox" name="rs4" value="23:30">start from 23:30</label> <label>rs5<input type="checkbox" name="rs5" value="25:00">start from 25:00</label> <label>rs6<input type="checkbox" name="rs6" value="26:30">start from 26:30 <label>rs7><input type="checkbox" name="rs7" value="28:00">start from 28:00</label> <br> <label>send modify info<input type="submit" name="modify" value="submit"><br>tap or click the button to send modify info</label> </form> </body> </html> output; } function modify(){ $db = new mysqli("localhost", "********", "********", "********"); $db -> set_charset("sjis"); $result = $db -> query("select * from reserveslot order by date desc limit 1"); $row = $result -> fetch_assoc(); $month = (int)$_post["month"]; $day = (int)$_POST["day"]; $year = (int)$_POST["day"]; $dbdate = (int)$row["date"]; $settime = mktime(0, 0, 0, $month, $day, $year); if($dbtime <= $settime){ $days = ($settime - $dbtime) / 86400; for($i = 0;$i <= $days;$i++){ $dbtime += $dbtime + 86400; $db -> query("insert into reserveslot set date={$dbtime}"); } $result = $db -> query("select * from reserveslot where date={$settime}"); $row = $result -> fetch_assoc(); if($row["rs1"] == 0 && $_POST["rs1"]) $db -> query("update reserveslot set rs1=2 where date=$settime"); if($row["rs2"] == 0 && $_POST["rs2"]) $db -> query("update reserveslot set rs2=2 where date=$settime"); if($row["rs3"] == 0 && $_POST["rs3"]) $db -> query("update reserveslot set rs3=2 where date=$settime"); if($row["rs4"] == 0 && $_POST["rs4"]) $db -> query("update reserveslot set rs4=2 where date=$settime"); if($row["rs5"] == 0 && $_POST["rs5"]) $db -> query("update reserveslot set rs5=2 where date=$settime"); if($row["rs6"] == 0 && $_POST["rs6"]) $db -> query("update reserveslot set rs6=2 where date=$settime"); if($row["rs7"] == 0 && $_POST["rs7"]) $db -> query("update reserveslot set rs7=2 where date=$settime"); } if($dbdate >= $settime){ $result = $db -> query("select * from reserveslot where date={$settime}"); // この行のSQLの書き方に問題がありそうです $row = $result -> fetch_assoc(); if($row["rs1"] == 0 && $_POST["rs1"]) $db -> query("update reserveslot set rs1=2 where date=$settime"); if($row["rs2"] == 0 && $_POST["rs2"]) $db -> query("update reserveslot set rs2=2 where date=$settime"); if($row["rs3"] == 0 && $_POST["rs3"]) $db -> query("update reserveslot set rs3=2 where date=$settime"); if($row["rs4"] == 0 && $_POST["rs4"]) $db -> query("update reserveslot set rs4=2 where date=$settime"); if($row["rs5"] == 0 && $_POST["rs5"]) $db -> query("update reserveslot set rs5=2 where date=$settime"); if($row["rs6"] == 0 && $_POST["rs6"]) $db -> query("update reserveslot set rs6=2 where date=$settime"); if($row["rs7"] == 0 && $_POST["rs7"]) $db -> query("update reserveslot set rs7=2 where date=$settime"); } $result = $db -> query("select * from reserveslot where date='{$settime}'"); $row = $result -> fetch_assoc(); print <<<output <html> <head> <title>update results</title> </head> <body> <h1> updated lists </h1> date=<?php=printf("%i/%i/%i",idate("Y",$settime),idate("m",$settime),idate("d",$settime));?><br> <dl> <dt>rs1</dt><dd>{$row['rs1']}</dd> <dt>rs2</dt<dd>{$row['rs2']}</dd> <dt>rs3</dt><dd>{$row['rs3']}</dd> <dt>rs4</dt><dd>{$row['rs4']}</dd> <dt>rs5</dt><dd>{$row['rs']}</dd> <dt>rs6</dt><dd>{$row['rs6']}</dd> <dt>rs7</td><dd>{$row['rs7']}</dd> </dl> <a href="none_accept_slot.php">続けてとうろくする</a> </body> </html> output; $db -> close(); } ?>

###やりたいこと

予約システムではrs1~rs7が0であれば予約可能な時間帯として表示され、予約が確定すると1がいれられますが、都合で予約をあらかじめ入れられないようにするために、値を2に変えるスクリプトです。

変更結果も返すように作ったつもりですが、変更結果は表示されません。
"{}"や"'"を取ったり入れたりしてみましたが、基本的な考え方がわかっていないのか、何れもエラーになったり、意図した動きをしてくれません。

###お願い
全く目がみえないので、できる範囲の配慮をお願いします。

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

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

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

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

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

m.ts10806

2018/11/18 04:03

目が見える人が大半なのでインデントの全くないコードは苦痛です。読む気が削がれます。大半の人への配慮なしには成り立ちませんよ。
phpsyoshinsya

2018/11/18 07:16

インデントは付けられる範囲で付けました。もっとPSR-2にきちんと準拠したコードにできるよう、phpcbfコマンドラインの使い方をご教授いただけるとうれしいです。環境は整備済みです。
m.ts10806

2018/11/18 07:26 編集

phpcbfとか使わないので知らないです。自身でつけつつコーディングを行うか、IDEのフォーマット機能です。まあ、無難にWeb上の整形サービス利用したらいいんじゃないでしょうか。 たぶんこれ前にも何度か同じこと言いましたね。
phpsyoshinsya

2018/11/18 07:35

そうですね、ウェブサイトは見てみましたが、いろいろと設定項目がおおくて選ばないと整形ボタンがおせなかったり、コードを張り付ける場所を見つけづらかったりしてphp7.*をいれて、phpcsとphpcbfを使えるようにはしたのですが、コマンドラインオプションがわからず、整形してもらえないままです。
guest

回答1

0

自己解決

###基本がわからないまま

これでなんとかやりたいことが実現できました。

###修正とコメントを入れたソース

#!/user/local/bin/php <?php // スクリプトの文字セットをShift_JISに設定 mb_internal_encoding("sjis"); // 入力された日付の予約状況表示が有効なら if($_POST["confirm"]) show_status(); // $_POSTに入力済みの値があれば if($_POST["modify"]) modify(); // まだ入力された情報がなければ else start(); // 最初の画面を表示 function start(){ print <<<output <html> <head> <title>modify reserve slot</title> </head> <body> <h1> input day </h1> <form method="post" action="{$_SERVER['PHP_SELF']}"> <label>Show reserving status<input type="checkbox" name="confirm"></label><br> <label>year<input name="year"type="text" maxlength="4" placeholder="yyyy"></label> <label>month<input name="month" type="text" maxlength="2" placeholder="mm"></label> <label>day<input name="day" type="text" maxlength="2" placeholder="dd"><br></label> <br> <label>rs1<input type="checkbox" name="rs1" value="19:00">start from 19:00</label> <label>rs2<input type="checkbox" name="rs2" value="20:30">start from 20:30</label> <label>rs3<input type="checkbox" name="rs3" value="22:00">start from 22:00</label> <label>rs4<input type="checkbox" name="rs4" value="23:30">start from 23:30</label> <label>rs5<input type="checkbox" name="rs5" value="25:00">start from 25:00</label> <label>rs6<input type="checkbox" name="rs6" value="26:30">start from 26:30 <label>rs7><input type="checkbox" name="rs7" value="28:00">start from 28:00</label> <br> <label>send modify info<input type="submit" name="modify" value="submit"><br>tap or click the button to send modify info</label> </form> </body> </html> output; } // 入力された日付の指定された予約枠を予約負荷に設定 function modify(){ // データベース接続 $db = new mysqli("localhost", "********", "********", "********"); // データベースの通信に使う文字コードをShift_JISに設定 $db -> set_charset("sjis"); // データベースに登録されている最後のタイムスタンプを1行取得 $result = $db -> query("select * from reserveslot order by date desc limit 1"); $row = $result -> fetch_assoc(); // データベースのタイムスタンプをローカル変数に保存 $dbtime = $row["date"]; // 入力された日付をタイムスタンプに変換して保存 $settime = mktime(0, 0, 0, $_POST["month"], $_POST["day"], $_POST["year"]); // 入力された日付がデータベースの最後のレコードより大きければ if($dbtime < $settime){ // 入力された日付とデータベースの最後のレコードとの日差を保存 $days = ($settime - $dbtime) / 86400; // 保存した日さより小さいあいだ for($i = 0;$i <= $days;$i++){ /** * 最後のレコードと重ならないように1日分のタイムスタンプを追加 * // 2回目以降も1日分のタイムスタンプを追加 */ $dbtime += 86400; // データベースに新しいタイムスタンプを含むレコードを挿入 $db -> query("insert into reserveslot set date={$dbtime}"); } // データベースから入力された日付のレコードを選択 $result = $db -> query("select * from reserveslot where date={$settime}"); $row = $result -> fetch_assoc(); // 各予約枠が予約済みでないなら予約できないように設定 if($row["rs1"] == 0 && $_POST["rs1"]) $db -> query("update reserveslot set rs1=2 where date=$settime"); if($row["rs2"] == 0 && $_POST["rs2"]) $db -> query("update reserveslot set rs2=2 where date=$settime"); if($row["rs3"] == 0 && $_POST["rs3"]) $db -> query("update reserveslot set rs3=2 where date=$settime"); if($row["rs4"] == 0 && $_POST["rs4"]) $db -> query("update reserveslot set rs4=2 where date=$settime"); if($row["rs5"] == 0 && $_POST["rs5"]) $db -> query("update reserveslot set rs5=2 where date=$settime"); if($row["rs6"] == 0 && $_POST["rs6"]) $db -> query("update reserveslot set rs6=2 where date=$settime"); if($row["rs7"] == 0 && $_POST["rs7"]) $db -> query("update reserveslot set rs7=2 where date=$settime"); } // 入力された日付がデータベースの最後のデータベースのレコードと以上なら if($dbtime >= $settime){ // 入力された日付のレコードを選択 $result = $db -> query("select * from reserveslot where date='{$settime}'"); $row = $result -> fetch_assoc(); // 入力された日付の各予約枠が予約済みでなければ予約できないように設定 if($row["rs1"] == 0 && $_POST["rs1"]) $db -> query("update reserveslot set rs1=2 where date='{$settime}'"); if($row["rs2"] == 0 && $_POST["rs2"]) $db -> query("update reserveslot set rs2=2 where date='{$settime}'"); if($row["rs3"] == 0 && $_POST["rs3"]) $db -> query("update reserveslot set rs3=2 where date='{$settime}'"); if($row["rs4"] == 0 && $_POST["rs4"]) $db -> query("update reserveslot set rs4=2 where date'{=$settime}'"); if($row["rs5"] == 0 && $_POST["rs5"]) $db -> query("update reserveslot set rs5=2 where date='{$settime}'"); if($row["rs6"] == 0 && $_POST["rs6"]) $db -> query("update reserveslot set rs6=2 where date='{$settime}'"); if($row["rs7"] == 0 && $_POST["rs7"]) $db -> query("update reserveslot set rs7=2 where date='{$settime}'"); } // 設定された値を表示するために入力日付のタイムスタンプを含むレコードを選択 $result = $db -> query("select * from reserveslot where date='{$settime}'"); $row = $result -> fetch_assoc(); print <<<output <html> <head> <title>update results</title> </head> <body> <h1> updated lists </h1> output; // 入力された日付を表示 printf("date=%s/%s/%s<br>", idate("Y", $settime), idate("m", $settime), idate("d", $settime)); // 各予約枠の最新状況を表示 printf("<dl><dt>rs1</dt><dd>%s</dd><dt>rs2</dt><dd>%s</dd><dt>rs3</dt><dd>%s</dd><dt>rs4</dt><dd>%s</dd><dt>rs5</dt><dd>%s</dd><dt>rs6</dt><dd>%s</dd><dt>rs7</dt><dd>%s</dd></dl>", $row["rs1"], $row["rs2"], $row["rs3"], $row["rs4"], $row["rs5"], $row["rs6"], $row["rs7"]); print <<<output <a href="none_accept_slot.php">Continue update another date</a> </body> </html> output; // データベース切断 $db -> close(); } // 入力された日付の予約状況表示 function show_status(){ print <<<output <html> <head> <title>Show reserving status</title> </head> <body> <h1> Show reserving status </h1> output; // データベース接続 $db = new mysqli("localhost", "********", "********", "********"); // データベースの通信に使う文字コードをShift_JISに設定 $db -> set_charset("sjis"); // データベースに登録されている最後のタイムスタンプを1行取得 $result = $db -> query("select * from reserveslot order by date desc limit 1"); $row = $result -> fetch_assoc(); // データベースのタイムスタンプをローカル変数に保存 $dbtime = $row["date"]; // 入力された日付をタイムスタンプに変換して保存 $settime = mktime(0, 0, 0, $_POST["month"], $_POST["day"], $_POST["year"]); // 入力された日付がデータベースの最後のレコードより大きければ if($dbtime < $settime){ print "Entered date has not registered.<br>"; } else{ // 設定された値を表示するために入力日付のタイムスタンプを含むレコードを選択 $result = $db -> query("select * from reserveslot where date='{$settime}'"); $row = $result -> fetch_assoc(); // 入力された日付を表示 printf("date=%s/%s/%s<br>", idate("Y", $settime), idate("m", $settime), idate("d", $settime)); // 各予約枠の最新状況を表示 printf("<dl><dt>rs1</dt><dd>%s</dd><dt>rs2</dt><dd>%s</dd><dt>rs3</dt><dd>%s</dd><dt>rs4</dt><dd>%s</dd><dt>rs5</dt><dd>%s</dd><dt>rs6</dt><dd>%s</dd><dt>rs7</dt><dd>%s</dd></dl>", $row["rs1"], $row["rs2"], $row["rs3"], $row["rs4"], $row["rs5"], $row["rs6"], $row["rs7"]); } print <<<output <a href="none_accept_slot.php">Show or update another date</a> </body> </html> output; // データベース切断 $db -> close(); } ?>

###もっとスマートにできたらなぁ

同じ処理を2回も書かなくてすんだらもっとスマートなコードになりそう。

投稿2018/11/18 22:21

phpsyoshinsya

総合スコア156

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問