почему он зацикливается более одного раза ... я что-то упустил - PullRequest
0 голосов
/ 08 сентября 2010

В таблице только одна запись, так почему она зацикливается, как будто у меня есть 5 таблиц с одной буквой каждая

$query = "Select * from click_tracker";
$result = mysql_query($query);
$all_clicks = mysql_fetch_array($result);

foreach($all_clicks as $click){
    print "
    <table border=\"1\">
      <tr>
        <th>Location</th>
        <th>Visit Count</th>
      </tr>
      <tr>
        <td>{$click['url_destination']}</td>
        <td>{$click['count']}</td>
      </tr>
    </table>";
}

вот возвращаемая таблица

<table border="1">
  <tr>
    <th>Location</th>

    <th>Visit Count</th>
  </tr>
  <tr>
    <td>2</td>
    <td>2</td>
  </tr>
</table>

<table border="1">
  <tr>
    <th>Location</th>
    <th>Visit Count</th>
  </tr>
  <tr>
    <td>2</td>

    <td>2</td>
  </tr>
</table>
<table border="1">
  <tr>
    <th>Location</th>
    <th>Visit Count</th>

  </tr>
  <tr>
    <td>h</td>
    <td>h</td>
  </tr>
</table>
<table border="1">
  <tr>

    <th>Location</th>
    <th>Visit Count</th>
  </tr>
  <tr>
    <td>h</td>
    <td>h</td>
  </tr>

</table>
<table border="1">
  <tr>
    <th>Location</th>
    <th>Visit Count</th>
  </tr>
  <tr>
    <td>5</td>

    <td>5</td>
  </tr>
</table>
<table border="1">
  <tr>
    <th>Location</th>
    <th>Visit Count</th>

  </tr>
  <tr>
    <td>5</td>
    <td>5</td>
  </tr>
</table>   

Ответы [ 5 ]

4 голосов
/ 08 сентября 2010

mysql_fetch_array извлекает одну строку в виде массива. Когда вы пытаетесь зациклить этот результат с помощью foreach, вы фактически просматриваете все столбцы строки, которую вы вернули (на самом деле, дважды, потому что по умолчанию mysql_fetch_array возвращает массив с обоими цифровые и индексированные клавиши!)

Если вы хотите получить все строки в вашем наборе результатов (а вы, скорее всего, это делаете), вам нужно использовать цикл while для продолжения извлечения строк, пока их больше нет:

$all_clicks = array();
while ($row = mysql_fetch_array($result))
{
  $all_clicks[] = $row;
}

, а затем при выполнении итерации по $all_clicks каждая итерация будет иметь полную строку.

1 голос
/ 08 сентября 2010

Вы печатаете несколько таблиц.Я не думаю, что это то, что вы намерены, хотя.Вам необходимо напечатать открывающие и закрывающие теги таблицы и заголовки вне цикла.Вам также следует вызывать mysql_fetch_array() в цикле, а не только один раз.

print "
    <table border=\"1\">
      <tr>
        <th>Location</th>
        <th>Visit Count</th>
      </tr>";

$query = "Select * from click_tracker";
$result = mysql_query($query);

while ($click = mysql_fetch_array($result)) {
    print "
      <tr>
        <td>{$click['url_destination']}</td>
        <td>{$click['count']}</td>
      </tr>";
}

print "</table>";

Вам также следует рассмотреть возможность экранирования данных в $click, но я не знаю, как выглядят ваши данные, поэтому я 'я не уверен, что поместить в область между операторами while и print.

1 голос
/ 08 сентября 2010

mysql_fetch_array () возвращает строки, похоже, ваш foreach циклически обрабатывает поля в строке, а не строки в наборе результатов.

0 голосов
/ 08 сентября 2010

выполните print_r($all_clicks) и убедитесь, что результат соответствует ожидаемому.

вам не нужно использовать foreach, если результат только один.

 $query = "Select * from click_tracker";
    $result = mysql_query($query);
    $all_clicks = mysql_fetch_array($result);
     print "
        <table border=\"1\">
          <tr>
            <th>Location</th>
            <th>Visit Count</th>
          </tr>
          <tr>
            <td>{$all_clicks['url_destination']}</td>
            <td>{$all_clicks['count']}</td>
          </tr>
        </table>";
0 голосов
/ 08 сентября 2010

Вам нужно сделать это так:

$query = "Select * from click_tracker";
$result = mysql_query($query);
while($click = mysql_fetch_assoc($result)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...