эхо-вывод при выдаче результатов запроса

0

по какой-либо причине приведенный ниже код выводит правильный тикер в местоположении LPrice для всех элементов, но только выводит правильные данные для второго элемента данных для PCT и PNL. Значение: вывод строки 1 заполняется только в одном разделе, а строка 2 заполняется во всех правильных разделах. Примечание: в настоящее время в таблице всего 2 элемента.

<?php
$host="localhost"; // Host name 
$username="abc"; // Mysql username 
$password="password"; // Mysql password 
$db_name="abc"; // Database name 
$tbl_name="portfolio"; // Table name
$conn=mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
$sql="select * from ".$tbl_name.";";
$result = mysql_query($sql) or die(mysql_error()); 
echo '<table class="tickerContain">';
echo '<tr>';
echo '<td>ID</td>';
echo '<td>TICKER</td>';
echo '<td>PRICE</td>';
echo '<td>CommIn</td>';
echo '<td>CommOut</td>';
echo '<td>DateIn</td>';
echo '<td>LPrice</td>';
echo '<td>%CHG</td>';
echo '<td>PNL</td>';

$tblOut='';
while ($row = mysql_fetch_array($result))
{
  $tick='';
  $tick=$row["ticker"];
  $tblOut.= '<tr>';
  $tblOut.= '<td id="'.$tick.'id">' . $row["id"] . '</td>';
  $tblOut.= '<td id="'.$tick.'ticker">' . $tick . '</td>';
  $tblOut.= '<td id="'.$tick.'price">' . $row["price"] . '</td>';
  $tblOut.= '<td id="'.$tick.'commissionIn">' . $row["commissionIn"] . '</td>';
  $tblOut.= '<td id="'.$tick.'commissionOut">' . $row["commissionOut"] . '</td>';
  $tblOut.= '<td id="'.$tick.'dateIn">' . $row["dateIn"] . '</td>';
  $tblOut.= '<td><textarea class="realTime"  id="'.$tick.'LPrice">'.$tick.'</textarea></td>';
  $tblOut.= '<td><textarea class="realTime"  id="'.$tick.'pctChange">'.$tick.'</textarea></td>';
  $tblOut.= '<td><textarea class="realTime"  id="'.$tick.'pnl">'.$tick.'</textarea></td>';
  $tblOut.= '</tr>';
}
echo $tblOut;
echo '</table>';
  • 0
    Знаете ли вы, что эхо может отображать более нескольких символов? Это резко улучшило бы удобочитаемость. Не могли бы вы также добавить содержимое вашей таблицы?
  • 0
    Выберите один: echo '</td>', '<td>' или echo '</td>' . '<td>' или (лучше всего) echo '</td><td>' . Какой бы путь вы ни выбрали, перестаньте делать то, что вы делаете. Это больно.
Показать ещё 6 комментариев
Теги:

1 ответ

2
Лучший ответ

Ваш цикл while закрывал тег <tr> над ним на каждой итерации, но вы никак не могли видеть это с помощью этого полностью нечитаемого кода.

Я взял на себя свободу убирать его за вас:

У вас также были назначены совершенно бесполезные переменные. Я тоже это исправил.

<?php
$host="localhost"; // Host name 
$username="abc"; // Mysql username 
$password="password"; // Mysql password 
$db_name="abc"; // Database name 
$tbl_name="portfolio"; // Table name
$conn=mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");
$sql="select * from ".$tbl_name.";";
$result = mysql_query($sql) or die(mysql_error());

?>

<table class="tickerContain">
    <tr>
        <td>ID</td>
        <td>TICKER</td>
        <td>PRICE</td>
        <td>CommIn</td>
        <td>CommOut</td>
        <td>DateIn</td>
        <td>LPrice</td>
        <td>%CHG</td>
        <td>PNL</td>

    </tr>
    <?php while ($row = mysql_fetch_array($result)) : ?>
    <tr>
        <td id="<?php echo $row["ticker"]; ?>id">
            <?php echo $row["id"]; ?>
        </td>
        <td id="<?php echo $row["ticker"]; ?>ticker">
            <?php echo $row["ticker"]; ?>
        </td>
        <td id="<?php echo $row["ticker"]; ?>price">
            <?php echo $row["price"]; ?>
        </td>
        <td id="<?php echo $row["ticker"]; ?>commissionIn">
            <?php echo $row["commissionIn"]; ?>
        </td>
        <td id="<?php echo $row["ticker"]; ?>commissionOut">
            <?php echo $row["commissionOut"]; ?>
        </td>
        <td id="<?php echo $row["ticker"]; ?>dateIn">
            <?php echo $row["dateIn"]; ?>
        </td>
        <td>
            <textarea class="realTime" id="<?php echo $row["ticker"]; ?>LPrice">
                <?php echo $row["ticker"]; ?>
            </textarea>
        </td>
        <td>
            <textarea class="realTime" id="<?php echo $row["ticker"]; ?>pctChange">
                <?php echo $row["ticker"]; ?>
            </textarea>
        </td>
        <td>
            <textarea class="realTime" id="<?php echo $row["ticker"]; ?>pnl">
                <?php echo $row["ticker"]; ?>
            </textarea>
        </td>
    </tr>
    <?php endwhile; ?>
</table>

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

Взгляните на MVC Architecture (http://en.wikipedia.org/wiki/Model -view-controller), это значительно поможет вам сохранить ваш код в чистоте.

  • 0
    @Meagar, как бы вы предложили улучшить его?
  • 0
    Объединение всех строк <td> очень помогло, но я не стал бы беспокоиться о переключении контекста внутри цикла while, а синтаксис альтернативной структуры управления ( while : / endwhile; ) ужасен.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню