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

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

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

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1899閲覧

MySQLにある変数だけが受け渡せない

hideki0227

総合スコア19

MySQL

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

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/06/12 23:45

zork2.htmlとzork.phpという2つのファイルがあります。
zork2.htmlでのゲームオーバー画面(id="stage100")で、プレイヤーの行動に応じて加算された合計得点(変数points)を表示しています。
そしてプレイヤーの入力するお名前と、合計得点(id="score" name="points" type="hidden")をzork.phpにPOSTします。

「合計得点:」の欄にpointsの値が正常に表示されるので
document.getElementById('treasure_sum').innerHTML = points;
は問題無く動いているようなんですが、
document.getElementById('score').value = points;
が何かおかしいのか、データベースのpointsのレコードには0しか入りません。お名前の値は正常に入っています。
どこが間違っていますでしょうか? どうすれば正しいpointsの値がデータベースのpointsに入りますでしょうか?

zork2.html↓

html

1~略~ 2 3<div class="box1" id="stage99"> 4なんだこの終わり方は……。<br> 5お願いです。次回はHAPPY ENDを目指してください!<br> 6<br> 7<br> 8<a href="#stage100" class="gamestart" onclick="sum_treasure();">GAME<br>OVER</a> 9</div> 10 11<div class="box1" id="stage100"> 12ハイスコア登録<br> 13<br> 14<br> 15<br> 16<form action="zork.php" method="POST" target="_top"> 17お名前(20文字以内):<br> 18<input type = "text" name = "yourname"><br> 19<input id="score" name="points" type="hidden"> 20<br> 21手に入れた宝物:<br> 22<div id="treasure_mail">○○ 5点</div> 23<div id="treasure_key">○○○○ 10点</div> 24<div id="treasure_asteca">○○○○○○○○ 15点</div> 25<div id="treasure_memo">○○ 20点</div> 26<div id="treasure_coffee">○○○○ 50点</div> 27<br> 28合計得点: 29<div id="treasure_sum">0</div> 30<br> 31<input type="submit" value="登録する"><br> 32</form> 33</div> 34 35~略~ 36 37function sum_treasure () 38{ 39 if (mail === 1) 40 { 41 points = points + 5; 42 document.getElementById('treasure_mail').innerHTML = '手紙 5点'; 43 } 44 if (key === 1) 45 { 46 points = points + 10; 47 document.getElementById('treasure_key').innerHTML = '玄関の鍵 10点'; 48 } 49 if (asteca === 1) 50 { 51 points = points + 15; 52 document.getElementById('treasure_asteca').innerHTML = 'デーモンズリング 15点'; 53 } 54 if (clear === 1) 55 { 56 points = points + 70; 57 document.getElementById('treasure_memo').innerHTML = 'メモ 20点'; 58 document.getElementById('treasure_coffee').innerHTML = 'コーヒー 50点'; 59 } 60 61 document.getElementById('treasure_sum').innerHTML = points; 62 document.getElementById('score').value = points; 63} 64 65~略~

zork.php↓

php

1<?php 2 3/* 4//ローカルXAMPPの情報 5$host = '127.0.0.1'; // データベースのホスト名又はIPアドレス 6$username = '*****'; // MySQLのユーザ名 7$passwd = '*****'; // MySQLのパスワード 8$dbname = '*****'; // データベース名 9 10$link = mysqli_connect($host, $username, $passwd, $dbname); 11 12$msg = ''; 13$yourname = ''; 14$result = array(); 15 16// 接続成功した場合 17if ($link) 18{ 19 // 文字化け防止 20 mysqli_set_charset($link, 'utf8'); 21 22 if ($_SERVER['REQUEST_METHOD'] === 'POST') 23 { 24 if (isset($_POST['yourname']) === TRUE) 25 { 26 $yourname = $_POST['yourname']; 27 } 28 $yourname = substr($yourname, 0, 20); 29 30 if (isset($_POST['points']) === TRUE) 31 { 32 $points = $_POST['points']; 33 } 34 35 $query = 'SELECT yourname, points, date FROM zork'; 36 $result = mysqli_query($link, $query); 37 while ($row = mysqli_fetch_array($result)) 38 { 39 /* 40 if ($yourname === $row['yourname']) 41 { 42 $msg = '名前重複'; 43 } 44 */ 45 } 46 47 if ($msg === '') 48 { 49 $yourname = htmlspecialchars($yourname, ENT_QUOTES, 'UTF-8'); 50 $date = date ('Y/m/d'); 51 52 $query = 'INSERT INTO zork (yourname, points, date) VALUES ("' . $yourname . '", points, "' . $date . '")'; 53 54 $result = mysqli_query($link, $query); 55 56 if ($result === TRUE) 57 { 58 $msg = '登録しました。ありがとうございました。'; 59 } else 60 { 61 $msg = '何らかのエラーで投稿できませんでした。'; 62 } 63 } 64 } 65 66?> 67<!DOCTYPE html> 68<html lang="ja"> 69<head> 70 <meta charset="UTF-8"> 71 <title></title> 72 <style type="text/css"> 73 * 74 { 75 color: #c0ffc0; 76 } 77 78 body 79 { 80 width: 640px; 81 margin: 0 auto; 82 background-color: #000000; 83 font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, "MS Pゴシック", "MS PGothic", sans-serif; 84 font-size: 22px; 85 color: #c0ffc0; 86 } 87 88 table 89 { 90 width: 600px; 91 margin: 0 auto; 92 } 93 94 th 95 { 96 word-break: break-all; 97 text-align: center; 98 vartical-align: top; 99 font-size: 16px; 100 color: #c0ffc0; 101 line-height: 125%; 102 border: solid 1px #c0ffc0; 103 padding: 5px; 104 } 105 106 td 107 { 108 word-break: break-all; 109 text-align: center; 110 vartical-align: top; 111 font-size: 18px; 112 color: #c0ffc0; 113 line-height: 125%; 114 border: solid 1px #c0ffc0; 115 padding: 5px; 116 } 117 118 .button_style 119 { 120 font-size:12px; 121 text-decoration:none; 122 text-align:center; 123 padding:4px; 124 color:#c0ffc0; 125 background-color:#000000; 126 border-radius:5px; 127 } 128 129 .dousuru 130 { 131 display: block; 132 width: 100px; 133 height: 48px; 134 margin: 5px; 135 padding: 5px; 136 border: 2px solid #c0ffc0; 137 border-radius: 15px; 138 text-align: center; 139 vertical-align: middle; 140 clear: both; 141 } 142 143 a 144 { 145 text-decoration: none; 146 } 147 </style> 148</head> 149<body> 150<?php 151 print ($msg . '<br><br>'); 152?> 153<a href="zork.html" target="_top"><span class="dousuru">戻る</span></a><br> 154<table> 155 <tr> 156 <th width = '300'> 157 お名前 158 </th> 159 <th width = '100'> 160 得点 161 </th> 162 <th width = '200'> 163 登録日 164 </th> 165 </tr> 166 <tr> 167 <?php 168 // SELECTクエリを実行する 169 $query = 'SELECT yourname, points, date FROM zork ORDER BY points DESC'; 170 $result = mysqli_query($link, $query); 171 172 // 1行ずつ結果を配列で取得します 173 while ($row = mysqli_fetch_array($result)) 174 { 175 ?> 176 <td> 177 <?php 178 print ($row['yourname']); 179 ?> 180 </td> 181 <td> 182 <?php 183 print ($row['points']); 184 ?> 185 </td> 186 <td> 187 <?php 188 print ($row['date']); 189 ?> 190 </td> 191 </tr> 192 <?php 193 } 194 ?> 195</table> 196 <?php 197 // 結果セットを開放します 198 mysqli_free_result($result); 199 200 // 接続を閉じます 201 mysqli_close($link); 202 203// 接続失敗した場合 204} 205else 206{ 207 print ('何らかのエラーで登録できませんでした。'); 208} 209 ?> 210</body> 211</html> 212

イメージ説明
↑15が入ると思いきや、

イメージ説明
↑末尾のレコードでは0です。

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

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

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

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

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

guest

回答2

0

ベストアンサー

PHP

1 2 $query = 'INSERT INTO zork (yourname, points, date) VALUES ("' . $yourname . '", points, "' . $date . '")'; 3

で、pointsのところに変数$pointsではなくて文字列'points'が直接入っているからかと思います。

全く別問題として、このコードはセキュリティ上とても大きな問題(SQLインジェクション)を抱えているので、インターネットに公開する前にはセキュリティについても十分に勉強されることをお勧めします。

投稿2016/06/12 23:58

tanat

総合スコア18713

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

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

hideki0227

2016/06/13 13:54

pointsの前の「$」が抜けていたのと、intvalで数値化したら問題無くDBに入りました。 SQLインジェクションについても少し調べてみました。 htmlspecialcharsは入れているのですが、 http://www.phpbook.jp/tutorial/mysql/index8.html も組み込んでみます。また名前だけでなく日付も文字列なのでそこにも同じことをしてみます。 ご指摘ありがとうございます。助かりました。ありがとうございます。
tanat

2016/06/13 14:07

htmlspecialcharactersはsqlインジェクション対策になりません。 sqlを組み立てる時点で適切にエスケープするか、プリペアドステートメントを使用する必要があります。
hideki0227

2016/06/13 14:27

なるほど、sqlインジェクションは無茶苦茶厄介な問題なんですね。もっと調べてみます。ありがとうございます。
tanat

2016/06/13 15:35

原理を知って、開発の最初からポリシーを決めて対応すれば実装的には難しい問題ではなくなります。 SQLインジェクションも含め、webアプリケーションのセキュリティについては、 IPAの出している https://www.ipa.go.jp/security/vuln/websecurity.html 安全なwebサイトの作り方 によくまとめられていますので、是非読んでみてください。
hideki0227

2016/06/14 00:41

重ねてありがとうございます。のちほどじっくり読ませて頂きます。
guest

0

<input id="score" name="points" type="hidden"> ここで、valueを指定していないからでは。

投稿2016/06/13 00:43

ttyp03

総合スコア16998

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

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

hideki0227

2016/06/13 13:51

まだ正確にはわからないのですが、なぜかintvalしてみたらDBに反映されました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問