Оператор PHP while работает только для одной строки - PullRequest
0 голосов
/ 15 октября 2011

Я пытаюсь, чтобы оператор while отображал все строки таблицы. У меня сейчас три строки, такие как R1 Business R2 Communication и R3 Education. Это дисплей три, но все R1. Таким образом, вместо перечисления Business Communication Education это бизнес бизнес бизнес.

Код, который у меня есть:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'\includes\format.php');

$con = mysql_connect("server","user","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("foundation", $con);

$result = mysql_query("select * from `database`.`collegemeter");
?>
<?php  

if (!$result || !($row = mysql_fetch_assoc($result))) {
    echo "DB error";
    exit;
}
    $college = $row["college"];
    $date = $row["date"];
    $goal = $row["goal"];
    $url = $row["url"];
    $current = $row["current"];
    $percent = round($current / $goal * 100);
    $totalwidth = 245;
    $ourwidth = $totalwidth * $percent / 100;
    ?>
    <?php 
        $halfofarrowheight = 36;
        $arrowheight = $ourwidth-$halfofarrowheight; 
        if($arrowheight < 0)
            $arrowheight = 0;
    ?>
<?php do { ?>
    <div class="progresswrap">
<p><a href="<?php echo $url;?>"><?php echo $college;?></a></p>
<div class="progresscontainer">
<div class="progress"></div>
</div>
<div class="arrow"> $<?php echo formatmoney($current);?></div>
<h4>$<?php echo formatmoney($goal);?></h4>
</div>
   <?php } while ($row_college = mysql_fetch_assoc($result)); ?>

Итак, как мне получить список по возрастанию вниз и не повторять первый ряд?

Ответы [ 2 ]

2 голосов
/ 15 октября 2011

вы должны попробовать это, вы определяли свои переменные только один раз

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'\includes\format.php');

$con = mysql_connect("server","user","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("foundation", $con);

$result = mysql_query("select * from `database`.`collegemeter");

while($row = mysql_fetch_assoc($result)){
    $college = $row["college"];
    $date = $row["date"];
    $goal = $row["goal"];
    $url = $row["url"];
    $current = $row["current"];
    $percent = round($current / $goal * 100);
    $totalwidth = 245;
    $ourwidth = $totalwidth * $percent / 100;

    $halfofarrowheight = 36;
    $arrowheight = $ourwidth-$halfofarrowheight; 
    if($arrowheight < 0)
        $arrowheight = 0;
    ?>
    <div class="progresswrap">
       <p><a href="<?php echo $url;?>"><?php echo $college;?></a></p>
       <div class="progresscontainer">
       <div class="progress"></div>
    </div>
    <div class="arrow"> $<?php echo formatmoney($current);?></div>
    <h4>$<?php echo formatmoney($goal);?></h4>
    </div>
    <?php } ?>
1 голос
/ 15 октября 2011

Этот код беспорядок.

а)

require_once($_SERVER['DOCUMENT_ROOT'].'\includes\format.php');

Не используйте обратную косую черту в путях. Используйте только косые черты /. PHP компенсирует вас, если вы работаете в Windows, и автоматически переводит в обратную косую черту. Обратные слеши в таких строках открывают дверь для неверного истолкования как escape-символа, а не ссылки на путь.

б)

$result = mysql_query("select * from `database`.`collegemeter");

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

в)

if (!$result || !($row = mysql_fetch_assoc($result))) {

Правильный (+ самый простой) метод для проверки ошибки БД:

if ($result === false) {
    die(mysql_error());
}

Не проверяйте, есть ли какие-либо результаты, пытаясь получить строку. Вот для чего mysql_num_rows().

if (mysql_num_rows($result) == 0) then
     die("No results!");
}

d) Стилистически, циклы do / while для результатов базы данных немного некрасивы. Вы бы лучше с более стандартным:

while($row = mysql_fetch_assoc($result)) { ... }

конструкция. Это также позволит вам увидеть, что вы определяете свои $college и другие переменные только ОДИН РАЗ, ВНЕ вашего цикла извлечения. Нет необходимости извлекать строку извлечения БД в отдельные переменные, вы можете напрямую выводить их:

    while ($row = ...) {
        $money = moneyformat($row['goal']);
        echo <<<EOL
    <div class="progresswrap">
    <p><a href="{$row['url']}">{$row['college']}</a></p>
    <div class="progresscontainer">
    etc...
    EOL;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...