• ベストアンサー

WordPressの質問(q10217484)の続

dell_OKの回答

  • dell_OK
  • ベストアンサー率13% (744/5658)
回答No.21

質問➀ 両方実装可能です。 質問の意図がわかりませんが、もともとそのように書かれていますよね。 質問➁ 記載されたコードの1行目と2行目は画像表示の箇所ではありません。 3行目からが画像表示の処理です。 ---- div.appendChild(child); // div の末尾に child を追加 confirm_area.appendChild(div); // confirm_area の末尾に div を追加 div = document.createElement("div"); ---- 私のサンプルコードの作り方がかなりよくなかったようです。 質問➂のこととあわせて、画像表示の処理を書き直してみます。 汎用的な変数 div は使わないで、階層タグごとに個別の変数を作るようにしたので、どの要素がどの要素に追加されているかがわかりやすくなったと思います。 ----変更前 div = document.createElement("div"); for (const i in blobType) { if (blobType[i] != "") { child = null; if (blobType[i] == "img") { child = document.createElement("img"); } else if (blobType[i] == "video") { child = document.createElement("video"); child.setAttribute("controls", null); } else if (blobType[i] == "iframe") { child = document.createElement("iframe"); } if (child !== null) { child.style.maxHeight = "200px"; child.style.maxWidth = "200px"; child.src = blobUrl[i]; div.appendChild(child); } } } confirm_area.appendChild(div); // confirm_area の末尾に div を追加 ----変更後 const image_partial_div = document.createElement("div"); image_partial_div.classList.add("image-partial"); for (const i in blobType) { if (blobType[i] != "") { var changeImg = null; if (blobType[i] == "img") { changeImg = document.createElement("img"); } else if (blobType[i] == "video") { changeImg = document.createElement("video"); changeImg.setAttribute("controls", null); } else if (blobType[i] == "iframe") { changeImg = document.createElement("iframe"); } if (changeImg !== null) { changeImg.classList.add("changeImg"); changeImg.style.maxHeight = "200px"; changeImg.style.maxWidth = "200px"; changeImg.src = blobUrl[i]; const image_camera_icon_div = document.createElement("div"); image_camera_icon_div.classList.add("image-camera-icon"); image_camera_icon_div.appendChild(changeImg); image_partial_div.appendChild(image_camera_icon_div); } } } confirm_area.appendChild(image_partial_div); // confirm_area の末尾に div を追加 ---- 質問➃ 参考サイトに書かれているとおりです。  elm.classList.add("className"); つまり、  要素.classList.add("クラス"); 他のところも汎用的な変数 div を使わないで、個別の変数で要素を作った方がわかりやすくなっていいかも知れません。

php_learn
質問者

お礼

こちらが最新の質問になります。 confirm_area.appendChild(child); と div.appendChild(child); の違いも曖昧なのですが、 div.appendChild(child); は createElement() でHTML 要素を動的に生成する前のタグが div の時に使われるという認識で合ってますでしょうか? sample.phpを修正してみたのですが、382行目と396行目が何故 confirm_area.appendChild(child); になるのか分からず悩んでおります… 回答No.19の補足に書かせていただいた HTML に間違いがありました申し訳ありません。下記コードでステップフロー画像も確認画面で表示させたいのですが、非同期通信でFont Awesomeアイコンを使う事は難しいでしょうか? 画像にするべきか dell_ok さんにお聞きしたいです。 <div class="board_form_partial" id="js_board_form_partial"> <div class="questionHeader-partial"> <h2><span class="fa-stack"><i class="fa fa-circle fa-stack-2x w-circle"></i><i class="fa-stack-1x fa-inverse q">Q</i></span><span class="q-text">質問する</span></h2> <div class="other_step"> <img src="http://www.irasuto.cfbx.jp/wp-content/themes/sample_theme/images/step02.png" width="364" height="36" alt="STEP1 入力"> </div> </div> ※表示したいHTML <div id="confirm_area" style="display: block;"> <div class="board_form_partial" id="js_board_form_partial"> <div class="questionHeader-partial"> <h2><span class="fa-stack"><i class="fa fa-circle fa-stack-2x w-circle"></i><i class="fa-stack-1x fa-inverse q">Q</i></span><span class="q-text">質問する</span></h2> <div class="other_step"> <img src="http://www.irasuto.cfbx.jp/wp-content/themes/sample_theme/images/step02.png" width="364" height="36" alt="STEP1 入力"> </div> </div> <div class="title-partial parts"> <!-- title-partial + parts --> 質問タイトルテスト </div> <div class="stamp-partial"> <input type="radio" name="stamp" id="confirm_stamp" value="1"><label for="confirm_stamp"></label> </div> <div class="namae-partial parts"> <!-- title-partial + parts --> 名前テスト </div> <div class="body-partial parts"><!-- body-partial + parts --> コメントテスト </div> <div class="image-partial"> <div class="image-camera-icon"> <img src="http://www.irasuto.cfbx.jp/wp-content/uploads/camera.png" class="changeImg" style="height: 100px;"> </div> <div class="image-camera-icon"> <img src="http://www.irasuto.cfbx.jp/wp-content/uploads/camera.png" class="changeImg" style="height: 100px;"> </div> <div class="image-camera-icon"> <img src="http://www.irasuto.cfbx.jp/wp-content/uploads/camera.png" class="changeImg" style="height: 100px;"> </div> </div> <div class="post-button"><!-- ボタンを押せなくする --> <button type="button">入力画面へ戻る</button><button type="button" name="output">結果画面へ進む</button> </div> </div> </div> <!-- type、name、id、valueの順番 --> </div> </div> ※最新コード https://wandbox.org/permlink/5BfE7DyUtwCNWL2y

php_learn
質問者

補足

解説ありがとうございます。 質問➀についてコードを書いてみたのですが、classとidを同じ div で表示させたい場合 createElement は1つになると思うのですがどうすれば良いのでしょうか? // class const board_form_partial_div = document.createElement("div"); // classの追加 board_form_partial_div.classList.add("board_form_partial"); // id const js_board_form_partial_div = document.createElement('div'); // idの追加 js_board_form_partial_div.id = 'js_board_form_partial_div'; 質問➁ createElement() で HTML 要素を動的に生成して、appendChild() で追加する場所を指定、appendChild(child) で子要素として追加という役割で合ってますでしょうか? 質問③④についての修正ありがとうございます。コードを参考に階層タグごとに個別の変数にしてみました。 上記と別に質問があるのですが、child = document.createElement("p"); は必須でしょうか?以前こちらのコードを消した際に順番がおかしくなった気がするのですが、pタグが必要ない場合削除してもよいのでしょうか…? confirm_area.appendChild(child); // confirm_area の末尾に child を追加 についてのコードの意図が分からないのですが、pタグを追加する場合に必要なのでしょうか?

関連するQ&A

  • WordPressの質問(q10082875)の続

    質問掲示板を作成しているのですがSQLでページの遷移がうまくいきません。 何か不足しているコードがあるのでしょうか? ※該当コード echo '<input type="hidden" name="action" value="confirmationform">'; ※質問掲示板 https://wandbox.org/permlink/07uPWjVPmU6rwrVJ ※お問い合わせページ(遷移可能な元のコード) https://wandbox.org/permlink/8BiCLMilyhjCC2qp

    • ベストアンサー
    • PHP
  • WordPressの質問(q10165331)の続

    URLを連番にすべきかuuidにすべきか迷っているのですが、どちらが良いと思われますでしょうか? 一連番号のIDを避けるべきなのであればメジャーなサイトはすべてランダム文字列になっているはずではないかという意見とURLが予測しやすいと攻撃しやすいという意見があるようです。 IDを付ける際にBase58を使う、N 進数の文字列を使うなどuuid意外にも色んな方法があるようで、どうすべきか分かりません、アドバイスお願い致します。 $url = home_url('質問表示画面?'.$row->ID); ※idをautoincrementしない方が良い理由 https://zenn.dev/praha/articles/3c84e3818891c3 ※ユーザIDを連番にしてURLに使っても問題ない https://teratail.com/questions/364664 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11270700181 ※短縮URLの付け方 https://sousaku-memo.net/php-system/71 https://co.bsnws.net/article/256 ※htmlspecialcharsでIDをエスケープ http://lovee7.blog.fc2.com/blog-entry-34.html 質問一覧表示(single-que_list.php) 回答可能なページ(single-complete.php) <?php /* Template Name: que_list 固定ページ: 質問一覧画面 */ get_header(); $sql = 'SELECT * FROM sortable'; $query = $wpdb->prepare($sql); $rows = $wpdb->get_results($query); $upload_dir = wp_upload_dir(); foreach ($rows as $row) { $url = home_url('質問表示画面?'.$row->ID); $pattern = $upload_dir['basedir'].'/attach/'.$row->ID.'_0.*'; $files = glob($pattern); if (empty($files)) { $view = '<img src="ダミー画像パス">'; } else { $info = pathinfo($files[0]); $attach_url = $upload_dir['baseurl'].'/attach/'.$info['basename']; $ext = $info['extension']; switch ($ext) { case 'jpeg': case 'png': $view = '<img style="height: 50px;" src="'.$attach_url.'">'; break; case 'mp4': $view = '<video style="height: 50px;" src="'.$attach_url.'">'; break; case 'pdf': $view = '<iframe style="height: 50px;" src="'.$attach_url.'"></iframe>'; break; default: $view = ''; break; } } echo '<div><a href="'.$url.'">'.$row->unique_id; echo '<div>'.$row->namae.'</div>'; echo '<div>'.$view.'</div>'; echo '<div>'.mb_strimwidth($row->message, 0, 38, '・・・').'</div>'; echo '</a></div>'; } ?>

    • ベストアンサー
    • PHP
  • WordPressの質問(q10103578)の続

    下記のコードファイルにIDとスタンプを追加したいのですが、変数がセットされているか確認すべきかどうか知識不足もあり判断ができないためアドバイス頂いてから決めようと考えています。 宜しくお願い致します。 echo "ID:{$wpdb->insert_id}"; echo '<img class="selimg" src="'.$stamps[$stamp].'">'; ※現在のコード https://wandbox.org/permlink/rnlDqXMzNIOqimxW

    • ベストアンサー
    • PHP
  • WordPressの質問(q10155839)の続

    var_dump($row);で確認したところ登録結果画面と質問表示画面でNULLが表示されております。 コードをたどったところ質問表示画面の$sql = 'SELECT * FROM sortable WHERE URL=%s';で取得に失敗しているのではないかと考えたのですが、エラー原因は分かりますでしょうか? ※データベースにURLは格納されております。 https://imgur.com/5RmSq2Y.jpg ※該当コード $url = substr($_SERVER['REQUEST_URI'], -36); $sql = 'SELECT * FROM sortable WHERE URL=%s'; $query = $wpdb->prepare($sql, $url); $rows = $wpdb->get_results($query); var_dump($row); if (empty($rows)) { echo '質問がみつかりません'; exit; } ________________________________________________________________________ Q.テーブルにカラムを追加して保存するようにしてみてください。 A.アドバイスありがとうございます、下記コードでIPアドレスは保存できるようですが、入力画面、確認画面、表示画面どのタイミングで追加すべきでしょうか? $ip_address = $_SERVER["REMOTE_ADDR"]; //文字列形式から数値 に、数値から文字列形式に変換 $ip_long = ip2long($ip_address); -- ipアドレスのテーブル CREATE TABLE tbl_ips ( `ip` INT(10) NOT NULL ); $sql = "INSERT INTO tbl_ips ( ip ) VALUES ( INET_ATON( $ip ) );" Q.こんな感じになります。 メッセージの一部、については以前やったことがあると思いますので、$row->messageから取得するようにしてみてください。 A.アドバイスありがとうございます、メッセージの一部を取得というコードを考えてみました。1点質問があるのですが、<a href="'.$url.'"></a>を名前、画像、メッセージ全体に1つだけかけたい場合どのようなコードにすればよいのでしょうか? ---- <?php /* Template Name: 質問一覧画面 */ get_header(); $sql = 'SELECT * FROM sortable'; $query = $wpdb->prepare($sql); $rows = $wpdb->get_results($query); $upload_dir = wp_upload_dir(); foreach ($rows as $row) { $url = home_url('質問表示画面?'.$row->URL); $pattern = $upload_dir['basedir'].'/attach/'.$row->ID.'_0.*'; $files = glob($pattern); if (empty($files)) { $view = '<img src="ダミー画像パス">'; } else { $info = pathinfo($files[0]); $attach_url = $upload_dir['baseurl'].'/attach/'.$info['basename']; $ext = $info['extension']; switch ($ext) { case 'jpeg': case 'png': $view = '<img style="height: 50px;" src="'.$attach_url.'">'; break; case 'mp4': $view = '<video style="height: 50px;" src="'.$attach_url.'">'; break; case 'pdf': $view = '<iframe style="height: 50px;" src="'.$attach_url.'"></iframe>'; break; default: $view = ''; break; } } echo '<div><a href="'.$url.'">'.$row->namae.'</a></div>';    echo '<div>'.$view.'</div>'; echo '<div>'.mb_strimwidth($row->message, 0, 38, "・・・").'</div>'; } ---- 昨日教えて頂いた質問掲示板 登録結果画面のタイトルから飛べるページをリンク先として考えておりました。 http://www.irasuto.cfbx.jp/%e9%9b%91%e8%ab%87%e6%8e%b2%e7%a4%ba%e6%9d%bf%e3%80%80%e7%99%bb%e9%8c%b2%e7%b5%90%e6%9e%9c%e7%94%bb%e9%9d%a2/

    • ベストアンサー
    • PHP
  • WordPressの質問(q10124692)の続

    https://wandbox.org/permlink/xgiSHSJPTNlBrtmO $mime_type から $ext を決めて、テンポラリファイルを $data に読み込めばPDFと動画にも適応できるようです。間違えていたらアドバイスお願い致します。 以前dell_okさんにバイナリーデータがどうしても必要だとお伝えしていたのですが、finfo_open(finfoクラス)はmime_typeを返すのに、拡張子では判断せずバイナリを読み込んでチェックするのでバイナリーのチェックは要らないようですね、申し訳ありません。 名前とメッセージはエラーチェックやtokenがあるためdell_okさんから教えて頂いたコードを使うように考えています。 アップロードファイルについてはおそらくこちらのコードを使うか参考に組み替える必要があると考えております。 //mime_typeを返すのに、拡張子では判断せずバイナリを読み込んでチェック //ファイルの種類を表示するために宣言 $finfo = new finfo(FILEINFO_MIME_TYPE); $mime_type = $finfo->file($path); if (FILE_EXT_PNG == $ext && 'image/png' == $mime_type) { } elseif (in_array($ext, [FILE_EXT_JPEG, '.jpg']) && 'image/jpeg' == $mime_type) { $ext = FILE_EXT_JPEG; } else { // バイナリー文字列確認 $contents = file_get_contents($path); if (FILE_EXT_PDF == $ext && 'application/pdf' == $mime_type) { } elseif (FILE_EXT_MP4 == $ext && 'video/mp4' == $mime_type) { } else { $ext = null; } } return $ext; if (isset($ext)) { $_SESSION['attach_name'][$key] = md5($data) . $ext; $_SESSION['attach_data'][$key] = $data; $_SESSION['attach_mime'][$key] = $mime_type; } else $err[] = '画像形式は png, jpg のみです。'; } } }

    • ベストアンサー
    • PHP
  • WordPressの質問(q10145776)の続

    不正なトークンと表示されるため、single-regist.phpから下記のコードを削除したのですが、そちらは問題ないでしょうか? 送信時にトークンが必要だと思いますので、登録結果画面には必要ないのではないかと考えております。 //確認画面でデータが安全であることが確認された上で$_SESSIONを経由して画面遷移するが、登録結果画面へは不正アクセスできるから必須 if (empty($_SESSION['token']) || empty($_POST['token']) || $_SESSION['token'] !== $_POST['token']) { exit('不正トークン'); } ※single-regist.phpの11行目からトークンのコードになります https://wandbox.org/permlink/vCbUEZFcvQf2n1DK

    • ベストアンサー
    • PHP
  • WordPressの質問(q10113307)の続

    「保存するファイル名につかってはいけない」とのことなのですが、user_add_check.phpの<input type="hidden" name="image_name" value="<?= $user_image['name'] ?>">を使う事はアウトなようです。 自分なりに参考サイトを見て考えてみたのですが、$_SESSION['image']['data']が機能しているのか分からない状態です。 自信がないため2パターン考えてみました。 ※参考サイト https://qiita.com/ryouya3948/items/66294cb445663f2a9d95 user_add.php(要らないもの?) <h2>新規登録</h2> <form method="post" action="user_add_check.php" enctype="multipart/form-data"> <input type="text" name="name" class="user_name_input" placeholder="ユーザー名"> <input type="file" name="image" id="my_image" accept="image/*" multiple> <input class="btn btn-outline-info" type="button" onclick="history.back()" value="戻る"> <input class="btn btn-outline-dark" type="submit" value="登録"> </form> user_add_check.php(入力画面) <?php session_start(); //ファイルの内容を全て文字列に読み込む $_SESSION['userfile']['data'] = file_get_contents($_FILES['userfile']['tmp_name']); //アップロードされたファイルの種類を確認--送られてくる MIME タイプは信用できない--メッセージ全体を偽装できる $_SESSION['userfile']['type'] = exif_imagetype($_FILES['userfile']['tmp_name']); $_SESSION['userfile']['type'] = mime_content_type ($_FILES['userfile']['tmp_name'] ); //画像であるかどうかをexif_imagetype()を使って判別--画像のみ分ける必要があるのか不明 //$_SESSION['userfile']['type'] = exif_imagetype($_FILES['image']['tmp_name']); ?> <img src="image.php"> <form method="post" action="user_add_done.php"> <input type="hidden" name="name" value="<?= $user_name ?>"> <input type="hidden" name="image_name" value="<?= $user_image['name'] ?>"> <input type="button" class="btn btn-outline-info modal_close" onclick="history.back()" value="戻る"> <input type="submit" class="btn btn-outline-dark" value="OK"> </form> image.php(確認画面 バイナリーデータ確認) <?php $load_name = $ext session_start(); switch ($file_ext == $_SESSION['userfile']['type']) { case IMAGETYPE_JPEG: header('content-type: image/jpeg'); break; case IMAGETYPE_PNG: header('content-type: image/png'); break; case IMAGETYPE_GIF: header('content-type: image/gif'); break; case MIME_TYPE_PDF: header('content-type: application/pdf'); break; case MIME_TYPE_MP4: header('content-type: video/mp4'); break; } ?> <?php $load_name = $ext session_start(); switch ($file_ext == $_SESSION['userfile']['type']) { //jpegを表示 case IMAGETYPE_JPEG: header('content-type: image/jpeg'); echo $_SESSION['image']['data']; break; //pngを表示 case IMAGETYPE_PNG: header('content-type: image/png'); echo $_SESSION['image']['data']; break; //pdfを表示 case MIME_TYPE_PDF: header('content-type: application/pdf'); echo( substr( $_SESSION['image']['data'], 0, 5 ) ); break; //mp4を表示 case MIME_TYPE_MP4: header('content-type: video/mp4'); echo( substr( $_SESSION['image']['data'], 4, 4 ) ); break; } ?> ___________________________________________________________ image.php(確認画面 バイナリーデータ確認) <?php function get_file_ext($ext) { //MIMEタイプを取得 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_file($finfo, $_SESSION['image']['data']);/*$GET['image']['data']*/ if (FILE_EXT_PNG == $ext && 'image/png' == $mime_type) { } elseif (in_array($ext, [FILE_EXT_JPEG, '.jpg']) && 'image/jpeg' == $mime_type) { $ext = FILE_EXT_JPEG; } else { // バイナリー文字列確認 $contents = file_get_contents($_SESSION['image']['data']); if (FILE_EXT_PDF == $ext && 'application/pdf' == $mime_type && '%PDF-' == substr($contents, 0, 5)) { } elseif (FILE_EXT_MP4 == $ext && 'video/mp4' == $mime_type && 'ftyp' == substr($contents, 4, 4)) { } else { $ext = null; } } return $ext; } ?> user_add_done.php(表示画面 保存拡張子) $_SESSION['image']これを使う //文字列をファイルに書き込む関数 file_put_contents('./image/',$_SESSION['image']);

    • ベストアンサー
    • PHP
  • WordPressの質問(q10187929)の続

    blob を使いファイルアップロード機能を考えてみたのですが、画像と動画をどのように識別させるのかが分かりませんでした。 データ URI 形式で表示する方法と、Blob URL で表示する方法の2種類があるようです。 Data URI で動画を表示する方法は対応ブラウザの関係で避けた方が良いと思っております。 アドバイスお願い致します。 ※blob.php にコードを追加いたしました。 ※最新コード https://wandbox.org/permlink/PSXWslcYugaPqtjK ※参考サイト https://mixltd.jp/blog/how_to_make_thumbnail_from_input_video/ https://lab.syncer.jp/Web/JavaScript/Snippet/17/ https://qiita.com/azu369yu/items/8998e1e1536a5acfb7b3

    • ベストアンサー
    • PHP
  • WordPressの質問(q10245849)の続

    回答が遅れてしまい申し訳ありません、こちらが最新の質問になります。 質問入力画面に画像をアップロードした場合と動画をアップロードした場合で大きさが変わってしまうのですが、統一することは可能でしょうか? こちらは以前 dell_ok さんにお聞きした覚えがあり難しいとアドバイスを頂いた記憶があるのですが… 質問入力画面にファイルをアップロードする場合クリックして選択する方法だけでなくドラッグ&ドロップも追加することは可能でしょうか? ※最新コード https://wandbox.org/permlink/IM6IiiwxaS6eXwXY

    • 締切済み
    • PHP
  • WordPressの質問(q1023581)の続

    回答が遅くなってしまい申し訳ありません… 確認画面で分からないところがあり、アドバイスお願い致します。 ➀アップロードされたファイルを表示画面と同じ大きさ(height: 350px; width: 528px;)で表示したい場合どうすれば良いでしょうか? HTML を書き換えるコードの画像サイズを変更しても変化がないためどうすべきか悩んでおります。 ➁名前と画像アイコンの表示順を逆にしたいのですが、bbs_quest_input.php の452行目の divNamaePartialParts.appendChild(usericonImg); と 455行目の divNamaePartialParts.appendChild(child); コードで順番を変更させる方法が分からず教えて頂きたいです。 上記とは別の疑問になるのですが、質問文、質問タイトル、名前それぞれ残り1文字入力可能な状態で制限がかかってしまいます。 これは以内というコードになっているからでしょうか?何が原因となっているのか分からずアドバイス頂きたいです。 ※現在のコード https://wandbox.org/permlink/piR82q0rnnWvVphI ※確認ページ表示画面 https://imgur.com/AucGqLf.png ※質問掲示板 http://www.irasuto.cfbx.jp/%e8%b3%aa%e5%95%8f%e6%8e%b2%e7%a4%ba%e6%9d%bf/

    • ベストアンサー
    • PHP