显示三元运算符的颜色
Showing color from ternary operator
我试图在我的三元运算符返回为真时显示一种颜色,如果返回为假则显示另一种颜色。操作员正在工作,但有一件事是关闭的。双引号内的代码显示而不是实际颜色本身。有人知道如何解决这个问题吗?
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
编辑!!! - 这是我的 $msg
变量出现的唯一一次
public function getLatestMessage ($userLoggedIn, $user2) {
$query = $this->con->prepare('SELECT body, user_to, opened, date FROM messages WHERE
user_to = ? AND user_from = ? OR user_to = ? AND user_from = ? ORDER BY id DESC LIMIT 1');
$query->bind_param("ssss", $userLoggedIn, $user2, $user2, $userLoggedIn);
$query->execute();
$query_result = $query->get_result();
$msg = ""; //to hold the message data
if ($row = $query_result->fetch_assoc()) { //don't need a while here because we've limited the query to one record
//Timeframe
$date_time_now = date("Y-m-d H:i:s");
$start_date = new DateTime($row['date']); //Time of post
$end_date = new DateTime($date_time_now); //Current time
$interval = $start_date->diff($end_date); //Difference between dates
if($interval->y >= 1) {
if($interval->y == 1)
$time_message = $interval->y . "yr"; //1 year ago
else
$time_message = $interval->y . "yrs"; //1+ year ago
}
else if ($interval-> m >= 1) {
if($interval->d == 0) {
$days = " ago";
}
else if($interval->d == 1) {
$days = $interval->d . "d";
}
else {
$days = $interval->d . "d";
}
if($interval->m == 1) {
$time_message = $interval->m . "month";
}
else {
$time_message = $interval->m . "months";
}
}
else if($interval->d >= 1) {
if($interval->d == 1) {
$time_message = "Yesterday";
}
else {
$time_message = $interval->d . "d ";
}
}
else if($interval->h >= 1) {
if($interval->h == 1) {
$time_message = $interval->h . "hr";
}
else {
$time_message = $interval->h . "hrs";
}
}
else if($interval->i >= 1) {
if($interval->i == 1) {
$time_message = $interval->i . "m";
}
else {
$time_message = $interval->i . "m";
}
}
else {
if($interval->s < 30) {
$time_message = "Just now";
}
else {
$time_message = $interval->s . " seconds ago";
}
}
$msg .= ($row['user_to'] == $userLoggedIn) ? "They said: " : "You said: ";
$msg .= ' ';
$msg .= $body = $row['body'];
$msg .= ' ';
$msg .= $time_message ;
$msg .= ' ';
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
}
return $msg;
}
您的代码完全按照您的指示进行操作:输出一个字符串“background-color: ...”。
浏览器如何知道您想要样式化具有该颜色的文本而不是将这些词呈现给用户?
您需要为浏览器指定这是您提供的样式。
而不是
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
试试这样的东西:
$color = $row['opened'] == '0' ? "#DDEDFF" : "#000000";
$msg .= "<span style='background-color:$color'>THE TEXT YOU WANT TO COLORIZE</span>";
完整示例
<?php
function getLatestMessage($opened) {
$color = $opened ? "#DDEDFF" : "#000000";
$msg = "<span style='background-color:$color'>THE TEXT YOU WANT TO COLORIZE</span>";
return $msg;
}
echo getLatestMessage(true);
echo getLatestMessage(false);
?>
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
编辑!!! - 这是我的 $msg
变量出现的唯一一次
public function getLatestMessage ($userLoggedIn, $user2) {
$query = $this->con->prepare('SELECT body, user_to, opened, date FROM messages WHERE
user_to = ? AND user_from = ? OR user_to = ? AND user_from = ? ORDER BY id DESC LIMIT 1');
$query->bind_param("ssss", $userLoggedIn, $user2, $user2, $userLoggedIn);
$query->execute();
$query_result = $query->get_result();
$msg = ""; //to hold the message data
if ($row = $query_result->fetch_assoc()) { //don't need a while here because we've limited the query to one record
//Timeframe
$date_time_now = date("Y-m-d H:i:s");
$start_date = new DateTime($row['date']); //Time of post
$end_date = new DateTime($date_time_now); //Current time
$interval = $start_date->diff($end_date); //Difference between dates
if($interval->y >= 1) {
if($interval->y == 1)
$time_message = $interval->y . "yr"; //1 year ago
else
$time_message = $interval->y . "yrs"; //1+ year ago
}
else if ($interval-> m >= 1) {
if($interval->d == 0) {
$days = " ago";
}
else if($interval->d == 1) {
$days = $interval->d . "d";
}
else {
$days = $interval->d . "d";
}
if($interval->m == 1) {
$time_message = $interval->m . "month";
}
else {
$time_message = $interval->m . "months";
}
}
else if($interval->d >= 1) {
if($interval->d == 1) {
$time_message = "Yesterday";
}
else {
$time_message = $interval->d . "d ";
}
}
else if($interval->h >= 1) {
if($interval->h == 1) {
$time_message = $interval->h . "hr";
}
else {
$time_message = $interval->h . "hrs";
}
}
else if($interval->i >= 1) {
if($interval->i == 1) {
$time_message = $interval->i . "m";
}
else {
$time_message = $interval->i . "m";
}
}
else {
if($interval->s < 30) {
$time_message = "Just now";
}
else {
$time_message = $interval->s . " seconds ago";
}
}
$msg .= ($row['user_to'] == $userLoggedIn) ? "They said: " : "You said: ";
$msg .= ' ';
$msg .= $body = $row['body'];
$msg .= ' ';
$msg .= $time_message ;
$msg .= ' ';
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
}
return $msg;
}
您的代码完全按照您的指示进行操作:输出一个字符串“background-color: ...”。
浏览器如何知道您想要样式化具有该颜色的文本而不是将这些词呈现给用户?
您需要为浏览器指定这是您提供的样式。
而不是
$msg .= ($row['opened'] == '0') ? "background-color: #DDEDFF;" : "background-color: #000000;";
试试这样的东西:
$color = $row['opened'] == '0' ? "#DDEDFF" : "#000000";
$msg .= "<span style='background-color:$color'>THE TEXT YOU WANT TO COLORIZE</span>";
完整示例
<?php
function getLatestMessage($opened) {
$color = $opened ? "#DDEDFF" : "#000000";
$msg = "<span style='background-color:$color'>THE TEXT YOU WANT TO COLORIZE</span>";
return $msg;
}
echo getLatestMessage(true);
echo getLatestMessage(false);
?>