🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS

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

Q&A

解決済

2回答

651閲覧

phpで抽出した文字数により横幅のレイアウトが崩れ規則性のないレイアウトになってしまう。

Ms.yy

総合スコア83

CSS

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

0グッド

0クリップ

投稿2019/10/29 13:15

編集2019/10/30 12:58

前提・実現したいこと

下部のlist.phpの「echo " <td >",$row['name'],"</td>";」の部分で抽出された名前の文字数により均等配置のレイアウトが崩れてしまうので、こちらの部分だけ揃え均等にしたいのですが、どの様な施しをすればよろしいでしょうか?

わかるからいらっしゃいましたらご教授お願いいたします。

イメージ説明

list.php

<!-- ヘッダー 読み込み --> <?php session_start();?> <?php require"header.html"; ?> <?php echo "<table>"; echo "<th >マイナンバー  </th><th>ユーザー名</th><th>価格</th>"; $pdo=new PDO('mysql:host=localhost;dbname=shop7;charset=utf8', 'staff', 'password'); if(isset($_REQUEST["keyword"])){ $sql=$pdo->prepare("select *from product where name like?"); $sql->execute(["%".$_REQUEST["keyword"]."%"]); }else{ $sql=$pdo->prepare("select*from product"); $sql->execute([]); } foreach($sql->fetchAll() as $row){ $id=$row['id']; echo '<table class="table table-striped">'; echo "<tbody>"; echo "<tr>"; echo ' <th scope="row">aaa</th>'; echo " <td>$id </td>"; echo " <td >",$row['name'],"</td>"; //問題の部分 echo " <td >bbb</td>"; echo " <td >bbb</td>"; echo "</tr>"; echo "</tbody>"; echo "</table>"; } ?>

.table

.table { width: 100%; margin-bottom: 1rem; color: #212529; }

###試したこと
下から二番目のグレーの空白の様に上の行にも施したいが、規則性が確認できず。
止まっている状態です。

※「1」の後の商品名を入れる部分の文字数を長くするとそれに伴ってグレーの部分である空白の行もつられて増える。
イメージ説明

補足情報(FW/ツールのバージョンなど)

OS:mac

bootstrap4を使用しており読み込んでおります。

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

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

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

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

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

guest

回答2

0

ベストアンサー

phpでいきなり作るのではなく静的htmlでモック作って調整してからその形をphpで目指しましょう。
静的htmlができてない状態ではphpから想定通りのレイアウトは出せません。

投稿2019/10/29 13:51

m.ts10806

総合スコア80875

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

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

Ms.yy

2019/10/29 14:09

m.ts10806さん了解しました! 一旦htmlで出来がりをみてみます。
m.ts10806

2019/10/29 14:14

あと出力処理とDB接続含めたロジック部分が混ざっていると可読性も良くないですし、 ゴチャゴチャになって問題点の切り分けも難しくなります。 ロジックと出力を分けましょう。 もしかしたら伝わってないかもしれないので念のため。 PHPより先に完成図となるhtmlを固定データで組みましょう という意味です。 (モックとは「試作品」です。「こういうhtmlにする」という固定データを入れたレイアウト完成予想図です。)
Ms.yy

2019/10/29 14:22

なるほどです、 分けたほうがいいのですね。 DB接続の行だけは別途ファイルから読み込んでみます。 確かに言われてみればどこかの教材で別ファイルからDB系読み込んでいたので。
m.ts10806

2019/10/29 14:42

むしろ完全にわけてechoだけするくらいのイメージでも良いです。 https://qiita.com/tadsan/items/fb496e450fc27c8c4494#%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%81%A8%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E3%81%AF%E5%88%86%E3%81%91%E3%82%8D >貴様は自分で思ってるほど読みやすいコードは書けない。だからせめて、画面を描画する機能とそれ以外は明確に分けろ。たとへば「データベースの内容をHTMLのtableで表示する」プログラムが書きたいと思ったら、「データベースからデータを取り出して配列にする」部分と「配列をHTMLのtableで表示する」部分を分けるんだ。
Ms.yy

2019/10/29 14:44

なるほどです。 分けてechoだけの部分だけのファイルでいいということですね。 これからそこも取り入れさせていただきます、
m.ts10806

2019/10/29 14:48

ちょっと違いますが、「処理を書くエリアを明確に分けよう」という話です。 あまり「この情報が渡ってきている前提」でコードを書くのはよろしくありませんので。 まずは1ファイル内でも明確に分けるところから。
Ms.yy

2019/10/29 14:51

了解しました^^
Ms.yy

2019/10/30 10:21 編集

htmlに分けてみましたが、htmlでは上記問題の様な崩れはなく正常です。 何が原因か解決できず^^;
m.ts10806

2019/10/30 10:35

いえ、何よりも先にHTMLで正しいレイアウトを組んでください。分けるわけないは今回ほとんど関係ありません。phpコードの読みやすさのみの話です。
m.ts10806

2019/10/30 10:35

回答の1行目が全てです。 >phpでいきなり作るのではなく静的htmlでモック作って調整してからその形をphpで目指しましょう。
m.ts10806

2019/10/30 10:38 編集

要は静的htmlが組めていてphpで出力したときに出来てないなら必要なタグを出せてないとかそういうことです。 ブラウザ「ソースを表示」してきちんと見比べてください。 「その形をPHPで目指しましょう」とは「出力されたHTMLを同じ形にしましょう」という意味です。
Ms.yy

2019/10/30 12:51

デベロッパーツール はもちろん駆使してるのですが、どこに差があるのか分からずの状態です。^^;
m.ts10806

2019/10/30 12:55

デベロッパーツールは補完が入ります。私は「ソースを表示」と言っています。 あとはそのソース取得してテキストファイルにでも保管してDIFFツールを使ってください。WinMergeというツールなど、差分を確認するツールはたくさんあります。 プロでも目視で確認は行いません。
Ms.yy

2019/10/30 13:44

失礼しました。 ソースコードみてみます。 difiツールですか、前に言っていただいた文法チェックのことですかね? 初めて聞いたので調べてみます。
m.ts10806

2019/10/30 13:46

difiではなくDIFF。[difference]の略です。 あくまで2つのテキストやデータなどを比較するものです。 「差分比較ツール」というものです。 コメントに書いたWinMergeはその1つです。
Ms.yy

2019/10/30 13:52

失礼しましたDIFFですね。 比較ツールということですね。
m.ts10806

2019/10/30 14:03

はい。「想定通りの出力内容になっているか」を確認します。 結局ブラウザに出力した内容のみがレイアウトに影響するので、 同じ内容が出力されていれば問題ないわけです。 差分比較により「見た目は同じように見えて実はスペースが入っていた」とか 「半角と思ってたら全角だった」とか目視では簡単に気づけないところを自動的に抽出できます。
Ms.yy

2019/10/30 22:56

DIFF使ってみました。 PHPで出力された規則性がない文字数だとどうしてもそれ以降の行がズレてしまうので、同じ文字数のみ出力させてレイアウトがズレない様に施したいと思います。
Ms.yy

2019/10/30 22:57

ツール使って確かに差は一目で確認できたのですが分からずでした^^;
m.ts10806

2019/10/30 23:58

その「規則性のない文字数」が具体的にどんなものか気になっています。 phpで出力してレイアウトが崩れるという文字数で静的html組んでも崩れてないんですよね? 念のためそのDIFF結果のキャプチャと静的htmlのコードも追記いただけますか?
Ms.yy

2019/10/31 13:06

失礼しました、 規則性のない文字数とはこの質問の一番上の画像で貼らせて頂きました「松の実」の列がバラバラの文字数だとレイアウトが崩れてしまうことです。 それと、すみません今一度確認したところhtmlでも普通に崩れてました。
m.ts10806

2019/10/31 14:02

>今一度確認したところhtmlでも普通に崩れてました。 途中からですが「おそらくそうなんじゃないかなぁ」と思いながらコメントを見ていました。 あとは回答の通りです。モック部分を調整しましょう。 レイアウトだけの問題ならもしかしたらPHPのコードは対応不要かもしれません。
Ms.yy

2019/10/31 14:07

すみません、今一度確認します。 どうしても無理だと思ったら、昨日お伝えさせていただいた入力文字数に制限をかけてこのlist,phpに表示されるレイアウトを均等にします。
m.ts10806

2019/10/31 14:09 編集

まぁ、そもそもPHP側で出力文字を途中で切るとか、CSSなりJavaScriptなりで調整すれば良いと思います。[...]を表示させてもいいですし、CSSならoverflowかけてスクロール出すという手もあります。
guest

0

php

1<?php 2 3session_start(); 4 5$pdo=new PDO('mysql:host=localhost;dbname=shop7;charset=utf8', 'staff', 'password'); 6 7if(isset($_REQUEST["keyword"])){ 8 $sql=$pdo->prepare("select *from product where name like?"); 9 $sql->execute(["%".$_REQUEST["keyword"]."%"]); 10}else{ 11 $sql=$pdo->prepare("select * from product"); 12 $sql->execute([]); 13} 14$rows = $sql->fetchAll(); 15?> 16<?php require"header.html"; ?> 17<table class="table table-striped"> 18 <thead> 19 <tr> 20 <th></th> 21 <th >マイナンバー</th> 22 <th>ユーザー名</th> 23 <th>価格</th> 24 <th></th> 25 </tr> 26 </thead> 27 <tbody> 28 <?php foreach($rows as $row): ?> 29 <tr> 30 <th scope="row">aaa</th> 31 <td><?php echo $id ?></td> 32 <td><?php echo $row['name'] ?></td> 33 <td>bbb</td> 34 <td>bbb</td> 35 </tr> 36 <?php endforeach; ?> 37 </tbody> 38</table>

投稿2019/10/30 10:30

編集2019/10/30 10:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/10/30 10:33

ブラウザ上で Ctrl + U でHTMLソースを確認してください。 レイアウト以前に正しいHTMLが出力されていないはず
Ms.yy

2019/10/30 12:59

上記試したましが、おっしゃる通りエラーとなりました。
退会済みユーザー

退会済みユーザー

2019/10/30 15:41

おっしゃる通りって何?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問