🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

4回答

2260閲覧

データベースに値が入りません

moonlight401

総合スコア4

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

1クリップ

投稿2019/10/25 03:43

編集2019/10/25 04:17

前提・実現したいこと

phpで抽選システムを作っているのですがデータベースに値が入らずnull
になります。 解決策を教えてください

$sに値がはいっていないのか Rfirのカラムに値がはいりません

エラーメッセージは発生しませんでした

###該当のソースコード

php

1 $a= htmlspecialchars($_POST["asa"],ENT_QUOTES); 2 $b= htmlspecialchars($_POST["yoru"],ENT_QUOTES); 3 $c= htmlspecialchars($_POST["kuro"],ENT_QUOTES); 4 $e=$_POST["com"]; 5 $connect = 'mysql:host=XXXX;dbname=XXXX;'; 6 $user = 'XXXX'; 7 $pass = 'XXXX'; 8 $db= new PDO($connect,$user,$pass); 9 10 $sql = "SELECT * FROM lottery WHERE gra = ? AND cla BETWEEN ? AND ? ORDER BY ran DESC"; 11 $stmt = $db->prepare($sql); 12 $stmt->bindvalue(1, $a); 13 $stmt->bindvalue(2, $b); 14 $stmt->bindvalue(3, $c, PDO::PARAM_INT); 15 $stmt->execute(); 16 17 while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ 18 } 19 $rank[] = $result; 20 foreach($rank as $mes){ 21 $sql01 = "select count(*) from lottery where Rfir = '{$mes["Fir"]}'"; 22 $ps = $db -> query($sql01); 23 $ea = $ps->fetchColumn(); 24 $sql02 = "select count(*) from lottery where Rfir = '{$mes["Sce"]}'"; 25 $ps = $db -> query($sql02); 26 $eb = $ps->fetchColumn(); 27 $sql03 = "select count(*) from lottery where Rfir = '{$mes["Thi"]}'"; 28 $ps = $db -> query($sql03); 29 $ec = $ps->fetchColumn(); 30 $sql04= "select count(*) from lottery where Rfir = '{$mes["Fou"]}'"; 31 $ps = $db -> query($sql04); 32 $ed = $ps->fetchColumn(); 33 34 if($ea < $e) { $s = $mes['Fir']; 35 $rands = mt_rand(100000,999999) ; 36 } elseif ($eb < $e) { $s = $mes["Sce"]; 37 $rands = mt_rand(1000000,9999999); 38 } elseif ($ec < $e) { $s =$mes["Thi"]; 39 $rands = mt_rand(10000000,99999999) ; 40} elseif ($ed < $e) { $s = $mes["Fou"]; 41 $rands = mt_rand(100000000,999999999); 42} 43 44 $usql = "update lottery set Rfir = :Rfir, ran = :ran"; 45 $stmt = $db->prepare($usql); 46 $stmt->bindvalue(':Rfir', $s); 47 $stmt->bindvalue(':ran', $rands); 48 $stmt->execute(); 49 } 50 51 52 ?> 53

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

データベースは  id int(11) NOT NULL auto_increment,
time datetime default NULL,
gra varchar(255) default NULL,
cla varchar(255) default NULL,
num varchar(255) default NULL,
Fir varchar(255) default NULL,
Sce varchar(255) default NULL,
Thi varchar(255) default NULL,
Fou varchar(255) default NULL,
Fiv varchar(255) default NULL,
ran int(11) default NULL,
Rfir int(11) default NULL,
Rsce int(11) default NULL,
Rthi int(11) default NULL,
このようになっています

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

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

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

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

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

yoorwm

2019/10/25 03:45

エラーを確認してください
moonlight401

2019/10/25 03:47

エラーが発生しておらず ただ$sに値が入りません
yambejp

2019/10/25 03:52

具体的にどういうテーブル構造から何を検索して 何をupdateするのか仕様を明記ください
kei344

2019/10/25 03:52

ユーザ名とパスワードが記載されているようですが、実際に使用しているものであれば、この質問は削除されることをお勧めします。 https://teratail.com/help#delete-question
m.ts10806

2019/10/25 04:10

kei344さんに補足です。質問編集では履歴から確認できるので削除依頼をするべきです。(中には運営に依頼したらそこだけXXXに置換してくれたとかありますが、そこは相談次第。)
m.ts10806

2019/10/25 04:19

念押ししておきますね。 質問編集では履歴から確認できます。なので早急に運営に直接削除依頼をだしてください。 あと、もし今後質問をたてるときはhostやdbnameもそのまま投稿してはいけません。
退会済みユーザー

退会済みユーザー

2019/10/25 04:20

勉強目的でしたらPHPの入門からやり直すべき理解度ですね。 もし業務なのでしたら外注業者を探した方が良さそうです。
m.ts10806

2019/10/25 04:27

とりあえずコードのブロックとインデントをきちんと整理するところからはじめたほうがコードも読みやすくなり問題にも気づきやすくなると思うので、新たに質問立てるとしてもこのままのコードではなくコードフォーマットをかけた状態でひとつひとつ見直し確認してから質問してください。 わからないわからないでは誰もわかりませんし、本当に初心者で…というのでしたらもっと簡単なコードから作るのを強くすすめます。分岐も最小限で固定値を扱うようなコードからです。
moonlight401

2019/10/25 04:31

すいませんわざわざありがとうございます 取り敢えずこの質問は削除依頼をだしました
yambejp

2019/10/25 04:34 編集

次回質問のときはユーザー/パスワードはダミーをいれてくださいね またすでに晒してしまったので、現在のパスワードは乗っ取られる前に 早めに更新した方がよいでしょう
guest

回答4

0

id int(11) NOT NULL auto_increment, time datetime default NULL, gra varchar(255) default NULL, cla varchar(255) default NULL, num varchar(255) default NULL, Fir varchar(255) default NULL, Sce varchar(255) default NULL, Thi varchar(255) default NULL, Fou varchar(255) default NULL, Fiv varchar(255) default NULL, ran int(11) default NULL, Rfir int(11) default NULL, Rsce int(11) default NULL, Rthi int(11) default NULL,

まず必ず値が入るべきカラムはnot nullにすべきではないでしょうか?
そうすればnullが来た際にエラーが発生し原因に気づきやすくなります。
id以外すべてnullが入りうる仕様なのでしょうか?

投稿2019/10/25 04:19

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

値を入れるならSelect(選択する)でなくInsert(入れる)文を作るといいです

投稿2019/10/25 05:16

tokyo2020

総合スコア28

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

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

0

どこにもINSERT文が書かれていないですが、そもそもデータは入っているのでしょうか?

投稿2019/10/25 04:12

m_o

総合スコア109

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

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

moonlight401

2019/10/25 04:14

別のページでデータデータを入れています
m_o

2019/10/25 04:16

それは確実に入れることができているか確認済ですか?
m_o

2019/10/25 04:19

では質問は「データベースに値が入らず」ではなく、「データベースからデータを取得できない」でしょうか?
guest

0

phpmyadminのデータベースです

ちょっと意味がわかりません、phpMyAdminでmysqlへのアクセスが可能という
意味でしょうか?
MySQLもしくはmariaDB起動していてpdoでアクセスできるのは確認済みですね?

$a= htmlspecialchars($_POST["asa"],ENT_QUOTES);

$b= htmlspecialchars($_POST["yoru"],ENT_QUOTES);
$c= htmlspecialchars($_POST["kuro"],ENT_QUOTES);

この辺の処理はあきらかにおかしいです。
prepareで検索するのでしたらpostで受け取った値はエスケープ処理を
かけてはいけません。

while($result = $stmt->fetch(PDO::FETCH_ASSOC)){

}

なぜ空でwhileをまわしているのでしょう?
最後のデータだけ$resultに残したいのでしょうか?
sql文を逆順にorder by してlimit 1するほうが効率的です。

$sql01 = "select count(*) from lottery where Rfir = '{$mes["Fir"]}'";

PDOなのですからprepareで処理してください

$usql = "update lottery set Rfir = :Rfir, ran = :ran";

運用状況がわかりませんがwhere句を使わずにupdateすると全レコードが
対象になりますが大丈夫なのでしょうか?

投稿2019/10/25 03:51

yambejp

総合スコア116661

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

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

moonlight401

2019/10/25 03:57

すいませんprepareでどのように処理すれだいいかわかりません updateはforeachで取り出した行のみを更新したいと考えています
退会済みユーザー

退会済みユーザー

2019/10/25 04:05

自分でかいてるのにどうすればいいのかわからないって > $sql = "SELECT * FROM lottery WHERE gra = ? AND cla BETWEEN ? AND ? ORDER BY ran DESC";
yoorwm

2019/10/25 04:06

> $stmt = $db->prepare($usql); こんな文を使っているようですが > すいませんprepareでどのように処理すれだいいかわかりません どういう意味でしょうか?
yoorwm

2019/10/25 04:06

(ぶっちゃけ、答え書いても理解出来るの?
yambejp

2019/10/25 04:07

具体的にcreate table+insertをつかってサンプルデータを提示し どういう値がきたらどうupdateしたいのか明示してください
moonlight401

2019/10/25 04:07

すいません初心者であまり理解できていないです
m.ts10806

2019/10/25 04:11

コードで起きてる問題より、ユーザーとパスを全世界に公開してしまってる問題が先です。 別途コメントしていますのでそちらへ。
yambejp

2019/10/25 04:23

> 初心者であまり理解できていないです ご自身が何をどうしたいか指針を持っていないなら 誰も答えられません まずはセキュリティの課題が指摘されているので、この回答は 運営に削除してもらい、何をしたいか改めて質問をたててください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問