HTML+PHPのリストボックス表示について
現在HTML+PHPで勉強しながらアプリを作成しています。
MySQLからデータをよみ、その値からリストボックスを作成し表示させていますが、そのリストボックスがテーブル内に表示されず、位置がずれて表示されます。どうすればうまくテーブル内に表示されるのか教えてください。よろしくお願いします。(PHPというよりHTMLの質問かもしれませんが)
<?php
//データベース接続設定
$dbtype="mysql";
$sv="localhost";
$dbname="hogehoge";
$user="root";
$pass="abcdefg";
//データベースに接続
$dsn = "$dbtype:dbname=$dbname;host=$sv";
$conn = new PDO($dsn,$user,$pass);
//----------------------------------------
// ■ POST時
//----------------------------------------
if ($_SERVER["REQUEST_METHOD"]=="POST"){
// □ 新規追加
if (isset($_POST["submit_add"])){
$new_code = htmlspecialchars($_POST["new_code"], ENT_QUOTES); //追加コード
$new_kbncod = htmlspecialchars($_POST["new_kbncod"], ENT_QUOTES); //追加項目
$sql = "INSERT INTO kekka VALUES(null,'$new_code','$new_kbncod')";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
// □ 変更
if (isset($_POST["submit_upd"])){
$id = key($_POST["submit_upd"]); //押下したボタン番号を取得
//--------------------------------
// □ POSTされたデータを取得
//--------------------------------
$upd_kbncod = htmlspecialchars($_POST["kbn_code"][$id], ENT_QUOTES); //変更項目
$upd_code = htmlspecialchars($_POST["code"][$id], ENT_QUOTES); //変更コード
$sql = "UPDATE kekka SET code = $upd_code, kbn_code = $upd_kbncod WHERE id=$id";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
// □ 削除
if (isset($_POST["submit_del"])){
$id = key($_POST["submit_del"]); //押下したボタン番号を取得
//テーブルからデータを削除
$sql = "DELETE FROM kekka WHERE (id = $id)";
$stmt = $conn->prepare($sql);
$stmt->execute();
}
}
//=====================================================================
// ■ H T M L
//=====================================================================
?>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>テスト</title>
</head>
<body>
<h1>テスト中</h1>
<form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST">
<table border="1" cellspacing="0" cellpadding="3" width="100%" bordercolor="#666666">
<tr bgcolor="#eee8aa">
<td align="center"><font size="2">項目名(リスト)</font></td>
<td align="center"><font size="2">コード:数字4桁</font></td>
<td align="center"><font size="2">ボタン</font></td>
</tr>
<?php
//----------------------------------------
// □:テーブルからデータを読む
//----------------------------------------
$sql = "SELECT * FROM kekka ORDER BY id";
$stmt = $conn->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch()){
$id = $row["id"];
$code = $row["code"];
$kbncod = $row["kbn_code"];
echo "<td>".disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $kbncod, "kbn_code[$id]")."</td>";
echo "<td><input type=text name=code[$id] value=$code size=10></td>";
echo "<td><input type=submit name=submit_upd[$id] value='変更' size=4>";
echo "<input type=submit name=submit_del[$id] value='削除' size=4></td>";
echo "</tr>";
}
//追加リスト表示用に、変数の初期化を行う。(ゴミデータ除去)
$kbncod="";
$code="";
$new_kbncod="";
$new_code="";
?>
<tr>
<td><?php echo disp_list($conn,"code_hyo", "KBN_CODE", "KBN_NAME", $new_kbncod, "new_kbncod"); ?></td>
<td><input type="text" name="new_code" value="<?=$new_code ?>" size="15"></td>
<td><input type="submit" name="submit_add" value="追加" size="4"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
// パラメータ:接続/テーブル名/リスト値/表示値/選択値/リスト名称
function disp_list( $conn2,$table, $value, $text,$selected_value, $m_name) {
// DBから項目情報を取り出す
$sql2 = "SELECT * FROM " . $table . " ORDER BY " . $value;
$stmt2 = $conn2->prepare($sql2);
$stmt2->execute();
// 取り出した項目情報をプルダウンリストに表示する
echo "<select name=\"" . $m_name . "\">";
while ($row2 = $stmt2->fetch()){
echo "<option ";
if ($selected_value == $row2[$value]) {
echo " selected ";
}
echo " value=\"".$row2[$value]."\">";
echo $row2[$text]."</option>";
}
echo "</select>";
}
?>
補足
回答ありがとうございます。 ajaxについては検討してみたのですが、少し大がかりになり過ぎる用だったので保留にしています。 Ajaxしか方法はないものでしょうか。。 FormタグにはいくつもInput要素があります。 その中で指定したアクションであればアンカーに飛ばす。といったことは可能でしょうか。 Form中の1つのInputBoxのOnchangeのみアンカーへ飛ばしたいと考えています。 すみませんがよろしくお願いいたします。