Отображение результатов массива из API внутри таблицы на основе сохраненных значений базы данных.

  • Автор темы manchelsi
  • 30
  • Обновлено
  • 13, May 2024
  • #1
Не знаю, как именно задать этот вопрос, поэтому попытаюсь объяснить.

Я пытаюсь отобразить данные о сумме дивидендов для каждой акции (символ акции, хранящийся в базе данных) внутри таблицы.

Эти данные о дивидендах поступают из API IEX, и хотя я могу нормально выводить результаты и просто получать их в списке, например: FB: 0 GOOGL: 0 AAPL: 2.52 Я не знаю, как отобразить их внутри строку таблицы для каждой из этих акций.

Я просто получаю AAPL: 2,52 для всех строк.

Таким образом, по сути, создается впечатление, что в какой-то момент он не знает, какие данные получить по какой акции, и просто печатает AAPL для всех трех.

Это код (некоторые из них скрыты, чтобы сделать его короче):
 

<?php

// Initialising variables to store extracted information

$name =[];

$symbol =[];

$open =[];

$close =[];

$high =[];

$low =[];

$lastprice =[];

$y =0;

$z ='';

$key ="93dcc722279c3a7577f248b09ef6167f";

$memberid = $_SESSION['memberID'];

$sql ="SELECT * FROM portfolio WHERE memberID = $memberid";

$result = mysqli_query($conn, $sql);

// Check if databse is emptyif(mysqli_num_rows($result)>0){while($row = mysqli_fetch_assoc($result)){

$sym[$y]= $row["stocks_symbol"];

$pri[$y]= $row["price"];

$vol[$y]= $row["quantity"];

$id[$y]= $row["memberid"];

$y +=1;}}// If database emptyelse{?><h1><center><?php

echo "Portfolio Empty";?></h1></center><?php

die();}

mysqli_close($conn);

// Adding all stock names in one variable to enable API callfor($a=0;$a<$y;$a++){

$z = $z.$sym[$a].',';}

$z = rtrim($z,",");

// API call

$contents = file_get_contents("[URL='https://lumtu.com/yti/PQZZQPVJodHRwOi8vbWFya2V0ZGF0YS53ZWJzb2wuYmFyY2hhcnQuY29tL2dldFF1b3RlLmpzb24_a2V5PSUyNGtleSZzeW1ib2xzPSUyNHombW9kWbm']http://marketdata.websol.barchart.com/getQuote.json?key=$key&symbols=$z&mode=R[/URL]");

$contents = json_decode($contents,true);

$div = file_get_contents("[URL='https://lumtu.com/yti/dQYYQdGVodHRwczovL2FwaS5pZXh0cmFkaW5nLmNvbS8xLjAvc3RvY2svbWFya2V0L2JhdGNoP3N5bWJvbHM9JTI0eiZ0eXBlcz1zdGF0cyZmaWx0ZXI9ZGl2aWRlbmRSmbl']https://api.iextrading.com/1.0/stock/market/batch?symbols=$z&types=stats&filter=dividendRate[/URL]");

$div = json_decode($div,TRUE);foreach($div as $divi => $value){

echo '<br/>'. $divi.' : '. $value['stats']['dividendRate'];}

// Check successfull API callif($contents["status"]["code"]==200){foreach($contents['results']as $result){

array_push($name,$result['name']);

array_push($symbol,$result['symbol']);

array_push($open,$result['open']);

array_push($close,$result['close']);

array_push($high,$result['high']);

array_push($low,$result['low']);

array_push($lastprice,$result['lastPrice']);}

}// If API call unsuccessfulelse{?><h1><center>"Error retreiving data.



Please try again later."</center></h1><?phpdie();}?><!-- Generating Output in tabular format --><tableclass='table table-responsive'><trclass='head warning'><td>Name</td><td>Symbol</td><td>Open</td><td>Close</td><td>High</td><td>Low</td><td>Last Price</td><td>Price Bought</td><td>Quantity</td><td>Change Per Stock</td><td>Profit/Loss</td><td>Advanced Data</td><td>Dividend</td></tr><?phpfor($x=0;$x<$y;$x++){?><tr><td><?php echo $name[$x];?></td><td><?php echo $symbol[$x];?></td><td><?php echo $open[$x];?></td><td><?php echo $close[$x];?></td><td><?php echo $high[$x];?></td><td><?php echo $low[$x];?></td><td><?php echo $lastprice[$x];?></td><td><?php echo $pri[$x];?></td><td><?php echo $vol[$x];?></td><td><?php if($pri[$x]> $lastprice[$x]){?><iclass="fa fa-arrow-down"><?php echo $lastprice[$x]-$pri[$x];}elseif($pri[$x]< $lastprice[$x]){?></i><iclass="fa fa-arrow-up"><?php echo $lastprice[$x]-$pri[$x];?></i><?php}else

echo '0';?></td>



<td><?php if($pri[$x]> $lastprice[$x]){?><iclass="fa fa-arrow-down"><?php echo ($lastprice[$x]-$pri[$x])* $vol[$x];}elseif($pri[$x]< $lastprice[$x]){?></i><iclass="fa fa-arrow-up"><?php echo ($lastprice[$x]-$pri[$x])* $vol[$x];?></i><?php}else

echo '0';?></td><td><center><buttonid="opener1"class='btn btn-success'>Click to view advanced data</button></center><divid="dialog1"title="Расширенные данные компании">Company Description:<br></div><script>

$("#dialog1").dialog({

autoOpen:false});

$("#opener1").click(function(){

$("#dialog1").dialog("open","modal",true);});</script></td>

<td><?php echo '<br/>'. $divi.' : '. $value['stats']['dividendRate'];?></td>

</tr><?php }?></table>

Код (разметка): Короче говоря, я спрашиваю про последний 'td' в таблице и как его изменить, чтобы отображалась сумма дивидендов для правильного символа в строке, а не AAPL для всех.

manchelsi


Рег
28 Aug, 2013

Тем
2

Постов
6

Баллов
26
  • 03, Jun 2024
  • #2
У вас есть комментарий foreach.

была ли это глупостью пытаться удалить этот «лишний» код?

На самом деле то, что вы показали, - это беспорядок о том, как не использовать PHP или HTML.

Что касается PHP, вы без всякой причины входите в язык и выходите из него, сбрасывая значения по мере их прохода в несколько массивов, только Рождество знает что, создавая бесконечные переменные напрасно, выполняя некоторое время то, что я думаю.

это один результат, проверка количества строк на НИЧЕГО вместо получения результата и добавления переменной в строку запроса (вы используете mysqli, ИСПОЛЬЗУЙТЕ ЕГО!)и тд и тп... На стороне HTML вы используете тег , который не имеет НУЛЕВОГО эффекта на ЛЮБОМ веб-сайте, написанном ЛЮБОЕ время в прошлом. ДВЕ ДЕКАДЫ! У вас отсутствуют пробелы между именами тегов и их идентификаторами, что приводит к полной тарабарщине, без формы, типа или идентификации. ЕСЛИ они должны были находиться внутри правильного цикла, вы получили бы несколько экземпляров одного и того же идентификатора. (идентификаторы должны оставаться уникальными, их можно использовать только ОДИН РАЗ), выплескивая несколько экземпляров одного и того же сценария (этому даже не место в разметке). пронумерованные заголовки внутри , что является бредом семантики (и, возможно, тарабарщиной структуры документа)... Пришло время бросить это и начать все сначала. Не могли бы вы предоставить образец извлекаемых данных и то, что вы пытаетесь вывести для разметки и стиля?
 

dubetsky


Рег
01 Jan, 2011

Тем
1

Постов
2

Баллов
12
  • 04, Jun 2024
  • #3
Спасибо за конструктивный отзыв, похоже, впереди меня ждет долгий путь.

Тем не менее, я планирую сделать код/структуру более эффективным после того, как все функции будут выполнены правильно.

Не уверен, что это правильный путь, но в любом случае таков план.

Позвольте мне показать вам снимок экрана таблицы, данных, которые она извлекает, и того, что я хочу к ней добавить.

На снимке экрана вы можете увидеть тип данных, которые я получаю, и список правильных значений, которые он получает в списке над таблицей, с использованием эха, но при этом не имея возможности получить тот же результат в реальном виде.

таблицу, вместо этого получая только числа для AAPL во всех строках. API-часть:
 
<td>

<?php echo '<br/>'. $divi.' : '. $value['stats']['dividendRate']; ?>
</td>
Код (разметка): Табличная часть:
  $div = file_get_contents("[URL='https://lumtu.com/yti/dQYYQdGVodHRwczovL2FwaS5pZXh0cmFkaW5nLmNvbS8xLjAvc3RvY2svbWFya2V0L2JhdGNoP3N5bWJvbHM9JTI0eiZ0eXBlcz1zdGF0cyZmaWx0ZXI9ZGl2aWRlbmRSmbl']https://api.iextrading.com/1.0/stock/market/batch?symbols=$z&types=stats&filter=dividendRate[/URL]"); $div = json_decode($div,TRUE); foreach($div as $divi => $value) { echo '<br/>'. $divi.' : '. $value['stats']['dividendRate']; } 
Код (разметка): Есть ли какое-нибудь простое решение этой проблемы? По сути, я просто хочу, чтобы этот цикл работал внутри столбца таблицы, но не знаю, как это сделать. Надеюсь, что это поможет, и спасибо за вашу помощь.
 

divermax


Рег
30 Oct, 2012

Тем
0

Постов
3

Баллов
3
Тем
49554
Комментарии
57426
Опыт
552966

Интересно