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

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

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

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

9541閲覧

テーブルの中にテキストボックスを入れ、列の幅を調整する

ppglma

総合スコア14

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2017/06/13 06:35

###前提・実現したいこと
一行目に見出し、二行目に各データを編集するテキストボックスを入れたいと思っています。
htmlのテーブル内にテキストボックスを入れる際に、列の幅を
列の見出しの長さ > テキストボックスのvalueの文字列値の長さ
だった場合には列の幅を見出しの幅に合わせて、
列の見出しの長さ < テキストボックスのvalueの文字列値の長さ
だった場合には列の幅をテキストボックスのvalueの文字列値の長さに合わせたいと思っています。
ご教授いただけますと幸いです。。。

###該当のソースコード

lang

1foreach ($sql->fetchAll() as $row) { 2 echo '<table border="1" width:100%>'; 3 echo '<form action="from-search-detail.php" method="POST">'; 4 echo '<tr><th style="white-space:nowrap">受注NO</th><th>顧客名</th><th>ステータス</th><th>受注案件名</th><th>商品名</th> 5 <th>仕様</th><th>数量</th><th>納期</th><th>受注価格</th><th>受注日</th><th>担当者</th></tr>'; 6 echo '<tr><td style="position:relative"> 7 <input type="text name="orderFromNO" value="',$row['orderFromNO'],'"style="width:100%;box-sizing:border-box"> 8 </td>'; 9 echo '<td style="position:relative"> 10 <input type="text name="customer" value="',$row['customer'],'"style="width:100%; box-sizing:border-box"> 11 </td>'; 12 echo '<td style="position:relative"> 13 <input type="text name="status" value="',$row['status'],'"style="width:100%; box-sizing:border-box"> 14 </td>'; 15 echo '<td style="position:relative"> 16 <input type="text name="projects" value="',$row['projects'],'"style="width:100%; box-sizing:border-box"> 17 </td>'; 18 echo '<td style="position:relative"> 19 <input type="text name="product" value="',$row['product'],'"style="width:100%; box-sizing:border-box"> 20 </td>'; 21 echo '<td style="position:relative"> 22 <input type="text name="specification" value="',$row['specification'],'"style="width:100%; box-sizing:border-box"> 23 </td>'; 24 echo '<td style="position:relative"> 25 <input type="text name="num" value="',$row['num'],'"style="width:100%; box-sizing:border-box"> 26 </td>'; 27 echo '<td>' .$row['deliveryDate']. '</td>'; 28 echo '<td style="position:relative"> 29 <input type="text name="price" value="',$row['price'],'"style="width:100%; box-sizing:border-box"> 30 </td>'; 31 $from_price = $row['price']; 32 echo '<td>' .$row['fromDate']. '</td>'; 33 echo '<td style="position:relative"> 34 <input type="text name="leader" value="',$row['leader'],'"style="width:100%; box-sizing:border-box"> 35 </td>'; 36 echo '<td><input type="submit" name="update" value="更新"></td>'; 37 echo '</form>'; 38 echo '</tr>'; 39 } 40 echo '</table>';

###試したこと
nowrapやwidthなどいろいろ変えてみましたが思うようにいかず・・・

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

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

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

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

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

guest

回答1

0

ベストアンサー

ソースコード上に幾つか記述上にも問題がありそうです。
転記ミスだったらすみません。

  1. <table><th>foreach()の中に入ってる

つまりfetchAllで取得できる件数分だけ<table><th>は吐き出されるが</table>foreach()の外でひとつになり、開閉のタグの数が合わない
0. たぶんこの書き方だとPHPのエラーが出るはずecho ' ・・・ ',$row['orderFromNO'],'
echo ' ・・・ '.$row['orderFromNO'].' ですね。文字列結合は.で行います。
0. タグの記法がちょこちょこちょこ守られてないような
例えば:<input type="text name="price"<input type="text" name="price"
0. position:relative
ちょっと用途が分かりません。

文字列の長さにあわせるのは難しいも知れませんが、mb_strlen()で文字数は取得できるので多少の目安にはなりそうです。

ただ、文字列の長さにあわせるのはいいのですが、入力可能なので入力されて長くなったり短くなったりした場合はどうするの?というのもありますし、伸び縮みする入力フォームも変な感じがします。
単にthにヘッダのテキスト幅+αのmin-widthを入れておけばあとはそこそこいい感じにHTMLのほうで勝手に調整してくれるようには思います。

投稿2017/06/13 06:48

編集2017/06/13 06:58
m.ts10806

総合スコア80850

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

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

ppglma

2017/06/13 07:00

ご指摘ありがとうございます。 すみません、色々おかしいですね・・・ <?php ?>で囲まれている中の一部分だけを抜き出してコピペしてきたので、一応これでもエラーは出ていません。 タグの記法も見落としておりました。 position:relativeはググってみたら出てきた方法を色々試してた時に書いてました。。。 データベースから一件データを読み出し、それを編集して更新するという感じにしたかったため、データベースから読みだした情報の長さに列の幅を合わせたいということも書くべきでした。すみません。
m.ts10806

2017/06/14 02:27

1件なんですね。foreachなので複数件あるのかと思ってました。foreachの前でどのような処理を書かれているか分かりませんが、1件ならforeachじゃなくていいですね。 情報の長さに列の幅を合わせたいとのことであれば提案させていただいたmb_strlen()で文字数が取得されるので、それにあわせてinputにwidthを入れると良いです。全角半角入り混じることもあるのである程度の目安にしかなりませんけどね。 あと、mainの幅が分からないですが、必要に応じてthのmin-widthも入れてみてください。特に金額や個数などはある程度幅が保証された方が見栄えがいいでしょうしね。
ppglma

2017/06/14 07:54

ご教授ありがとうございます。 大変参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問