WordPressの質問(q10306916)の続
表示するコンテンツに関するコードを書いているのですが、回答の日時を表示するところで悩んでおります。
PHP のみで書く方法と SQL の検索条件から出力する方法の2つがあるようですが、質問に対する回答の日時を取得したい場合、後者しか使えないのではないかと思いました。
ただ欠点があるようで、表示上の意味はあってもデータとしての意味が損なわれるとアドバイス頂いております。
現在日付から引いて、その結果をマッピングして漏れたらただの日付を表示するのが最適ではないかと教えて頂いたのですが、具体的なコードの書き方が分からず SQL の検索条件から出力する方法を調べながら書いてみました。
アドバイスお願い致します。
※自作コード
/* 回答タイトルとスタンプ画像なし(回答掲示板) */
function bbs_answer_confirm()
{
// 新しいセッションを開始、あるいは既存のセッションを再開する
session_start();
// 何もせず終わる処理
if (empty($_SESSION['text'])) {
exit;
}
// $wpdbでSQLを実行
global $wpdb;
/* ここから(1) */
$unique_id = $_SESSION['unique_id'];
$sql = 'SELECT * FROM sortable WHERE unique_id = %s';
$query = $wpdb->prepare($sql, $unique_id);
$rows = $wpdb->get_results($query);
// rows[0]は配列の最初の要素にアクセス
$parent_id = $rows[0]->id;
/* ここまで(1) */
// 例えば%sのところに数値を入れるとエラーになる
// どのようなデータをどのテーブルに登録するか
$sql = 'INSERT INTO sortable(parent_id,ts,text,name,ip) VALUES(%d,%d,%s,%s,%s)';/* (2) */
// セッション変数に登録
$text = $_SESSION['text'];
$name = $_SESSION['name'];
//$title = $_SESSION['title'];
//$stamp = $_SESSION['stamp'];
$result = [];
$result['ts'] = $ts;
// 回答の日時を取得する
$diff= time()-strtotime($ts);
// ipアドレスを取得する
$ip = $_SERVER['REMOTE_ADDR'];
$query = $wpdb->prepare($sql, $parent_id, $ts, $text, $name, $ip);/* (2) */
// プリペアードステートメントを用意してから、下記のようにresultsで値を取得
$query_result = $wpdb->query($query);
// $result = [];
// $result['ts'] = $ts;
print gmdate('h:i:s',$diff);
// 条件式が成り立った場合処理を実行
if (
false === $query_result
) {
$result['error'] = '登録できませんでした' . $wpdb->last_error;
// 条件式が成り立たなければ処理を実行
} else { // どのテーブルの何をどう更新するか
// カラム名 unique_id の質問UUID を一度そのデータを読み込んで取得する
$sql = 'SELECT unique_id FROM sortable WHERE id = %d';
$query = $wpdb->prepare($sql, $wpdb->insert_id);
$rows = $wpdb->get_results($query);
$unique_id = $rows[0]->unique_id;
// アップロードディレクトリ(パス名)を取得する
$upload_dir = wp_upload_dir();
// 『filenames』を記述して配列名を記述し、それに『[]』を代入すればそれは配列として扱われます
$filenames = [];
foreach ($_SESSION['attach']['tmp_name'] as $i => $tmp_name) {
if (empty($tmp_name)) {
$filenames[$i] = '';
} else {
$type = explode('/', $_SESSION['attach']['type'][$i]);
$ext = $type[1];
if (3 == $i) { // 比較した時に3+1以上なら
$n = 'usericon';
} else {
$n = $i + 1;
}
$filenames[$i] = "{$unique_id}_{$n}.{$ext}";
$attach_path = $upload_dir['basedir'] . '/attach/' . $filenames[$i];
// 文字列をファイルに書き込む、文字列データを書き込むファイル名を指定
file_put_contents($attach_path, $_SESSION['attach']['data'][$i]);
}
}
$sql = 'UPDATE sortable SET attach1=%s,attach2=%s,attach3=%s,usericon=%s WHERE id=%d';
$query = $wpdb->prepare($sql, $filenames[0], $filenames[1], $filenames[2], $filenames[3], $wpdb->insert_id);
$wpdb->query($query);
$result['error'] = '';
}
header('Content-type: application/json; charset=UTF-8');
echo json_encode($result);
exit;
}
add_action('wp_ajax_bbs_answer_confirm', 'bbs_answer_confirm');
add_action('wp_ajax_nopriv_bbs_answer_confirm', 'bbs_answer_confirm');
お礼
こちらが最新の質問になります。 dell_ok さんが言われたように .appendChild(child) に問題があったようです申し訳ありません。 child = document.createElement("p"); で定義していないからエラーが起きたんですね。 アイコン画像の HTML について再度考えたところ名前やコメントと違い文字を出力する必要がなく上記のコードはコメントアウトしております。 その下のコードについて質問があるのですが、divUserIcon.appendChild(usericonImg); の usericonImg はどのように定義すべきでしょうか? 質問画面ではアップロードファイルの後にアイコン画像のコードが書かれており2つの処理をまとめておくことが出来たのですが、回答画面では順番が逆になっているため悩んでおります。 先に var usericonImg; のみ宣言しておくということを思いついたのですが dell_ok さんにお聞きしておきたいです。 ※最新コード https://github.com/i6Grja3R/sample_theme.git ※質問回答画面 https://www.irasuto.cfbx.jp/%e8%b3%aa%e5%95%8f%e5%9b%9e%e7%ad%94%e7%94%bb%e9%9d%a2/
補足
Q.エラーの個所はここです。 const comment_area = document.createElement("div"); // const image_area の下から移動 const divUserArea = document.createElement("div"); // div (子)を生成 divUserArea.classList.add("user-area"); // classの追加 ここ divUserArea.appendChild(child); // div (子要素) の末尾に child を追加 comment_area.appendChild(divUserArea); // comment_area (親要素) の末尾に div を追加 この時点で child の準備がされていません。 A.回答ありがとうございます、回答No.22についての補足が1つずれてしまいました申し訳ありません。 .appendChild(child) についてエラー原因ではないかと少し考えていたのですが、上記のコードではなく別の箇所になります。 HTML の書き換えに関する .appendChild(child) では var child; と関数宣言を行っているため問題なさそうです。 appendChild() でコードを調べると HTML の書き換えに関するコード以外で viewer[i].appendChild(child); というコードがあり、こちらの child が空ということではないかと思うのですが、どうすればよいでしょうか? ____________________________________________ dell_ok さんがおっしゃるように共通化のことを考えて変数名は変更しない形で another_que_answer.php に別途修正したコードを書いてみました。 確認よろしくお願い致します。 ※最新コード https://github.com/i6Grja3R/sample_theme.git