Использование цикла for для ускорения ввода кода PHP - PullRequest
2 голосов
/ 27 декабря 2011

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

$maxRows_dd1 = 10;
$pageNum_dd1 = 0;
if (isset($_GET['pageNum_dd1'])) {
  $pageNum_dd1 = $_GET['pageNum_dd1'];
}
$startRow_dd1 = $pageNum_dd1 * $maxRows_dd1;

$maxRows_dd2 = 10;
$pageNum_dd2 = 1;
if (isset($_GET['pageNum_dd2'])) {
  $pageNum_dd2 = $_GET['pageNum_dd2'];
}
$startRow_dd2 = $pageNum_dd2 * $maxRows_dd2;

$maxRows_dd3 = 10;
$pageNum_dd3 = 2;
if (isset($_GET['pageNum_dd3'])) {
  $pageNum_dd3 = $_GET['pageNum_dd3'];
}
$startRow_dd3 = $pageNum_dd3 * $maxRows_dd3;

... между dd4 и dd99!

$maxRows_dd100 = 10;
$pageNum_dd100 = 99;
if (isset($_GET['pageNum_dd99'])) {
  $pageNum_dd32 = $_GET['pageNum_dd99'];
}
$startRow_dd99 = $pageNum_dd99 * $maxRows_dd99; 

, что соответствует:

mysql_select_db($database_rent, $rent);
$query_dd1 = "SELECT * FROM rent";
$query_limit_dd1 = sprintf("%s LIMIT %d, %d", $query_dd1, $startRow_dd1, $maxRows_dd1);
$dd1 = mysql_query($query_limit_dd1, $rent) or die(mysql_error());
$row_dd1 = mysql_fetch_assoc($dd1);

if (isset($_GET['totalRows_dd1'])) {
  $totalRows_dd1 = $_GET['totalRows_dd1'];
} else {
  $all_dd1 = mysql_query($query_dd1);
  $totalRows_dd1 = mysql_num_rows($all_dd1);
}
$totalPages_dd1 = ceil($totalRows_dd1/$maxRows_dd1)-1;

mysql_select_db($database_rent, $rent);
$query_dd2 = "SELECT * FROM rent";
$query_limit_dd2 = sprintf("%s LIMIT %d, %d", $query_dd2, $startRow_dd2, $maxRows_dd2);
$dd2 = mysql_query($query_limit_dd2, $rent) or die(mysql_error());
$row_dd2 = mysql_fetch_assoc($dd2);

if (isset($_GET['totalRows_dd2'])) {
  $totalRows_dd2 = $_GET['totalRows_dd2'];
} else {
  $all_dd2 = mysql_query($query_dd2);
  $totalRows_dd2 = mysql_num_rows($all_dd2);
}
$totalPages_dd2 = ceil($totalRows_dd2/$maxRows_dd2)-1;

mysql_select_db($database_rent, $rent);
$query_dd3 = "SELECT * FROM rent";
$query_limit_dd3 = sprintf("%s LIMIT %d, %d", $query_dd3, $startRow_dd3, $maxRows_dd3);
$dd3 = mysql_query($query_limit_dd3, $rent) or die(mysql_error());
$row_dd3 = mysql_fetch_assoc($dd3);

if (isset($_GET['totalRows_dd3'])) {
  $totalRows_dd3 = $_GET['totalRows_dd3'];
} else {
  $all_dd3 = mysql_query($query_dd3);
  $totalRows_dd3 = mysql_num_rows($all_dd3);
}
$totalPages_dd3 = ceil($totalRows_dd3/$maxRows_dd3)-1;

... вплоть до дд100 !!!

Как бы я использовал цикл for для ускорения ввода всего этого кода для каждого блока кода от dd1 до dd100?

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

Читать о массивах и для () циклов.

1 голос
/ 28 декабря 2011

Это гораздо более эффективный код, чтобы делать именно то, что вы делаете выше:

<?php

  // You only need to do these once as they are the same throughout
  mysql_select_db($database_rent, $rent);
  $maxRows = 10;
  // This code gets the total number of rows in the database
  $totalRowsAll = mysql_fetch_assoc(mysql_query("SELECT count(*) AS total FROM rent", $rent));
  $totalRowsAll = (int) $totalRowsAll['total'];

?>
<div class="tab_container">
    <div id="tab1" class="tab_content">
      <table width="100%" border="0" cellspacing="5" cellpadding="5" id="1">
<?php

  for ($i = 0; $i < 100; $i++) {

    // Calcluate value for this iteration and query database
    $pageNum = (isset($_GET['pageNum_dd'.($i + 1)])) ? (int) $_GET['pageNum_dd'.($i + 1)] : $i;
    $startRow = $pageNum * $maxRows;
    $query = "SELECT * FROM rent LIMIT $startRow, $maxRows";
    $result = mysql_query($query, $rent) or die(mysql_error($rent));
    $totalRows = (isset($_GET['totalRows_dd1'])) ? (int) $_GET['totalRows_dd1'] : $totalRowsAll;
    ${'totalPages_dd'.($i + 1)} = ceil($totalRows / $maxRows) - 1;

    // Now print this row
?>
        <tr height="100px" align="center">
<?php

    while ($row = mysql_fetch_assoc($query)) {

?>

            <td style="background-color: <?php echo $row['colour']; ?>;" onclick="window.location='pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>'" onmouseover="this.style.cursor='pointer'"> 
              <form action="pay.php?id=<?php echo $row['dNo']; ?>&user=<?php echo $username; ?>" method="post">
                <input type="hidden" id="<?php echo $row['dNo']; ?>">
                <input type="hidden" value="<?php echo $username; ?>">
                <button type="submit" class="link" id="t<?php echo $row['dNo']; ?>">
                  <span><?php echo $row['dNo']; ?></span>
                </button>
              </form>
            </td>
<?php

    } // End while

?>
        </tr>
<?php

  } // End for

?>
      </table>
    </div>
</div>

... однако

Я вполне уверен, что это можно было бы суммировать в одном запросе, чтобы получить все необходимые результаты, которые были бы намного более эффективными и значительно сократили бы нагрузку на базу данных. Но из-за переменных $_GET['pageNum_dd*'] и $_GET['totalPages_dd*'], которые используются для каждой строки, я не уверен на 100% в этом, и я не могу понять, как это сделать, не зная больше о том, что производится. Вам необходимо проверить, действительно ли эти параметры, которые можно передать, действительно необходимы / полезны. Как таковые, они могут вызывать строки различной длины с неравным количеством ячеек в строке - что, вероятно, не то, что вы хотите.

То же самое относится и к переменным $totalPages_dd*, которые назначены ниже, но никогда нигде не используются. Они могут быть бесполезны, и назначение их может быть бессмысленным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...