人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

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

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

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

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

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:HTML MySQL PHP SQL セル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● fut573
●100ポイント

ソースの方。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(えむおー)になっています。

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

◎質問者からの返答

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


2 ● kn1967
●100ポイント
$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テーブルのほうは書いてません。同様に追加してください。

◎質問者からの返答

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


3 ● Mook
●100ポイント ベストアンサー

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


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

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


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

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 の恩恵をほとんど享受できていない作りですので、これらを利用する典型的なパターンを

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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ