PHPについて質問です。


PHPデータのテーブルに現在MYSQLのデータを出力しているのですが、SQL経由でHTMLを出力しようとすると、セルが真っ白になって表示されません。

普通にSQLから文字を出力する分にはまったく問題ないです。

HTML形式で画像を表示させたりしたいと考えています。

対処方法がわからないのですがご存知のかたおりましたらよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/03/05 01:16:33
  • 終了:2009/03/11 00:30:28

ベストアンサー

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/03/05 10:17:21

ポイント100pt

うーん、なんというか・・・。


いきなり全体の完成を目指すよりも、個々の部分をきちんと完成させていったほうが良い気がします。

ある程度大きなものを作るのであれば、ぜひ関数の使い方を習得し、機能レベルで分割したほうがよいでしょう。


たとえばまず気になるのは、単純なタイプミスです。

KANRI_MO ではデータが取得できないと思いますので、この部分は空欄になってしまうでしょう。


とりあえず、テーブル部分のみですが、各クライアントの情報を表にするのは下記のコードで十分です。

<html>
<head>
<meta content="text/html;charset=Shift_JIS" http-equiv="Content-Type">
<title>test</title>
</head>
<body>
<?
// DB 初期化
	define("DB_NAME",         "TYPE_YOUR_DATABASE_NAME");       // 実際の情報を定義してください。
	define("DB_USER_NAME",    "TYPE_YOUR_DB_USER_NAME");        // 実際の情報を定義してください。
	define("DB_USER_PASSWORD","TYPE_YOUR_DB_USER_PASSWORD");    // 実際の情報を定義してください。

	$db_Handle = mysql_connect("mysql64.db.sakura.ne.jp","DB_USER_NAME","DB_USER_PASSWORD");
	mysql_query("SET NAMES SJIS");
	mysql_select_db("DB_NAME");
?>
<div style="text-align: center;">
    <big>< データ内容 ></big>
</div>
<br>
<table style="text-align: left; width: 800px; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr><td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">id<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">name<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">sex<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">address<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">tel<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">information<br></td>
</tr>

<?
     $sql=mysql_query("SELECT id, name, sex, address, tel, information FROM test WHERE id in ('CL1', 'CL2', 'CL3') ORDER BY id");
     while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
		echo "<tr>\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["id"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["name"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["sex"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["address"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["tel"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["information"].'</td>'."\n";
		echo "</tr>\n";
	 }
?>
</tbody>
</table>
</body>
</html>

今の構造は PHP や SQL の恩恵をほとんど享受できていない作りですので、これらを利用する典型的なパターンを

一度本などを読んで実際にトレースしてみてはどうでしょうか。

この部分は経験や知識のない状態での我流では、実用レベルのものを作成するのは非常に困難です。

id:aiomock

ご回答ありがとうございます。

2009/03/05 14:36:35

その他の回答(2件)

id:fut573 No.1

fut573回答回数195ベストアンサー獲得回数542009/03/05 07:17:09

ポイント100pt

ソースの方。MySQLのパスワードが表示されているので、この質問をオープンした後、即座にパスは変更した方がいいです。


$sql=mysql_query("SELECT KANRI_MO FROM IWAI_SAN ORDER BY KANRI_NO LIMIT 0, 1 ;");

while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {

echo $row["KANRI_NO"] ;}

KANRI_NO(えぬおー)が一箇所だけKANRI_MO(えむおー)になっています。

これが原因という事はないでしょうか?

id:aiomock

ご回答ありがとうございます。

2009/03/05 12:31:54
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/03/05 09:43:25

ポイント100pt
$sql=mysql_query("select tel from TEST where id=\"CL1\" ;");
  ↓
$sql=mysql_query("select tel from TEST where id='CL1'");
echo $sql;  ← テスト用

(1)制限事項による変更点

mysql_queryでは末尾にセミコロンを入れてはダメ。

(2)行ったほうが良い事項による変更点

SQLで文字列を扱う場合はダブルではなくシングルクォーテーションで括ったほうがシンプル。

(3)トラブル原因を見つけるためのテスト用変更点

$sqlが正常ならば以前の質問にあったように「Resource id #番号」が表示される。

UPDATEなどのSQLが正常の場合は「1(成功)」か「何もなし(失敗)」となる。

(蛇足1)

以前もコメント欄で書きましたが、面倒でも、エラー時の対応は最初から考えておくべきです。

それがたとえ自分用のシステムであっても、トラブル原因を突き止めやすくしておくべきです。

if ($sql=mysql_query("select tel from TEST where id='CL1'")) {
  while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
    echo $row["tel"] ;
  }
} else {
  echo "失敗
"; }

インデントなどもまだつけておられないようですがつけておいたほうが良いでしょう。

(蛇足2)

項目ごとにクエリーを発行するのは無駄が多すぎます。

最初に各クエリを実行して変数に入れておき、それを使いまわせば良いです。

<?
if ($sql=mysql_query("select tel from TEST where id='CL1'")) {
  $row = mysql_fetch_array($sql, MYSQL_ASSOC));
  echo '<td style="vertical-align: top; text-align: center;">' . $row['tel'] . "</td>\n";
  echo '<td style="vertical-align: top; text-align: center;">' . $row['information'] . "</td>\n";
} else {
  echo '<td>CL1取得失敗</td><td></td>';
}
?>

(蛇足3)

style はスタイルシートで一括してしていしておくと楽です。

1番上の見出し行はtbody内ではなくthead内に置き

tdではなくthにしておくと良いでしょう。

ヘッダ部に追加

<style>
    table {text-align: left; width: 800px; margin-left: auto; margin-right: auto;}
    th {vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;}
    td {vertical-align: top; text-align: center;}
</style>

テーブル部分の変更

<table border="1" cellpadding="2" cellspacing="2">
<thead>
    <tr><th>id</th><th>name</th><th>sex</th><th>address</th><th>tel</th><th>information</th></tr>
</thead>
<tbody>
<?
    if ($sql=mysql_query("select * from TEST where id='CL1'") {
        echo "<tr>";
        while ($row_TEST = mysql_fetch_array($sql, MYSQL_ASSOC)) {
            echo "<td>$row_TEST['id']</td>";
            echo "<td>$row_TEST['name']</td>";
            echo "<td>$row_TEST['sex']</td>";
            echo "<td>$row_TEST['address']</td>";
            echo "<td>$row_TEST['tel']</td>";
            echo "<td>$row_TEST['information']</td>";
        }
        echo "</tr>\n";
    } else {
        echo "<tr><td>TESTからのデータ取得失敗</td></tr>\n";
    }
?>
</tbody>
</table>

※\nはブラウザ側でソースコードを見る際の改行コードです。

※以上、動作確認したものではなくいきなり書いてますので

学習がてら文法等再チェックしてから利用してください。

簡便にするためIWAI-SANテーブルのほうは書いてません。同様に追加してください。

id:aiomock

ご回答ありがとうございます。

2009/03/05 14:36:30
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912009/03/05 10:17:21ここでベストアンサー

ポイント100pt

うーん、なんというか・・・。


いきなり全体の完成を目指すよりも、個々の部分をきちんと完成させていったほうが良い気がします。

ある程度大きなものを作るのであれば、ぜひ関数の使い方を習得し、機能レベルで分割したほうがよいでしょう。


たとえばまず気になるのは、単純なタイプミスです。

KANRI_MO ではデータが取得できないと思いますので、この部分は空欄になってしまうでしょう。


とりあえず、テーブル部分のみですが、各クライアントの情報を表にするのは下記のコードで十分です。

<html>
<head>
<meta content="text/html;charset=Shift_JIS" http-equiv="Content-Type">
<title>test</title>
</head>
<body>
<?
// DB 初期化
	define("DB_NAME",         "TYPE_YOUR_DATABASE_NAME");       // 実際の情報を定義してください。
	define("DB_USER_NAME",    "TYPE_YOUR_DB_USER_NAME");        // 実際の情報を定義してください。
	define("DB_USER_PASSWORD","TYPE_YOUR_DB_USER_PASSWORD");    // 実際の情報を定義してください。

	$db_Handle = mysql_connect("mysql64.db.sakura.ne.jp","DB_USER_NAME","DB_USER_PASSWORD");
	mysql_query("SET NAMES SJIS");
	mysql_select_db("DB_NAME");
?>
<div style="text-align: center;">
    <big>< データ内容 ></big>
</div>
<br>
<table style="text-align: left; width: 800px; margin-left: auto; margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr><td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">id<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">name<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">sex<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">address<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">tel<br></td>
	<td style="vertical-align: top; text-align: center; background-color: rgb(255, 255, 153); font-weight: bold;">information<br></td>
</tr>

<?
     $sql=mysql_query("SELECT id, name, sex, address, tel, information FROM test WHERE id in ('CL1', 'CL2', 'CL3') ORDER BY id");
     while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
		echo "<tr>\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["id"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["name"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["sex"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["address"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["tel"].'</td>'."\n";
		echo '    <td style="vertical-align: top; text-align: center;">'.$row["information"].'</td>'."\n";
		echo "</tr>\n";
	 }
?>
</tbody>
</table>
</body>
</html>

今の構造は PHP や SQL の恩恵をほとんど享受できていない作りですので、これらを利用する典型的なパターンを

一度本などを読んで実際にトレースしてみてはどうでしょうか。

この部分は経験や知識のない状態での我流では、実用レベルのものを作成するのは非常に困難です。

id:aiomock

ご回答ありがとうございます。

2009/03/05 14:36:35
  • id:fut573
    phpやcssのソースがあると原因を絞りやすいと思います。
    また、PHPもMySQLも各バージョンによって動作が異なりますので、ご使用のバージョン情報も。
  • id:aiomock
    現在状況ですが以下のようになっております。(コンポーザーを使用し、作成しているため style 等の少し余分なものも入っています。)

    ページ:http://oskuni7.sakura.ne.jp/test3.php
    コード:http://oskuni7.sakura.ne.jp/test3.phps

    PHPとMySQLの各バージョンになります。

    PHP Version 5.2.8

    MySQL のバージョン: 4.1.22
  • id:Mook
    コードからユーザ情報は削除したほうが良いですよ。
  • id:aiomock
    Mook さん

    ご報告ありがとうございます。

    削除いたしました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません