2013-04-03 2 views
0

Я создал портфель акций, чтобы попробовать и изучить PHP, и я пытаюсь обновить поле цены каждые 30 секунд. Я могу отображать цены, но все они отображаются в одном ценовом поле в той же строке. Я хочу показать их на каждой из строк. Я прикрепил скриншот того, как он выглядит сейчас.Обновление поля таблицы с php

У меня есть таблица портфеля, созданная и заполненная всеми запасами, которые имеет пользователь. Вот код для показа портфолио.

<table class="table"> 
     <tr> 
     <th>Symbol</th> 
     <th>Name</th> 
     <th>Shares</th> 
     <th>Last Price</th> 
     <th>Market value</th> 
     </tr> 
<?php foreach ($shares as $row): ?> 

     <tr > 
     <td><?php echo $row["symbol"];?></td> 
     <td><?php echo $row["name"];?></td> 
     <td><?php echo $row["shares"];?></td> 
     <td id="price">$<?php echo number_format($row["price"],2);?></td>  
     <td>$<?php echo number_format($row["total"],2);?></td> 
     </tr> 

<?php endforeach; ?> 


<tr> 
    <td>Portfolio Value</td> 
    <td></td> 
    <td></td> 
    <td></td> 
    <td>$<?php echo number_format($value, 2);?></td> 

</tr> 
<tr> 
    <td>Cash available</td> 
    <td></td> 
    <td></td> 
    <td></td> 
    <td>$<?php echo number_format($cash[0]["cash"], 2);?></td> 
</tr> 

</table> 

<script type="text/javascript" src="js/update.js" ></script> 

Затем я создал файл с именем яваскрипта update.js, который вызывает update.php файл каждые 30 секунд, чтобы обновить цену. Вот код для update.js

$(document).ready(function(){ 
    var updater = setTimeout(function(){ 
     $('#price').load('update.php', 'update=true'); 
    },10); 
}); 

update.php создает массив $ акций с акциями пользователя и отправляет его portfolio_update.php, чтобы отобразить его. Это код update.php

<?php 

require("../includes/functions.php"); 
require("../includes/config_update.php"); 

$rows = query("SELECT * FROM shares WHERE id = ?", $_SESSION["id"]); 
$cash = query("SELECT cash FROM users WHERE id = ?", $_SESSION["id"]); 
     //create array to store the shares 
    $shares = array(); 

    //for each of the user info 

    foreach($rows as $row){ 

     $stock = lookup($row["symbol"]); 

     if($stock !== false){ 

      $shares[] = array(

       "price" => $stock["price"], 
       "total" => $row["shares"]*$stock["price"] 
      );   
     } 
    } 
    $size = count($shares); 
    $value = 0; 
     for($i = 0; $i < $size; $i++){ 

      $value += $shares[$i]["total"];    
     }  

      extract($shares); 

require("../templates/portfolio_update.php"); 

?> 

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

<?php 

      foreach ($shares as $rows) { 

      echo "<tr>"; 
      echo "<td>"; 
      echo number_format($rows["price"],2); 
      echo "</td>";   
      echo "</tr>"; 

      }    
    ?> 

<script type="text/javascript" src="js/update.js" ></script> 

screenshot

Любая помощь приветствуется.

+1

И проблема в том, что ...? –

+1

В JS вы обновляете только одно поле (с идентификатором «цена»). Вместо id вы могли бы сделать его классом и вызывать '$ .each (". Price ")' для работы с каждой отдельной строкой в ​​JS – kero

+0

Я изменил свой JS-файл, и теперь я получаю обе цены в обеих строках '$ (документ() { var updater = setTimeout (функция update = true '); }; }, 10); }); ' – tironci

ответ

0

Изменить id s на class es. Вы не можете дублировать id s в HTML. И измените свой селектор в jQuery соответственно (jQuery('.price')).

В качестве примечания стороны, строки 6 и 7 из update.php выглядят как они могут быть склонными к SQL injections. Я не вижу, что делает query, поэтому я не знаю точно.

+0

Я изменил цены как класс и изменил код JS, и теперь он выглядит как' $ (document) .ready (function () { var updater = setTimeout (функция() { jQuery ('. Цена'). Каждый (функция() { \t $ (this) .load ('update.php', 'update = true'); }); }, 10); }); ' Теперь я получаю обе цены на обе строки рядом друг с другом. Что я делаю не так? – tironci

+0

Вы изменили код? –

+0

Да. Это строка HTML ' $ ' – tironci

Смежные вопросы