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

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

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

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

1回答

672閲覧

画面遷移をせずにBMIを測定、データベースに保存するアプリを作りたい

kangaroo_ooo

総合スコア15

MySQL

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2019/07/17 05:44

前提・実現したいこと

PHP初心者です。
PHPでBMIを画面遷移せずに測定するアプリを作っています。
入力した身長と体重の計算結果をBMIにセットし、測定ボタンを押した際に
測定日時、身長、体重、BMIをデータベースに登録させる
アプリを作ろうと思っています。フォームに値が入力されて
いない場合のみエラーメッセージを出力させたいです。
アドバイス等あれば教えていただきたいです。宜しくお願い致します。

発生している問題・エラーメッセージ

・データベースにデータが登録されない。 ・値に何も入力されていない場合警告が出る。 ・フォームに値が入力されていない場合だけエラーメッセージがを表示させたい。

該当のソースコード

PHP

1<?php 2if ($_SERVER['REQUEST_METHOD'] === 'POST') { 3 $height = $_POST['height']; 4} 5 6if ($_SERVER['REQUEST_METHOD'] === 'POST') { 7 $weight = $_POST['weight']; 8} 9 10if ($_SERVER['REQUEST_METHOD'] === 'POST') { 11 $bmi = $_POST['bmi']; 12} 13$date = date('Y-m-d H:i:s'); 14 15try { 16 // DBへ接続 17 $dbh = new PDO("mysql:host=localhost; dbname=measuredb; charset=utf8", 'root', ''); 18 19 // SQL作成 20 if(isset($sql)){ 21 $sql = "INSERT INTO measurement_history ( 22 height, weight, measurement_day, bmi 23 ) VALUES ( 24 '$height', '$weight', '$date', '$bmi' 25 )"; 26 }else { 27 ''; 28 } 29 30 // SQL実行 31 if(isset($res)){ 32 $res = $dbh->query($sql); 33 }else{ 34 ''; 35 } 36} catch(PDOException $e) { 37 echo $e->getMessage(); 38 die(); 39} 40 41// 接続を閉じる 42$dbh = null; 43 44?> 45<!DOCTYPE html> 46<html lang = "ja"> 47<head> 48<meta charset = "UFT-8"> 49<link rel="stylesheet" href="style.css"> 50<title>測定画面</title> 51</head> 52<body> 53<h1>測定</h1> 54<?php 55 //測定日時出力 56 echo date('令和I年m月d日 H時i分s秒'); 57?> 58<form action = "get.php" method = "post"> 59 <!-- エラーメッセージ --> 60 <label><?php 61 if(isset($height)){ 62 echo ''; 63 }else{ 64 echo'<span style="color:red;">身長を入力してください  必須</span>'; 65 } 66 ?> 67 <!-- フォーム入力 --> 68 </label><br> 69 身長   <input type = "text" name ="height" size="6" value="<?php 70 if(isset($height)){ 71 echo round($height, 3); 72 } else{ 73 echo ''; 74 } 75 ?>">  cm<br/><br/> 76 <label><?php if(isset($weight)){ 77 echo ''; 78 } else { 79 echo '<span style="color:red;">体重を入力してください  必須</span>'; 80 } 81 ?></label><br> 82 体重   <input type = "text" name ="weight" size="6" value="<?php 83 if(isset($weight)){ 84 echo round($weight,3); 85 } else{ 86 echo ''; 87 } 88 ?>">  kg<br/><br/><br> 89 BMI <input type = "text" name ="bmi" size="4" value ="<?php 90 if(isset($bmi)){ 91 echo round($weight/(($height/100)*($height/100)),1); 92 } else{ 93 echo ""; 94 } 95 ?>"><br/><br/> 96 <input class="btn1" type="submit" value="測定する"><br><br> 97 <input class="btn1" type="button" onclick="location.href='measurement_history.php'" value="測定履歴"> 98</form> 99</body> 100</html>

試したこと

フォームに変数がセットされていない状況の時にエラーメッセージ表示
画面遷移をせずに値をセットする

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

XAMPP環境でMySQLを使っています。

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

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

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

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

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

m.ts10806

2019/07/17 05:52

form利用している時点で画面遷移は起きていますが、 それは想定通りなのでしょうか。
yukikp

2019/07/17 07:43

正しくは「画面遷移」ではないのですが。、「同一URLで」とか「一つのPHPファイルで」とかそういう意味ですかね。
guest

回答1

0

ベストアンサー

フォームに値が入力されていない場合のみエラーメッセージを出力させたいです

POSTにて入力された値を取得し、入力チェックをしましょう。
エラーである場合は、エラーの文章を作ったりとか、どの項目がエラーであるかなどを何らかの変数に格納しておけば、あとは適宜適切なところに出力してみればいいかと思います。

さんぷる

php

1$height = $weight = $bmi = 0; 2$h_error = $w_error = $b_error = ""; 3if ($_SERVER['REQUEST_METHOD'] === 'POST') { 4 if (empty($_POST['height'])) { 5 $h_error = "身長が入力されていません."; 6 } else { 7 $height = $_POST['height']; 8 } 9 if (empty($_POST['weight'])) { 10 $w_error = "体重が入力されていません."; 11 } else { 12 $weight = $_POST['weight']; 13 } 14 if (empty($_POST['bmi'])) { 15 $b_error = "BMIが入力されていません."; 16 } else { 17 $bmi = $_POST['bmi']; 18 } 19} 20 21 22echo $h_error; 23echo $w_error; 24echo $b_error;

投稿2019/07/22 16:11

Ruizi_Luigi

総合スコア208

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

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

kangaroo_ooo

2019/07/23 02:56

解決しました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問