質問編集履歴
3
コードのマークダウン表示
test
CHANGED
File without changes
|
test
CHANGED
@@ -9,8 +9,86 @@
|
|
9
9
|
処理としては、ゲームが終わり、前のページでデータベースからハイスコアを取り出し、jsでゲームのスコアを評価し、ハイスコアに入るようなら、postメソッドで後のページに送って、phpでデータベースに格納すると言うものです。
|
10
10
|
ゲームした人のスコアは格納できるのですが、それによってずれた順位の成績を、データベースに格納するときに、もう一度データーベースを参照するのですが、そのときのデータ取得がうまくいかないために、順位が変わった部分に、空白とゼロが格納されてしまうようです。
|
11
11
|
|
12
|
-
前のページでは、以下のコードで、DBを呼び出して、格納された順位データを取得しました。
|
13
|
-
|
14
|
-
|
12
|
+
前のページでは、以下のコードで、DBを呼び出して、格納された順位データを取得しました。
|
13
|
+
001 $CsScore=$_POST["customer_score"];
|
14
|
+
002 $CsStage=$_POST["achieved_stage"];
|
15
|
+
003 try {
|
16
|
+
004 $DB=new PDO('mysql:dbname=????????;host=localhost;charset=sjis','ID,'パスワード);
|
17
|
+
005 $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
|
18
|
+
006 $statement=$DB->prepare("SELECT * FROM hi_score"); $statement->execute();
|
19
|
+
007 $data=$statement->fetchAll();
|
20
|
+
008 for ($i=0;$i<=4;$i++){
|
21
|
+
009 $data[$i]['Stage']=substr(" ".$data[$i]['Stage'],-8);
|
22
|
+
010 $data[$i]['Name']=substr(" ".$data[$i]['Name'],-11);
|
23
|
+
011 $data[$i]['Score']=substr("00000".$data[$i]['Score'],-6);
|
24
|
+
012 }
|
25
|
+
013 $DB=null;
|
26
|
+
014}
|
27
|
+
015 catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); }
|
28
|
+
このページでは、そのまま順位をphpからjsに渡して、表示することに成功しております。データは一旦phpからjsに渡されて処理したあとに、再びDBにアクセスしてデータを格納するために、phpに渡す目的でsubmitされます。
|
29
|
+
submit先のページの記述が以下です。
|
30
|
+
001 $CsName=$_POST["name"];
|
31
|
+
002 $CsStage=$_POST["stage"];
|
32
|
+
003 $CsScore=$_POST["score"];
|
33
|
+
004 $CsAddress=$_POST["address"];
|
34
|
+
005 $j=$_POST["customer_lanking"];
|
35
|
+
006 try {
|
36
|
+
007 $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード');
|
37
|
+
008 $DB-> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
|
38
|
+
009 }
|
39
|
+
010 catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); }
|
40
|
+
010 for($i=5;$i>$j;$i--){
|
41
|
+
011 $Name0=$data0['Name'];
|
42
|
+
012 $Stage0=$data0['Stage'];
|
43
|
+
013 $Score0=$data0['Score'];
|
44
|
+
014 $Address0=$data0['Address'];
|
45
|
+
015 $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'");
|
46
|
+
016 $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR);
|
47
|
+
017 $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR);
|
48
|
+
018 $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT);
|
49
|
+
019 $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR);
|
50
|
+
020 $statement->execute();
|
51
|
+
021 }
|
52
|
+
022 $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'");
|
53
|
+
023 $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR);
|
54
|
+
024 $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR);
|
55
|
+
025 $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT);
|
56
|
+
026 $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR);
|
57
|
+
027 $statement->execute();
|
58
|
+
028 $DB=null;
|
59
|
+
このページでは、再び順位を取得して、プレイヤーと比較して、新たな順位をDBに格納するのですが、取得したはずの$data0の内容が、echoで表示するとすべてArrayとしかでず、空データしか取得されません。従って、データーはヌルストリングと0が格納されてしまいます。 読み込みのコードがまずいのかと考え、以下のコードも試しました。
|
60
|
+
001 $CsName=$_POST["name"];
|
61
|
+
002 $CsStage=$_POST["stage"];
|
62
|
+
003$CsScore=$_POST["score"];
|
63
|
+
004 $CsAddress=$_POST["address"];
|
64
|
+
005 $j=$_POST["customer_lanking"];
|
65
|
+
006 $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード');
|
66
|
+
007 $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
|
67
|
+
008 for($i=5;$i>$j;$i--){
|
68
|
+
009 $k=$i-1;
|
69
|
+
010 $statement=$DB->prepare('SELECT * FROM hi_score WHERE Number=?');
|
70
|
+
011 $statement->bindValue(1,$i);
|
71
|
+
012 $statement->execute();
|
72
|
+
013 $data0=$statement->fetch();
|
73
|
+
014 $Name0=$data0['Name'];
|
74
|
+
015 $Stage0=$data0['Stage'];
|
75
|
+
016 $Score0=$data0['Score'];
|
76
|
+
017 $Address0=$data0['Address'];
|
77
|
+
018 $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'");
|
78
|
+
019 $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR);
|
79
|
+
020 $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR); $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT);
|
80
|
+
021 $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR);
|
81
|
+
022 $statement->execute();
|
82
|
+
023 }
|
83
|
+
024 $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'");
|
84
|
+
025 $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR);
|
85
|
+
026 $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR);
|
86
|
+
027 $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT);
|
87
|
+
028 $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR);
|
88
|
+
029 $statement->execute();
|
89
|
+
030 $DB=null;
|
90
|
+
しかし、結果は同じく、$data0には、Arrayとしか表示されない空データが取得されるだけでした。
|
91
|
+
|
92
|
+
よろしければ、アドバイスいただけたら幸いです。
|
15
93
|
```
|
16
94
|
|
2
ページの説明
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,7 +6,10 @@
|
|
6
6
|
|
7
7
|
jsとphpでゲームを作っているのですが、ハイスコアの格納にデータベースを使用したく思っております。データベースにテーブルを作って接続することころまではうまく行ったのですが、もともとデータベースにあるスコア順を読み込んで、jsで処理してphpで書き込むときに、なぜか同じデータを二度読み込めず、読み込んだデータは空データとして取得されました。
|
8
8
|
全く同じ処理を、二つのページでやっているのですが、前のページではちゃんとデータを読み込むのに、後のページでは空データしか読み込みません。
|
9
|
-
|
9
|
+
処理としては、ゲームが終わり、前のページでデータベースからハイスコアを取り出し、jsでゲームのスコアを評価し、ハイスコアに入るようなら、postメソッドで後のページに送って、phpでデータベースに格納すると言うものです。
|
10
|
+
ゲームした人のスコアは格納できるのですが、それによってずれた順位の成績を、データベースに格納するときに、もう一度データーベースを参照するのですが、そのときのデータ取得がうまくいかないために、順位が変わった部分に、空白とゼロが格納されてしまうようです。
|
11
|
+
|
12
|
+
前のページでは、以下のコードで、DBを呼び出して、格納された順位データを取得しました。 $CsScore=$_POST["customer_score"]; $CsStage=$_POST["achieved_stage"]; try { $DB=new PDO('mysql:dbname=????????;host=localhost;charset=sjis','ID,'パスワード); $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); $statement=$DB->prepare("SELECT * FROM hi_score"); $statement->execute(); $data=$statement->fetchAll(); for ($i=0;$i<=4;$i++){ $data[$i]['Stage']=substr(" ".$data[$i]['Stage'],-8); $data[$i]['Name']=substr(" ".$data[$i]['Name'],-11); $data[$i]['Score']=substr("00000".$data[$i]['Score'],-6); } $DB=null; } catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); } このページでは、そのまま順位をphpからjsに渡して、表示することに成功しております。データは一旦phpからjsに渡されて処理したあとに、再びDBにアクセスしてデータを格納するために、phpに渡す目的でsubmitされます。 submit先のページの記述が以下です。 $CsName=$_POST["name"]; $CsStage=$_POST["stage"]; $CsScore=$_POST["score"]; $CsAddress=$_POST["address"]; $j=$_POST["customer_lanking"]; try { $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード'); $DB-> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
|
10
13
|
} catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); } for($i=5;$i>$j;$i--){ $Name0=$data0['Name']; $Stage0=$data0['Stage']; $Score0=$data0['Score']; $Address0=$data0['Address']; $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'"); $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR); $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR); $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT); $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR); $statement->execute(); } $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'"); $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR); $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR); $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT); $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR); $statement->execute(); $DB=null; このページでは、再び順位を取得して、プレイヤーと比較して、新たな順位をDBに格納するのですが、取得したはずの$data0の内容が、echoで表示するとすべてArrayとしかでず、空データしか取得されません。従って、データーはヌルストリングと0が格納されてしまいます。 読み込みのコードがまずいのかと考え、以下のコードも試しました。 $CsName=$_POST["name"]; $CsStage=$_POST["stage"]; $CsScore=$_POST["score"]; $CsAddress=$_POST["address"]; $j=$_POST["customer_lanking"]; $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード'); $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); for($i=5;$i>$j;$i--){ $k=$i-1; $statement=$DB->prepare('SELECT * FROM hi_score WHERE Number=?'); $statement->bindValue(1,$i); $statement->execute(); $data0=$statement->fetch(); $Name0=$data0['Name']; $Stage0=$data0['Stage']; $Score0=$data0['Score']; $Address0=$data0['Address']; $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'"); $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR); $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR); $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT); $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR); $statement->execute(); } $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'"); $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR); $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR); $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT); $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR); $statement->execute(); $DB=null; しかし、結果は同じく、$data0には、Arrayとしか表示されない空データが取得されるだけでした。
|
11
14
|
|
12
15
|
```
|
1
ソースコードを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -6,16 +6,8 @@
|
|
6
6
|
|
7
7
|
jsとphpでゲームを作っているのですが、ハイスコアの格納にデータベースを使用したく思っております。データベースにテーブルを作って接続することころまではうまく行ったのですが、もともとデータベースにあるスコア順を読み込んで、jsで処理してphpで書き込むときに、なぜか同じデータを二度読み込めず、読み込んだデータは空データとして取得されました。
|
8
8
|
全く同じ処理を、二つのページでやっているのですが、前のページではちゃんとデータを読み込むのに、後のページでは空データしか読み込みません。
|
9
|
-
|
10
|
-
$DB=ne
|
11
|
-
$statement=$DB~>prepare("SELECT * FROM ……");
|
12
|
-
$statement->execute();
|
13
|
-
$data=$statement->fetchAll();
|
14
|
-
|
15
|
-
これで、先のページのほうは、$dataに2次配列が入ってくるのですが、後のページの方では空データしか入ってきません。コピーして使ったので、全く同じ処理です。
|
16
|
-
|
17
|
-
どうすれば、データベースから正しく読み込めるでしょうか。
|
18
|
-
お知恵をお貸しください。
|
9
|
+
はじめのページでは、以下のコードで、DBを呼び出して、格納された順位データを取得しました。 $CsScore=$_POST["customer_score"]; $CsStage=$_POST["achieved_stage"]; try { $DB=new PDO('mysql:dbname=????????;host=localhost;charset=sjis','ID,'パスワード); $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); $statement=$DB->prepare("SELECT * FROM hi_score"); $statement->execute(); $data=$statement->fetchAll(); for ($i=0;$i<=4;$i++){ $data[$i]['Stage']=substr(" ".$data[$i]['Stage'],-8); $data[$i]['Name']=substr(" ".$data[$i]['Name'],-11); $data[$i]['Score']=substr("00000".$data[$i]['Score'],-6); } $DB=null; } catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); } このページでは、そのまま順位をphpからjsに渡して、表示することに成功しております。データは一旦phpからjsに渡されて処理したあとに、再びDBにアクセスしてデータを格納するために、phpに渡す目的でsubmitされます。 submit先のページの記述が以下です。 $CsName=$_POST["name"]; $CsStage=$_POST["stage"]; $CsScore=$_POST["score"]; $CsAddress=$_POST["address"]; $j=$_POST["customer_lanking"]; try { $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード'); $DB-> setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
|
10
|
+
} catch (PDOException $e) { echo 'DB接続エラー: ' . $e->getMessage(); } for($i=5;$i>$j;$i--){ $Name0=$data0['Name']; $Stage0=$data0['Stage']; $Score0=$data0['Score']; $Address0=$data0['Address']; $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'"); $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR); $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR); $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT); $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR); $statement->execute(); } $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'"); $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR); $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR); $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT); $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR); $statement->execute(); $DB=null; このページでは、再び順位を取得して、プレイヤーと比較して、新たな順位をDBに格納するのですが、取得したはずの$data0の内容が、echoで表示するとすべてArrayとしかでず、空データしか取得されません。従って、データーはヌルストリングと0が格納されてしまいます。 読み込みのコードがまずいのかと考え、以下のコードも試しました。 $CsName=$_POST["name"]; $CsStage=$_POST["stage"]; $CsScore=$_POST["score"]; $CsAddress=$_POST["address"]; $j=$_POST["customer_lanking"]; $DB=new PDO('mysql:dbname=?????????;host=localhost;charset=sjis','ID','パスワード'); $DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC); for($i=5;$i>$j;$i--){ $k=$i-1; $statement=$DB->prepare('SELECT * FROM hi_score WHERE Number=?'); $statement->bindValue(1,$i); $statement->execute(); $data0=$statement->fetch(); $Name0=$data0['Name']; $Stage0=$data0['Stage']; $Score0=$data0['Score']; $Address0=$data0['Address']; $statement=$DB->prepare("UPDATE hi_score SET Name=:Name0,Stage=:Stage0,Score=:Score0,Address=:Address0 WHERE Number='".$i."'"); $statement->bindParam(":Name0",$Name0,PDO::PARAM_STR); $statement->bindParam(":Stage0",$Stage0,PDO::PARAM_STR); $statement->bindParam(":Score0",$Score0,PDO::PARAM_INT); $statement->bindParam(":Address0",$Address0,PDO::PARAM_STR); $statement->execute(); } $statement=$DB->prepare("UPDATE hi_score SET Name=:CsName,Stage=:CsStage,Score=:CsScore,Address=:CsAddress WHERE Number='".$j."'"); $statement->bindParam(":CsName",$CsName,PDO::PARAM_STR); $statement->bindParam(":CsStage",$CsStage,PDO::PARAM_STR); $statement->bindParam(":CsScore",$CsScore,PDO::PARAM_INT); $statement->bindParam(":CsAddress",$CsAddress,PDO::PARAM_STR); $statement->execute(); $DB=null; しかし、結果は同じく、$data0には、Arrayとしか表示されない空データが取得されるだけでした。
|
19
11
|
|
20
12
|
```
|
21
13
|
|