[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: цикл while
udaffchik
Здравствуйте уважаемые форумчане. Я новичек в php программировании, сейчас пробую свой первый сайт, и как многие сначала прошел курсы Попова. В базе данных находиться таблица kv в которой находиться список квартир. При нажатии по категории квартиры выводиться список квартир, но почему то первая квартира не выводиться а начинаеться список со второй. Если использовать цикл do while все идеть прекрасно. Подскажите в чем моя ошибка.



if (isset ($_GET['nedv'])){
$nedv = intval ($_GET['nedv']);
$result_kv = mysql_query ("SELECT * FROM kv WHERE ned='$nedv' && view='1'",$db);

if($result_kv == true){
$row_kv = mysql_fetch_assoc ($result_kv);

if(!empty($row_kv)){

while($row_kv = mysql_fetch_assoc ($result_kv)){
$id_kv = $row_kv['id'];
$ned = $row_kv['ned'];
$srok = $row_kv['srok'];
$stat = $row_kv['stat'];
$floor = $row_kv['floor'];

$result_foto = mysql_query("SELECT foto FROM foto WHERE id_kv=$id_kv");
$row_foto = mysql_fetch_assoc($result_foto);

$result_ned = mysql_query ("SELECT title FROM ned WHERE id=$ned");
$row_ned = mysql_fetch_assoc ($result_ned);

$result_srok = mysql_query ("SELECT title FROM srok WHERE id=$srok");
$row_srok = mysql_fetch_assoc ($result_srok);

$result_stat = mysql_query ("SELECT stat FROM stat WHERE id=$stat");
$row_stat = mysql_fetch_assoc ($result_stat);

$result_floor = mysql_query ("SELECT title FROM floor WHERE id=$floor");
$row_floor = mysql_fetch_assoc ($result_floor);

print
"<table class='kv_view' border='1'>
<tr>
<td rowspan='2' class='mini_img'><img src="
.$row_foto['foto']." width='200' height='150' /><img class='stat' src=".$row_stat['stat']." /></td>
<td width='413' height='70'><a href='#'>"
.$row_ned['title']."</a><a href='#'>".$row_kv['adr']."</a></td>
<td width='95' rowspan='2'><b><p align='center'>ID "
.$row_kv['id']."</p></b><p align='center'>".$row_kv['cena']." тг.</p><p align='center'>".$row_srok['title']."</p></td>
</tr>
<tr>
<td height='130'>"
.$row_kv['text']."<br><br><a href='kv.php?id_kv=".$row_kv['id']."'><h2>Подробнее...<h2></a></td>
</tr>
</table>
<br />"
;
}
}

else{
echo "<p align='center'>В этой категории данных нет!</p>";
}
}

else{
echo "<p align='center'>База данных не найдена!</p>";
}
}

else{
echo 'Переменной нет';
}







Спустя 20 минут, 28 секунд (2.11.2011 - 00:19) m4a1fox написал(а):
Оптимизировать надо! Много запросов.... Ща попробую....

Спустя 5 минут, 20 секунд (2.11.2011 - 00:24) m4a1fox написал(а):
Упс, прошу прощение, не увидел, что это разные таблицы.... тут нужен сложный запрос...

Спустя 4 минуты, 10 секунд (2.11.2011 - 00:29) Игорь_Vasinsky написал(а):
blink.gif Вы пходу изначально не правильно спроектировали БД

можно глазком взглянуть на структуру?

Спустя 15 минут, 18 секунд (2.11.2011 - 00:44) udaffchik написал(а):
Да, конечно.

Спустя 7 часов, 12 минут, 29 секунд (2.11.2011 - 07:56) linker написал(а):
if($result_kv == true){
$row_kv = mysql_fetch_assoc ($result_kv);
Во-первых, курсы что были курсы Попова видно сразу. $result_kv собственно не равно true, $result_kv является ресурсным типом, скажи спасибо PHP c его динамической типизацией и неявным преобразованием типов. Если хочешь проверить значение $result_kv, то для тебя как новичка читабельнее и логичнее будет
if (is_resource($result_kv)) {}
.Во-вторых, здесь же Поповская хрень
$row_kv = mysql_fetch_assoc ($result_kv);
которая является абсолютно лишней, как и последующее условие
if(!empty($row_kv)){


А теперь объяснение, если запрос правильный и $result_kv содержит ссылку на ресурс с результатами запроса, то цикл
while($row_kv = mysql_fetch_assoc ($result_kv))
отработает ровно столько раз, сколько строк было возвращено в результате исполнения SQL-запроса, от 0 до N. Именно поэтому в таких случаях нет никакой необходимости проверять на ненулевое количество записей в результате.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.