1

急な問題が発生しました。フォーラムの別のタイトルの最後の投稿を返すコードがあります。表示文字数を制限して (... …) を入れたい。

while ループでネストされた if ステートメントに問題があります。

    $query  = "SELECT comment FROM Assembly WHERE title = 'Checkered' ORDER BY date DESC LIMIT 1";
$result = mysql_query($query);


while($row = mysql_fetch_assoc($message))
{

 if(strlen($message) > 10)
  {
   echo substr($message, 0, 10)."…";
  }
 else
  {
    echo    "Last Post:<br>";
    echo    strip_tags("{$row['comment']}");

  }
}

前もって感謝します :)

** はい css text-overflow:ellipsis; を編集します。よく働く!!みんなありがとう

***必要に応じて作業コードを編集します

   $query  = "SELECT comment FROM Assembly WHERE title = 'Checkered' ORDER BY date DESC LIMIT 1";
$result = mysql_query($query);

while($row = mysql_fetch_assoc($result))
{

 $comment = strip_tags($row['comment']);
 if(strlen($comment) > 30)
  {
   echo substr($comment, 0, 30)."...";
  }
 else
  {
    echo    "Last Post:<br>";
    echo    $comment;

  }
}
4

2 に答える 2

2

コードの問題は、不適切な名前の変数がいくつかあることです。mysql_query()によって返された結果リソースを に割り当て、(割り当ては表示されません)$resultという変数から行をフェッチしてから、値を操作するのではなく、文字列であるかのように扱うように切り替えます。 .$message$message$row

それにもかかわらず、DB から文字列をフェッチして省略記号を適用するだけで、全文は必要ない場合は、MySQL に作業を任せます。

SELECT IF(CHAR_LENGTH(`comment`) > 10, CONCAT(SUBSTRING(`comment`, 1, 10), '...'), `comment`) AS `comment`
FROM `Assembly`
WHERE `title` = 'Checkered'
ORDER BY `date` DESC
LIMIT 1

PHP の場合:

$query  = "
  SELECT IF(CHAR_LENGTH(`comment`) > 10, CONCAT(SUBSTRING(`comment`, 1, 10), '...'), `comment`) AS `comment`
  FROM `Assembly`
  WHERE `title` = 'Checkered'
  ORDER BY `date` DESC
  LIMIT 1
";
$result = mysql_query($query);

while ($row = mysql_fetch_assoc($result)) {
  echo    "Last Post:<br>";
  echo    htmlspecialchars($row['comment']);
}

編集

部分的な HTML タグを表示する壊れた文字列の可能性に関する @Jared のコメントに従って、これを回避する方法を次に示します。

$query  = "
  SELECT `comment`
  FROM `Assembly`
  WHERE `title` = 'Checkered'
  ORDER BY `date` DESC
  LIMIT 1
";
$result = mysql_query($query);
// Loop is pointless because of the LIMIT 1
$row = mysql_fetch_assoc($result);

$maxlen = 10; // Max length before trim
$comment = strip_tags($row['comment']);
if (strlen($comment) > $maxlen) {
  $comment = substr($comment, 0, $maxlen).'...';
}
$comment = htmlspecialchars($comment);

echo "Last Post:<br>";
echo $comment;
于 2012-06-30T18:59:49.623 に答える
1

あなたはその問題については言いませんが、私は手足を出して問題を推測するつもりです. これを試して:

while($row = mysql_fetch_assoc($message))
{

 $comment = strip_tags($row['comment']);
 if(strlen($coment) > 10)
  {
   echo substr($comment, 0, 10)."...";
  }
 else
  {
    echo    "Last Post:<br>";
    echo    $comment;

  }
}
于 2012-06-30T18:55:07.487 に答える