В таблице есть только одна запись, поэтому почему она работает так, как будто у меня 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>
mysql_fetch_array
извлекает одну строку в виде массива. Когда вы пытаетесь перебрать этот результат с вашим foreach
, вы фактически просматриваете все столбцы строки, которую вы вернули (дважды, фактически, потому что по умолчанию mysql_fetch_array
возвращает массив с числовыми и индексированными ключами!)
Если вы хотите получить все строки в результирующем наборе (и вы, скорее всего, сделаете это), вам нужно использовать цикл while, чтобы продолжать выборку строк до тех пор, пока их больше нет:
$all_clicks = array(); while ($row = mysql_fetch_array($result)) { $all_clicks[] = $row; }
а затем, когда вы перебираете $all_clicks
, каждая итерация будет иметь полную строку.
mysql_fetch_array () возвращает строки, похоже, что ваш foreach перебирает поля в строке, а не строки в результирующем наборе.
Кажется, вы печатаете несколько таблиц. Я не думаю, что это то, что вы намереваетесь. Вам нужно распечатать теги открытия и закрытия таблицы и заголовки вне цикла. Вы также должны вызвать 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
.
Вам нужно сделать это так:
$query = "Select * from click_tracker"; $result = mysql_query($query); while($click = mysql_fetch_assoc($result)) {
сделайте 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>";