![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
MySQLからuserというテーブルのデータを呼び出し、表示すると同時にフォームとしてデータの変更もできるプログラムを作成しています。
その項目の中に別のusergrというテーブルのデータをリストボックスで表示させたいのですが、うまくいきません。
現状では下記のスクリプトでuserの1番のデータだけが表示されている状態です。(リストボックスも問題なく表示はされていますが…)
まわりに聞ける人もいず、本などを見よう見まねで作成したため、根本的に誤ってるところがあるかと思いますが、どうかアドバイス頂けませんでしょうか。
$sql = "SELECT * FROM user";
$mysql->query($sql);
while($row = $mysql->fetch()){
$no = $row["no"];
$name = $row["name"];
$division = $row["division"];
$email = $row["email"];
$tel = $row["tel"];
$group = $row["group"];
echo <<<EOT
<td align="center">$no</td>
<td align="center"><input type="text" name="name[$no]" value="$name" size="10"></td>
<td align="center"><input type="text" name="division[$no]" value="$division" size="20"></td>
<td align="center"><input type="text" name="email[$no]" value="$email" size="30"></td>
<td align="center"><input type="text" name="tel[$no]" value="$tel" size="10"></td>
<td align="center">
<select name="group[$no]">
EOT;
$sql = "SELECT * FROM usergr LEFT JOIN user ON usergr.grno=user.group";
$mysql->query($sql);
while($row = $mysql->fetch()){
$group = $row["group"];
$grno = $row["grno"];
$grname = $row["grname"];
if($row["grno"]==$group){
echo "<option value=\"{$row['grno']}\" selected=\"selected\">{$row['grname']}</option>";
} else {
echo "<option value=\"{$row['grno']}\">{$row['grname']}</option>";
}
}
echo <<<EOT
</select>
</td>
<td align="center"><input type="submit" name="submit_upd[$no]" value="変更">
<input type="submit" name="submit_del[$no]" value="削除"></td>
</tr>
EOT;
}
No.1ベストアンサー
- 回答日時:
$mysql->query($sql);
ってことは、MySQLを操作するクラスがあるって事でしょうか?
(クラスの実装がわからないので、できればクラスのソースコード、またはクラス仕様をもらえたら幸いです。)
その場合、whileループ内の $mysql->query($sql)とやっている部分は、別のインスタンスで実行してやる必要があります。
1個目だけ表示される理由は、同じインスタンスを利用して その内部のプロパティを書き換えてしまっているからです。
(書き換えてしまっている部分をソース内に記述しておきました。)
たとえば次のような感じになります↓
// この辺りで $mysqlがインスタンス化されているはず。
// たとえば次のように...
// $mysql = new CMySQL();
// テーブル本体を作るためのインスタンス
$mysql = new CMySQL();
$sql = "SELECT * FROM user";
$mysql->query($sql);
// リストボックスを作るためのインスタンス
$mysql2 = new CMySQL();
$sql = "SELECT * FROM usergr LEFT JOIN user ON usergr.grno=user.group";
$mysql2->query($sql);
while($row = $mysql->fetch()){
$no = $row["no"];
$name = $row["name"];
$division = $row["division"];
$email = $row["email"];
$tel = $row["tel"];
$group = $row["group"];
echo <<<EOT
<td align="center">$no</td>
<td align="center"><input type="text" name="name[$no]" value="$name" size="10"></td>
<td align="center"><input type="text" name="division[$no]" value="$division" size="20"></td>
<td align="center"><input type="text" name="email[$no]" value="$email" size="30"></td>
<td align="center"><input type="text" name="tel[$no]" value="$tel" size="10"></td>
<td align="center">
<select name="group[$no]">
EOT;
/* ---------------- 上で記述したため不要
$sql = "SELECT * FROM usergr LEFT JOIN user ON usergr.grno=user.group";
↓ これが書き換えてしまっています。
$mysql->query($sql);
---------------- */
while($row = $mysql2->fetch()){
$group = $row["group"];
$grno = $row["grno"];
$grname = $row["grname"];
if($row["grno"]==$group){
echo "<option value=\"{$row['grno']}\" selected=\"selected\">{$row['grname']}</option>";
} else {
echo "<option value=\"{$row['grno']}\">{$row['grname']}</option>";
}
}
echo <<<EOT
</select>
</td>
<td align="center"><input type="submit" name="submit_upd[$no]" value="変更">
<input type="submit" name="submit_del[$no]" value="削除"></td>
</tr>
EOT;
}
わかりにくい点があれば、何なりと~
この回答への補足
ありがとうございます!
別ファイルに、クラスの記述がありました。
class MySQL {
// DB接続(略)
// SQLクエリの処理
function query($sql){
$this->m_Rows = mysql_query($sql, $this->m_con);
if(!$this->m_Rows) {
die("MySQLでエラーが発生しました <br><b>{$sql}</b><br>" .mysql_errno().":".mysql_error());
}
return $this->m_Rows;
}
// 検索結果をfetch
function fetch() {
return mysql_fetch_array($this->m_Rows);
}
// 変更された行の数を得る
//直近の操作で変更された行数の取得
function affected_rows() {
return mysql_affected_rows();
}
// 列数
//結果の列数(フィールド数)の取得
function cols() {
return mysql_num_fields($this->m_Rows);
}
// 行数
//結果の行数を取得
function rows() {
return mysql_num_rows($this->m_Rows);
}
// 検索結果の開放
function free() {
mysql_free_result($this->m_Rows);
}
// MySQLをクローズ
function close() {
mysql_close($this->m_con);
}
// エラーメッセージ
//直近に実行されたMySQL操作のエラーメッセージを返す
function errors() {
return mysql_errno().":".mysql_error();
}
// エラーナンバー
//直近に実行されたMySQLの操作エラー番号を返す
function errorno() {
return mysql_errono();
}
}
回答ありがとうございます!!
恥ずかしながら本を丸写ししていたため
$mysql->query($sql);が一般的な処理なのだと思ってました…
リストボックス用に新たにクラス?を作成しないといけないんですね。
現在は補足欄のようになっていますが
教えて頂いた「リストボックスを作るためのインスタンス」を追加すれば大丈夫でしょうか?
さっそく試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAについて
-
PHPで[]の使い方について
-
PHP+MySQLでの配列のinsert文に...
-
VBA処理追加 こちらでご教示頂...
-
DBのデータを表示させたい
-
PostgreSQLに書き込み
-
段ごとに配色を変える方法
-
文字化けが解決できません。お...
-
VBA初心者です。
-
アラートでyes noを作りたいです。
-
空だと思ったのに・・・
-
PHP MySQL で updateができま...
-
ヒアドキュメントについて
-
pg_queryの結果を2回とりだす...
-
smartyのforeachの使い方?
-
MySQLでデータベースにデータin...
-
ResultSetインターフェイスでの...
-
実行時エラー3131 FROM 句の構...
-
JAVA SQLServerException 列名 ...
-
単純ですが、意外と穴?なデー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAについて
-
PHPで[]の使い方について
-
DBで検索結果に該当するデータ...
-
アラートでyes noを作りたいです。
-
dbに登録したデータをphpのプル...
-
phpでmysqlを使ってデータベー...
-
sortable ギブアップです…助け...
-
checkboxクリック時、SQLを実行...
-
PHPでMY SQLの連想配列をリンク...
-
チェックボックスによる複数の...
-
PHPでMySQLデータを呼び出し、w...
-
mysql_fetch_objectの書き方を...
-
SELECT結果から動的にコンボボ...
-
チェックボックスでチェックし...
-
VBA初心者です。
-
PHPについてなのですが未定義の...
-
文字化けが解決できません。お...
-
htmlとphpの分離
-
php テーブルが作成できない
-
検索結果をgoogleのように数件...
おすすめ情報