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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

Q&A

解決済

1回答

2203閲覧

DBのテキスト型の中身がブラウザで表示されない

art_porokyu

総合スコア44

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

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

0グッド

0クリップ

投稿2019/02/06 13:11

編集2019/02/06 13:31

今webサービスを作成しているのですが、<textarea>内で入力した改行ありの文字列をDBのtext型にINSERTすると、改行されて挿入されるのですが、SELECTで取得しブラウザで表示させると、文字列すら表示されません。

DBで保存されている中身です。
改行されている「やっと会えた!嬉しい」となってる箇所が問題となっている部分です。

やっと会えた!嬉しい

確認のためvar_dumpで表示させると、改行の代わりに半角スペースとなって表示されます。
イメージ説明

これは一体何がおきているのでしょうか?

INSEARTされる前にnl2brも試したのですが、DB内で改行が<br />となって挿入され、同じようにブラウザでは表示されませんでした。

text型は半角スペースが入ってると非表示にするような制約があるのでしょうか?

入力の際の改行をDBに保存し、ブラウザで表示させるにはどのようにすればいいでしょうか?

INSERT時のコード

php

1 2if(!empty($_POST)){ 3 debug('POST送信があります。'); 4 5 // 変数に投稿内容を代入 6 $kind = $_POST['post']; 7 $subject = $_POST['subject']; 8 $message = $_POST['message']; 9 // 例外処理 10 try { 11 $dbh = dbConnect(); 12 debug('DBに接続します。'); 13 // SQL文作成 14 $sql = 'INSERT INTO messages (user_id,kind,subject,message,created_date) VALUES(:user_id,:kind,:subject,:message,:created_date)'; 15 $data = array(':user_id' => $_SESSION['user_id'], 16 ':kind' => $kind, 17 ':subject' => $subject, 18 ':message' => $message, 19 ':created_date' => date('Y-m-d H:i:s')); 20 // クエリ実行 21 // var_dump($data); 22 $stmt = queryPost($dbh, $sql, $data); 23 header("Location:mypage.php"); 24 25 } catch (PDOException $e) { 26 echo 'DB接続エラー:' . $e->getMessage(); 27 } 28} 29コード

取り出し時のコード

php

1$myMessages = getMyMessage($_SESSION['user_id'],$start); 2 3function getMyMessage($user_id,$start){ 4 debug('ユーザー情報を取得します。'); 5 //例外処理 6 try { 7 //DBへ接続 8 $dbh = dbConnect(); 9 // SQL文作成 10 $sql = $dbh->prepare('SELECT * FROM messages WHERE user_id = :user_id AND kind != "Comment" ORDER BY created_date DESC LIMIT :start,6'); 11 $sql->bindParam(':user_id', $user_id); 12 $sql->bindParam(':start', $start, PDO::PARAM_INT); 13 // クエリ実行 14 $sql->execute(); 15 // クエリ結果のデータを1レコード返却 16 if($sql){ 17 return $sql->fetchAll(PDO::FETCH_ASSOC); 18 } else { 19 return false; 20 } 21 } catch (Exception $e) { 22 error_log('エラー発生:' . $e->getMessage()); 23 } 24} 25 26コード

ブラウザで表示させるときのコード

php

1<?php foreach ($myMessages as $myMessage) { ?> 2 <div class="my-message-view"> 3 <p class="kind-user">種類:<?php echo $myMessage['kind']; ?></p> 4 <p class="subject-user">題名:<?php echo $myMessage['subject']; ?></p> 5 <script> 6 var windowSize = $(window).width(); 7 var num1 = 480; 8 if (windowSize > num1) { 9 document.write('<p class="message-user"><?php echo mb_substr($myMessage['message'],0,50); ?><a href="message-view.php?message_id=<?php echo $myMessage['message_id'];?>&kind=<?php echo $myMessage['kind'];?>">…続きを読む</a></p>'); 10 } else { 11 document.write('<p class="message-user"><?php echo mb_substr($myMessage['message'],0,20); ?><a href="message-view.php?message_id=<?php echo $myMessage['message_id'];?>&kind=<?php echo $myMessage['kind'];?>">…詳細</a></p>'); 12 } 13 </script> 14 <p><?php echo $myMessage['created_date']; ?></p> 15 </div> 16 <?php } ?>

document.write('<p class="message-user"><?php echo mb_substr($myMessage['message'],0,20); ?><a href="message-view.php?message_id=<?php echo $myMessage['message_id'];?>&kind=<?php echo
がtext型の部分です。

textareaのコードです。

html

1<label> 2 <p>件名</p> 3 <textarea class="text text1" type="text" name="subject" placeholder="件名" value=""></textarea> 4 </label> 5 <label> 6 <p>内容</p> 7 <textarea class="text text2" type="text" name="message" placeholder="内容" value=""></textarea> 8 </label> 9 10 <input id="button" class="btn-button submit" name="post" type="submit" value="Happy">

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

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

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

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

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

m.ts10806

2019/02/06 13:15 編集

で、実際のコードは何でしょうか。 >これは一体何がおきているのでしょうか? これだけを書かれてもご自身が直面している問題のコードがないと何のアドバイスもできません。
m.ts10806

2019/02/06 13:16

DBのテーブル定義(CREATE TABLE文)と実際に投入しようとしたデータもあわせてお願いしますね。「他人が状況を再現できる情報すべて」必要です。
m.ts10806

2019/02/06 13:17

「プログラムコード」と言ったほうが良かったでしょうか。
art_porokyu

2019/02/06 13:25

ただいま追加しました。 情報が不足しており申し訳ございません。
m.ts10806

2019/02/06 13:27

textareaはどこでしょうか。 なぜか途中document.write()で出力されてますが、document.write()は推奨されない機能のひとつですし、その中でPHPコードを書くのは非常につくりとしてはマズいですよ。
m.ts10806

2019/02/06 13:28

ブラウザ開発ツールのコンソールでエラー確認するとか、ブラウザ「ソースを表示」して本当に欲しい情報が表示されているか確認されたほうがいいですね。 JavaScriptで改行コードは書き方を気を付けないとエラーとなります。
art_porokyu

2019/02/06 13:32

textareaのコードを追加しました。 そうなのですか。 画面サイズによって表示する文字数を変えたかったのですが、推奨されないんですね。 今一度確認します。
art_porokyu

2019/02/06 13:37

「ソースを表示」でみると確かに、ソース上では表示されていました。 textareaにnl2brの設定も調べてみます。
art_porokyu

2019/02/06 14:07

ご指摘の通りJavaScriptのdocument.write()が原因でした。 表示方法を変えてみます。 ありがとうございました。
m.ts10806

2019/02/06 22:15

解決されたようで何よりです。 ブラウザに表示してphpのエラーもなく想定通り動作してないのであれば、それはクライアントサイドへの出力の問題が高いので、ブラウザでエラー確認、ソース確認してください。あと、できればコードははじめから出来る限り全てご提示ください。 提示しない、または切り取りすぎては的確なアドバイスにはつながらず問題解決にもつながりません。
guest

回答1

0

ベストアンサー

そのvar_dump()した結果はブラウザで確認されているのでしょうけど、
そのまま「ソースを表示」で見てください。
下記のようになっていませんか?

やっと 会えた! 嬉しい

※string()は除いています

半角スペースのように見えて、実際は改行コードがそのように見えているだけです。
本当に半角スペースであればstring(XX)の数字がもう少し小さいはずですね。要は文字のバイト数です。

nl2br()の仕様は確認されましたか?
改行コードをhtmlタグのbrに変換するだけです。
変換できたということはそのbrに変換された箇所は改行コードであったことがわかります。
ということは、そのままtextareaに設定すればいいだけです。
textareaにおける改行は改行タグではなく改行コードです。

つまり、実際は何も問題は起きていないはず。

「何も表示されない」のは取り出し方を間違えているのではないでしょうか。

いずれにしても他人が再現確認できる情報が全て提示されないからにはこれ以上のアドバイスは無理です。

投稿2019/02/06 13:24

編集2019/02/06 13:25
m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問