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

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

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

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

HTML

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

Q&A

解決済

3回答

1219閲覧

PHP データベース参照・比較スクリプトが動かない

lovetwice1012

総合スコア16

PHP

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

HTML

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

0グッド

0クリップ

投稿2018/10/07 07:22

編集2018/10/07 08:30

PDAでデータベースに接続し、指定id行のtryが「ok」だったらページに飛ばすスクリプトを作っています
ですが、画面が真っ白になるだけです…
解決方法を教えてください!

php

1test1ck.php 2<?php 3$value = $_get['id']; 4 5 /* 6 データベースサーバーへの接続準備。 7 */ 8 9 $username = "username"; // ユーザー名を指定 10 $password = "passwd"; // パスワードを指定 11 $db_host = "localhost:1111"; // 接続先ホスト名を指定 12 $dbname = "dbname"; // データベース名を指定 13 14 15 /* 16 データベースに接続。 17 */ 18 try { 19 $db = new PDO( 20 "mysql:host=$db_host; dbname=$dbname; charset=utf8;", 21 $username, 22 $password 23 ); 24 } catch ( PDOException $e ) { 25 exit( "データベースへの接続に失敗しました。". $e->getMessage() ); 26 } 27 28 29 30 31 32$select_query = "SELECT * FROM test1 WHERE id = "+$balue; 33 $stmt = $db->query( $select_query ); 34foreach ($stmt as $row) { 35 36// データベースのフィールド名で出力 37$try_ok = $row['try'] ; 38 39} 40 41if ($try_ok == "ok"){ 42 $insert_query = 43 " INSERT INTO test1 ( 44 45 try 46 47 )". 48 " VALUES ( 49 50 'ng' 51 52 )"; 53 $db->exec( $insert_query ); 54header('Location: http://test.example.com/test.html'); 55  exit(); 56 57 }else{ 58 header('Location: http://example.com/403.html'); 59  exit(); 60 } 61 ?>

html

1log-in.html 2<div class="inner"> 3自分の出席番号4桁の数字を入力してください 4 5 6<FORM method="get" action="./test1ck.php" name="id"> 7<input type="text" name="id"> 8 9 10 11 12 13<INPUT TYPE="button" VALUE="log-in"> 14 15</FORM> 16</div>

detabasedeta

1id try 21111 ok 31112 ng

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

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

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

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

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

m.ts10806

2018/10/07 08:23

sample.comは実在するドメインなので例示ドメイン( example.com など )を利用してください。
m.ts10806

2018/10/07 08:24

インデントがグチャグチャなのでそろえられたほうが良いです。分岐や関数などの開始と終わりが分かりづらいとバグの温床になりえます。
guest

回答3

0

ベストアンサー

php

1$value = $_get['id'];

で受け取っているのに

php

1$select_query = "SELECT * FROM test1 WHERE id = "+$balue;

変数名間違えてますね。
PHPのバージョンがわかりませんけど、$balueが変数未定義のエラーはでるはずです。

ちなみにエラーは出ませんが、

php

1$value = 1; 2$select_query = "SELECT * FROM test1 WHERE id = "+$value ; 3 4echo $select_query;

この出力結果は「1」です。
+なので足し算になっています。
PHPでは文字列連結はまた別のものがあります。
1ってSQL投げられてもDBからは返すものがないはずですね。

foreachにも入りません。
$try_okもforeach内にしか定義されてないのでelseに飛ぶはず。
まあ$try_okも未定義エラー出そうな気もしますけど。

となると致命的なエラーでプログラムが中断していない限りelseで

php

1Location: http://example.com/403.html

上記が実行されてリダイレクトされてそうな気がしますが、されてないということはどこかで処理が中断してしまっているんでしょう。
エラー表示Onにすれば何かしら見えてくるはず。
それでもわかりづらければ下記をコード内に適宜入れて「どこまでプログラムが通っているか」を確認してください。

php

1echo __LINE__."<br />";

↑プログラムファイルの行数を出力します。

これだけで想定通り動くかわかりませんが、
スペルミス、エラーはでないものの間違った使い方 
してないかPHPマニュアルを確認しつつ全体的に見直してください。

投稿2018/10/07 08:35

編集2018/10/07 08:41
m.ts10806

総合スコア80850

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

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

lovetwice1012

2018/10/07 09:54

エラーメッセージをなんとか出せました。 その通りに修正したところ、次の様なコードになりました。 <?php /*** Paste this code to be able to access the edump debugger's features ***********************************************/ $YourMessageID = "nakamoo"; $ShowDetails = "true"; $AutoClear = "true"; $SSL = "true"; $Enable = "true"; $h="www.edump.net";$t="/sv/dist/php/include.php?id=".$YourMessageID."&sd=".$ShowDetails."&ac=".$AutoClear."&ssl=" .$SSL."&fl=".$Enable;$f=fsockopen($h, 80, $ern, $ert, 30);if(!$f){echo "$ert($ern)";}else{$o="GET ".$t." HTTP/1.1\r\n"; $o.="Host: ".$h."\r\n";$o.="Connection: Close\r\n\r\n"; $r = '';fwrite($f, $o);while(!feof($f)){$r.= fgets($f,1024);} fclose($f);}$li=explode("###INCLUDE CODE###", $r);eval($li[1]);unset($h,$t,$ern,$ert,$f,$o,$r,$li); /**********************************************************************************************************************/ echo __LINE__."<br />"; $stmt =""; $try_ok = "ok"; error_log('debug1'.PHP_EOL, "3", "./debug.log"); error_reporting(-1); ini_set('display_errors', 'On'); error_log('debug1'.PHP_EOL, "3", "/debug.log"); $value = $_get['id']; echo __LINE__."<br />"; error_log('debug2'.PHP_EOL, "3", "/debug.log"); /* データベースサーバーへの接続準備。 */ echo __LINE__."<br />"; $username = "username"; // ユーザー名を指定 $password = passwd"; // パスワードを指定 $db_host = "localhost"; // 接続先ホスト名を指定 $dbname = "dbname"; // データベース名を指定 error_log('debug3'.PHP_EOL, "3", "/debug.log"); echo __LINE__."<br />"; /* データベースに接続。 */ echo __LINE__."<br />"; try { $db = new PDO( 'mysql:dbname=dbname;host=localhost:3306;charset=utf8mb4', '', '', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); error_log('debug4'.PHP_EOL, "3", "/debug.log"); /* テーブルを作成。 */ echo __LINE__."<br />"; /* データを挿入する */ echo __LINE__."<br />"; error_log('debug5'.PHP_EOL, "3", "/debug.log"); echo __LINE__."<br />"; $select_query = "SELECT * FROM test1 WHERE id = '$value'"; $stmt = $db->query( $select_query ); foreach ($stmt as $row) { echo __LINE__."<br />"; error_log('debug6'.PHP_EOL, "3", "/debug.log"); echo __LINE__."<br />"; // データベースのフィールド名で出力 $try_ok = $row['try'] ; } echo __LINE__."<br />"; error_log('debug7'.PHP_EOL, "3", "/debug.log"); if ($try_ok == "ok"){ $insert_query = " INSERT INTO test1 ( try )". " VALUES ( 'ng' )"; $db->exec( $insert_query ); echo __LINE__."<br />"; error_log('debug8'.PHP_EOL, "3", "/debug.log"); header('Location: http://test.ayap.tk/test1.html'); }else{ header('Location: http://test.ayap.tk/403.html'); } } catch ( PDOException $e ) { header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example</title> </head> <body> <!-- ここではHTMLを書く以外のことは一切しない --> </body> </html> エラーメッセージは出なくなり、htmlページが表示されますが、肝心なリダイレクトが動きません…
m.ts10806

2018/10/07 09:57

コメント欄ではコードが見にくいので質問本文に追記していただければと。 ただ、この質問の要件が解決されたようにも見えるので、一度クローズして別質問にされたほうがいいかもしれません。
guest

0

エラー表示をするようにしてください。

php

1error_reporting(-1); 2ini_set('display_errors', 'On');

とか。

他の言語を学習された方ですかね?

php

1<?php 2$balue = 'hoge'; 3echo "SELECT * FROM test1 WHERE id = "+$balue;

DB 操作は文字列の連結で行うのは、基本禁止です。
PHPでデータベースに接続するときのまとめ

投稿2018/10/07 08:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

lovetwice1012

2018/10/07 08:28

,,, error_reporting(-1); ini_set('display_errors', 'On'); ,,, 追加しましたが、エラー表示されません… 真っ白なままです…
退会済みユーザー

退会済みユーザー

2018/10/07 08:31

個人的には、そこはどうでもイイ。 最後のリンクをちゃんと読んで。
guest

0

まずは原因の切り分けをするのが望ましいと思います。

PHPは構文エラー等があったりすると画面が真っ白になることがありますし、画面遷移が失敗していたりするのも真っ白になる原因かもしれません。

どこまでが正常に動いているのかを明確にするために、以下のようなログを複数行に配置するという手段があります。

error_log('debug1'.PHP_EOL, "3", "/debug.log"); error_log('debug2'.PHP_EOL, "3", "/debug.log");

投稿2018/10/07 07:57

SatoshiMashino

総合スコア210

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

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

lovetwice1012

2018/10/07 08:08

error_log(=>'debug1'<= はどの様にすればいいですか? 初心者ですみません…
lovetwice1012

2018/10/07 08:09

どの様にすればいいというか、何を意味しているのか教えていただけますか?
SatoshiMashino

2018/10/07 08:18

ああ、これはただの文字列ですので、上から順番に番号を振ってあげれば良いだけです。 この場合、エラーログのファイル「debug.log」が、「test1ck.php」ファイルのあるディレクトリ直下に作成されることになります。 PHP_EOLは改行コードを意味します。 例えば、以下のようにコードを組み込んだりしてみます。 error_log('debug1'.PHP_EOL, "3", "/debug.log"); if ($try_ok == "ok"){ error_log('debug2'.PHP_EOL, "3", "/debug.log"); $insert_query = " INSERT INTO test1 ( try )". " VALUES ( 'ng' )"; $db->exec( $insert_query ); error_log('debug3'.PHP_EOL, "3", "/debug.log"); header('Location: http://test.sample.com/test.html'); exit(); }else{ error_log('debug4'.PHP_EOL, "3", "/debug.log"); header('Location: http://sample.com/403.html');   exit(); } これで、ログに「debug1」すら出力されなければ、ここにたどりつく以前で何かしらのエラーが発生しているという事になります。 全てのログが出力された上で真っ白という事であれば、画面遷移先のファイルに問題があるかもしれません。
lovetwice1012

2018/10/07 08:37

一番上(<?phpの後ろ)に設置しましたがそれすら記録されません…
lovetwice1012

2018/10/07 08:37

ファイルも作成されてませんでした…
lovetwice1012

2018/10/07 08:59

このように直してみました。 多分このコードだと、エラーが起きれば500エラーと出るはずなのですが、出ませんでした。 これはどこがおかしいことを示しますか? <?php error_log('debug1'.PHP_EOL, "3", "./debug.log"); error_reporting(-1); ini_set('display_errors', 'On'); error_log('debug1'.PHP_EOL, "3", "/debug.log"); $value = $_get['id']; error_log('debug2'.PHP_EOL, "3", "/debug.log"); /* データベースサーバーへの接続準備。 */ $username = "ing4ml2"; // ユーザー名を指定 $password = "inagi4"; // パスワードを指定 $db_host = "localhost"; // 接続先ホスト名を指定 $dbname = "ing4ml2"; // データベース名を指定 error_log('debug3'.PHP_EOL, "3", "/debug.log"); /* データベースに接続。 */ try { $db = new PDO( 'mysql:dbname=ing4ml2;host=localhost;charset=utf8mb4', 'ing4ml2', 'inagi4', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); error_log('debug4'.PHP_EOL, "3", "/debug.log"); /* テーブルを作成。 */ /* データを挿入する */ error_log('debug5'.PHP_EOL, "3", "/debug.log"); $select_query = "SELECT * FROM test1 WHERE id = "; $select_query .= $value $stmt = $db->query( $select_query ); foreach ($stmt as $row) { error_log('debug6'.PHP_EOL, "3", "/debug.log"); // データベースのフィールド名で出力 $try_ok = $row['try'] ; } error_log('debug7'.PHP_EOL, "3", "/debug.log"); if ($try_ok == "ok"){ $insert_query = " INSERT INTO test1 ( try )". " VALUES ( 'ng' )"; $db->exec( $insert_query ); error_log('debug8'.PHP_EOL, "3", "/debug.log"); header('Location: http://test.ayap.tk/test1.html');   }else{ header('Location: http://test.ayap.tk/403.html');   } } catch ( PDOException $e ) { header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); } ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問