PDA

View Full Version : تغییر رنگ به سبز در صورت افزایش و تغییر رنگ به قرمز در صورت کاهش



tazeha
جمعه 26 تیر 1394, 19:23 عصر
سلام.

چطوری می شه شرط نوشت که اعدادی که از دیتابیس استخراج می شه در صورتی که با بیشتر از مقدار قبلی باشه رنگش سبز بشه و اگه کمتر بشه قرمز شه...

به یاهو فاینسن برید اعداد سهام ها رو نگاه کنید.

http://finance.yahoo.com/corporate-news/

Master_Power
جمعه 26 تیر 1394, 19:30 عصر
لطفا واضحتر بگید

منظورتون بیشتر از چقدره ؟

اون بیشتر یا کمتره از چی گرفته میشه ؟

tazeha
جمعه 26 تیر 1394, 20:05 عصر
یه مثال می زنم.

هر لحظه با curl می ره به سایت مورد نظر و قیمت طلا رو استخراج می کنه و دو دیتابیس ذخیره می شه و بعد دوباره قیمت جدید طلا از دیتابیس گرفته می شه . با قیمت قبلی مقایسه می شه اگه بیشتر از قیمت قبلیش باشه قیمت جدید به رنگ سبز چاپ بشه و اگر کمتر از قیمت قبلیش باشه به رنگ قرمز چاپ بشه.

mysql


id | name |price |time
20:15 | 2000 | tala | یک
20:16 | 2010 | tala | دو
20:17 | 2020 | tala | سه

تو جدول بالا آخرین قیمت 2020 ... با قبلی یعنی 2010 مقایسه بشه اگر بیشتر باشه سبز با رنگ سبز چاپ بشه و اگه کمتر باشه با رنگ قرمز چاپ بشه. که در اینجا 2020 بیشتر از مقدار قبلیشه پس باید با رنگ سبز چاپ بشه.

این الگوریتم رو نوشتم فقط تو اجراش مشکله که چطوری شرط مقایسه ای بنویسم.

البته تو ذهنم اینه که مقدار فیلد پرایس با ای دی جدید با مقدار فیلد پرایس قبلیش مقایسه بشه . یعنی id 3 با id 2

Unique
جمعه 26 تیر 1394, 20:30 عصر
خوب شما که خودتون دارین جواب خودتون را میدین !!

فرض بر اینکه curl میزنیم و قیمت آخر هم که از سایت طرف میگیرین 2015 هستش و میریزیم توی متغیر new_price$ ، حالا یک select از آخرین رکورد میگیریم :

select price from tala_table order by id desc limit 1

مقدار فیلد price را میریزیم توی متغیر old_price$ و نتیجه را echo میکینم :

$sub = $new_price - $old_price
echo "<span style='color:".(if ($sub == 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>"

tazeha
شنبه 27 تیر 1394, 11:29 صبح
تشکر مشکل حل شده فقط شرططی که نوشتید خطا می ده.


<span style='color:"if ($sub === 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>

syntax error, unexpected 'if' (T_IF), expecting ',' or ';'

Master_Power
شنبه 27 تیر 1394, 11:51 صبح
سلام

این کد را باید توی <?php ?> بنویسید

البته با syntax خاص

شما کد کامل شدتون را اینجا بزارید تا خطاهای syntax را براتون رفع کنم

Unique
شنبه 27 تیر 1394, 12:48 عصر
تشکر مشکل حل شده فقط شرططی که نوشتید خطا می ده.

کد را شما اشتباه نوشتین و حتما باید بگذارین توی تگ php ، من کد را همینطوری دستی نوشتم :

<?php
$sub = $new_price - $old_price;
echo "<span style='color:".(if ($sub == 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>";
?>

tazeha
شنبه 27 تیر 1394, 23:29 عصر
نه کل کدها درون php هست..

اینی که نوشتم

$old_price = mysql_query('SELECT price FROM `uds` order by id desc limit 1');


$row = mysql_fetch_array($old_price) or die (mysql_error());



$old_price = $row ['price'];echo "<span style='color:".(if ($sub == 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>";
//echo "<span style='color:"if ($sub === 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>"; mysql_close($con);

Unique
یک شنبه 28 تیر 1394, 00:30 صبح
چرا echo تو echo کردین ؟ اینطوری بنویسین که خوندن و سر هم کردنش راحت بشه :


$color = ($sub > 0) ? "green" : "red";
if ($sub == 0) $color = "black";
echo "<span style='color:$color'>$new_price</span>";

tazeha
یک شنبه 28 تیر 1394, 01:28 صبح
خود شما اینطوری نوشته بودید.

$sub = $new_price - $old_priceecho "<span style='color:".(if ($sub == 0) echo "black" else echo $sub > 0 ? "green" : "red")."'>$new_price</span>"

رنگ تغییر نمی کنه حتی وقتی میرم تو جدول مقدار مثلا 2 می کنم تا مقدار جدید کم بشه و نشه صفر ولی بازم هم می شه صفر

کدی که نوشتم به این صورته ،

foreach( $xpath->query("/html/body/div[4]/div/div[3]/div[2]/div/div/div[2]/div[1]/span[1]/span")as $node ) $new_price = $node->textContent; $sql = "INSERT INTO `uds`(price) VALUES ('".$new_price."'); " ; mysql_query($sql); }
$old_price = mysql_query('SELECT price FROM uds ORDER BY id DESC LIMIT 1;');
$row = mysql_fetch_array($old_price) or die (mysql_error());
$old_price = $row ['price'];$sub = $new_price - $old_price;
$color = ($sub > 0) ? "green" : "red";if ($sub == 0) $color = "blue";echo "<span style='color:$color'>$new_price</span>";

Keramatifar
یک شنبه 28 تیر 1394, 05:11 صبح
دوست عزیز
مشکل شما دقیقا یکی از مثال های من در کلاس های PHP (http://www.barnamenevis.pro/academy/course/php/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D8%A7%D9%85%D9%84-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%A8%D8%A7-PHP-(%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C)) است.
در این مثال برای اتصال به دیتابیس از PDO استفاده شده است و در صورتیکه فیلد Amount بزرگتر از قبلی باشد متغیر $color سبز، کوچکتر قرمز و مساوی به رنگ سیاده خواهد بود
البته یک خطا در این کد بوجود می آید که مربوط به اولین بار اجرای حلقه FOR است و به دلیل درگیر شدن شما با کد و درک بهتر، رفع اون رو بعهده خودتون می ذارم

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Keramatifar PHP Examples- PDO and Alternate Grid Rows</title>
</head>
<body>
<table border="1" width="50%">
<tr>
<td>Date</td>
<td>Amont</td>
</tr>
<?php

$params =null; //or any params
$mrkfPDO = new PDO('mysql:host=localhost;dbname=YOUR_DB_NAME', 'DB_USER', 'DB_PASS',
array(
PDO::ATTR_PERSISTENT => true,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
$mrkfStatement = $mrkfPDO->prepare("SELECT Date, Amount FROM payments limit 0,100");
$mrkfStatement->execute($params);
$pays = $mrkfStatement->fetchAll(PDO::FETCH_ASSOC);

for($i=0; $i<=count($pays); $i++)
{

$color = 'black';

if($pays[$i]['Amount'] < $pays[($i-1)]['Amount'])
$color="red";
elseif($pays[$i]['Amount'] > $pays[($i-1)]['Amount'])
$color = 'green';
else
$color = 'black';

echo "<tr>
<td>" . $pays[$i]['Date'] . "</td>
<td>
<span style='color: $color'>"
.$pays[$i]['Amount'].
"</span>
</td>
</tr>";
}

?>
</table>
</body>
</html>

tazeha
یک شنبه 28 تیر 1394, 08:26 صبح
تشکر مشکل اون حلقه هم حل شد. خطای Undefined offset: -1 میداد، این به این خاطر بود که تو حلقه از صفر شروع می شه و تا میرسه $pays[($i-1) کمتر میشه دیگه و بعد خطا می ده. من این $i=0 به $i=1 تغییر دادم.

تشکر فقط سوال:

چیزی که نوشتید برای آرشیو قیمت ها خوبه. الان من بخوام مثلا فقط قیمت دلار یک عدد نمایش داده بشه و نه همه اعداد بدون حلقه هم باید نوشت چطوری می شه.

مثلا : دلار : 3200 تومان // و بعد فقط رنگش سبز قرمز بشه.

Unique
یک شنبه 28 تیر 1394, 22:33 عصر
راستش من فکر کردم شما دارین توی html کد میزنین نه اینکه کلا توی بلاک php بنویسین ، نمیدونم چی کار نمیکنه اما این کد را من الان تست کردم و متن را به درستی سبز میکنه. اگه با اعداد بازی کنین همه را به درستی انجام میده :


$new_price = 1020;
$old_price = 1015;

$sub = $new_price - $old_price;
$color = ($sub > 0) ? "green" : "red";
if ($sub == 0) $color = "black";
echo "<span style='color:$color'>$new_price</span>";