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

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

ただいまの
回答率

90.22%

掲示板作成 日付時刻 降順 while文がうまく書けない・・・

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,545

a-_.

score 131

PHPで掲示板を作っていて、①日付と時刻、②投稿者と投稿内容を古い投稿から順に下へ移動するよう降順
となるようにしたいんです

ですが、下記エラー文が表示され、降順のコードがおかしいと指摘されます
arsortってどのように定義してコードを書けばいいのでしょう
Warning: arsort() expects parameter 1 to be array, string given in C:\~XXX.php on line 22
(名前)
(内容) &date

あと、日付と時刻のdate(デート)はdata(データ)じゃなくていいんでしょうか
また、$dateは既にtimestampとしてデータベースにテーブルを作成してるんですが、今のコードで取得できてるんでしょうか

<?php
    header('Content-type: text/html; charset=UTF-8');
?>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body>
    <form method="post" action="XXX.php">
    名前:<input type="text" name="name">
    内容:<textarea name="comment" row="20" cols="20"></textarea>
    <input type="submit" value="投稿">
    </form>
</body>

<?php
    $f1 = $_POST['name'];
    $f2 = $_POST['comment'];
    $f1 = htmlspecialchars($f1, ENT_QUOTES, 'UTF-8');
    $f2 = htmlspecialchars($f2, ENT_QUOTES, 'UTF-8');

    $date = date("y年m月d日 h時i分s秒");

    $arsort = arsort($f2, $date);

    echo '', $f1, '<br>', PHP_EOL;
    echo '', $f2, '', PHP_EOL;
    echo ' &date';

$dsn = 'mysql:dbname=XXX;host=XXX;charset=utf8mb4';
$user = 'XXX';
$password = 'XXX';
    try {
        $dbh = new PDO($dsn, $user, $password);
    } catch (PDOException $e){
        die('Connect Error: ' . $e->getCode());
    }

$sql = 'INSERT INTO XXX (name, comment) VALUES (?, ?, CURDATE())';
    $sth = $dbh->prepare($sql);
    $sth->bindvalue(1, $_POST['comment'], PDO::PARAM_STR);
    $sth->bindvalue(2, $_POST['name'], PDO::PARAM_INT);
    $sth->execute();

$dbh = null;

?>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+3

新しい順に表示したいということですよね?
yambejpさんがおっしゃるように、投稿データを取得するときに ORDER BY を使うようにします。
PHPでソート処理をする必要はありません。
また現状、投稿データを取得する処理がないように見えます。
まず順番はともかく、そこの実装を先にした方が良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/08 16:51

    ご回答ありがとうございます

    >投稿データを取得する処理がない
    何をどうすればよいのでしょう

    ORDER BYとはなんですか

    キャンセル

  • 2016/07/08 16:58

    SQLでデータを取得するにはSELECTを使います。
    そのときのオプションでソート条件を指定できます。
    それがORDER BYです。
    調べました?調べてないですよね?

    サンプル
    SELECT * FROM XXX ORDER BY 登録日時 DESC

    キャンセル

+3

イマイチ状況がわからないのですが、データのソートはPHPでやるよりSQLでやったほうが
効率的です。
ORDER BY カラム DESC
でデータを取得してください

ちなみに

INSERT INTO kadai1 (name, comment) VALUES (?, ?, CURDATE())

カラムを2つしか指定していないのに、データを3つ投入することはできません

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/08 16:09

    ご回答ありがとうございます

    すいませんが文中のテーブル名の部分を消していただけますか

    あと本題ですが、データベースにはname, commentとtimestampのカラムも作成しています
    >ORDER BY カラム DESC
    この書き方は初見で、正直今回挙げている書き方しか知らないので、すみませんがこのコードからの解説をお願いできませんか

    キャンセル

+2

arsortを全然理解されていないと思います。
まず$f2の内容が連想配列どころか配列ですらなくstringです。arsortは連想配列のキーを元にソートする関数です。第一引数が連想配列、第二引数はSORT_REGULARなどの定数であり、日付文字列を渡してもエラーになるだけです。
http://php.net/manual/ja/function.arsort.php

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

Warning: arsort() expects parameter 1 to be array, string given in C:\~XXX.php on line 22

この警告文から、arsort()の最初の引数は配列でないと駄目なのに、文字列が入ってますよ、と出てますね。 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る