【问题标题】:Update table field with php用php更新表字段
【发布时间】:2013-04-04 01:38:17
【问题描述】:

我创建了一个股票投资组合来尝试学习 PHP,并且我试图让价格字段每 30 秒自动更新一次。 我可以显示价格,但它们都显示在同一行的一个价格字段中。我想在每一行上显示它们。我附上了它现在的截图。

我创建了投资组合表,并填写了用户拥有的所有股票。这是显示投资组合的代码。

<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 的 javascript 文件,该文件每 30 秒调用一次 update.php 文件以更新价格。这是 update.js 的代码

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

update.php 使用用户的股票创建一个 $shares 数组并将其发送到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>

感谢任何帮助。

【问题讨论】:

  • 问题是……?
  • 在你的JS中你只更新一个字段(id为price)。而不是 id 你可以把它变成一个类并调用 $.each(".price") 来处理你的 JS 中的每一行
  • 我修改了我的 JS 文件,现在我得到了两行的两个价格$(document).ready(function(){ var updater = setTimeout(function(){ $('.price').each(function () { $(this).load('update.php', 'update=true'); }); },10); });

标签: php javascript jquery html


【解决方案1】:

将您的 ids 更改为 classes。 HTML 中不能有重复的ids。并相应地修改 jQuery 中的选择器 (jQuery('.price'))。

附带说明一下,update.php 的第 6 行和第 7 行看起来可能倾向于SQL injections。我看不到query 做了什么,所以我不确定。

【讨论】:

  • 我将价格更改为一个类并更改了 JS 代码,现在看起来像这样 $(document).ready(function(){ var updater = setTimeout(function(){ jQuery('.price').each(function () { $(this).load('update.php', 'update=true'); }); },10); }); 现在我在相邻的两行中都获得了两个价格。我做错了什么?
  • 是的。这是 HTML &lt;td class="price"&gt;$&lt;?php echo number_format($row["price"],2);?&gt;&lt;/td&gt; 的行
  • 你的输出现在是什么样子(在 JavaScript 执行之后)。
  • Last Price 26.12802.27 26.12802.27
猜你喜欢
  • 2018-12-27
  • 2019-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 2014-03-18
相关资源
最近更新 更多