[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод из базы вложенным циклом
Herotic
Всем привет, прошу помощи вот с какой проблемой. У меня есть код, который выводит места(кружочки), у каждого кружочка есть свой ряд и свой номер. В базе хранятся записи о том, на какие кружочки нажали, их ряд и место.
Я пытаюсь сделать так, чтобы за один запрос все данные о том, на какие кружочки нажали, записывались в массив и уже потом в цикле проверяю нажимали ли на этот кружочек. Проблема в том, что вложенный цикл do...while почему-то работает всего один раз 0_о.
Кто знает, что это такое и как эту проблему решить?

Мой код:

// ====ВЫВОД
echo "<div id='par'>";
$ryad = 1;
$mesto = 1;
$leftc = 0;
$topc = 5;
$margin = -7;


$result = mysql_query("SELECT * FROM br WHERE vu='$id' AND place='par'");
$myrow = mysql_fetch_array($result);

for ($i=1;$i<=442;$i++)
{
if ($mesto < 10) { $margin = -2;}
if ($mesto >= 10 && $mesto < 19) {$margin = -6;}
if ($mesto > 19) { $margin = -5;}
if ($mesto == 1) { $margin = -3;}

do
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o') {$circle = "circleo"; $title = "Желтый";}
if ($myrow['status'] == 'p') {$circle = "circlep"; $title = "Красный";}
}

else
{
$circle = "circle parcircle";
$title = 'Свободный';
}
}

while ($myrow = mysql_fetch_array($result));

echo '
<div class="'
.$circle.'" style="left:'.$leftc.'px; top:'.$topc.'px;" title="'.$title.'"><span class="textincircle" style="width:12px;height:12px;left:50%;top:50%;position:absolute;margin-top:'.$otsuptextincircle.'px;margin-left:'.$margin.'px"> '.$mesto.' </span></div>
'
;

$mesto++;
if ($mesto == 9 || $mesto == 19) { $leftc = $leftc + 50;} else { $leftc = $leftc + $shuruna;}
if ($mesto == 27) { $topc = $topc+$vusota; $leftc = 0; $mesto = 1; $ryad = $ryad + 1;}
if ($i == 208) { $topc = $topc + 25; }
}

echo "</div>";
// ====КОНЕЦ




Спустя 5 минут, 13 секунд (23.10.2011 - 21:03) TMake написал(а):
Цитата (Herotic @ 23.10.2011 - 21:58)
Проблема в том, что вложенный цикл do...while почему-то работает всего один раз 0_о.

Потому что проверка идет всегда после выполнения одного раза
Пользуйтесь while(){} и у вас все будет под контролем

Спустя 2 минуты, 53 секунды (23.10.2011 - 21:06) Herotic написал(а):
Сделал


while ($myrow = mysql_fetch_array($result));
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o') {$circle = "circleo"; $title = "Желтый";}
if ($myrow['status'] == 'p') {$circle = "circlep"; $title = "Красный";}
}

else
{
$circle = "circle parcircle";
$title = 'Свободный';
}
}



Но все-равно ничего не работает, как всегда 1 цикл.

Спустя 11 секунд (23.10.2011 - 21:06) Winston написал(а):
Какую-то фигню вы написали с do while зачем он вам ?
Свернутый текст
<?
echo "<div id='par'>";
$ryad = 1;
$mesto = 1;
$leftc = 0;
$topc = 5;
$margin = -7;


$result = mysql_query("SELECT * FROM `br` WHERE `vu`='" . $id . "' AND `place`='par'");

for ($i = 1; $i <= 442; $i++)
{
if ($mesto < 10) { $margin = -2;}
if ($mesto >= 10 && $mesto < 19) {$margin = -6;}
if ($mesto > 19) { $margin = -5;}
if ($mesto == 1) { $margin = -3;}

while ($myrow = mysql_fetch_assoc($result))
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o')
$circle = "circleo"; $title = "Желтый";
if ($myrow['status'] == 'p')
$circle = "circlep"; $title = "Красный";
}
else
{
$circle = "circle parcircle";
$title = 'Свободный';
}
}


echo '
<div class="'
.$circle.'" style="left:'.$leftc.'px; top:'.$topc.'px;" title="'.$title.'"><span class="textincircle" style="width:12px;height:12px;left:50%;top:50%;position:absolute;margin-top:'.$otsuptextincircle.'px;margin-left:'.$margin.'px"> '.$mesto.' </span></div>
'
;

$mesto++;
if ($mesto == 9 || $mesto == 19) { $leftc = $leftc + 50;} else { $leftc = $leftc + $shuruna;}
if ($mesto == 27) { $topc = $topc+$vusota; $leftc = 0; $mesto = 1; $ryad = $ryad + 1;}
if ($i == 208) { $topc = $topc + 25; }
}

echo "</div>";




Спустя 1 минута, 1 секунда Winston написал(а):
Откуда $id берется ?

Спустя 4 минуты, 15 секунд (23.10.2011 - 21:10) TMake написал(а):
var_dump(mysql_fetch_assoc($result));

Вполне вероятно у вас выводит всего один результат - смотрите в запрос...

Спустя 10 минут, 33 секунды (23.10.2011 - 21:21) Herotic написал(а):
Winston, что-то ничего не работает, теперь цикл вообще 0 раз делается sad.gif
stepan, строк выводит как и есть в базе, 6 штук.

Переменная $id прилетает через $_GET.

Спустя 13 минут, 1 секунда (23.10.2011 - 21:34) ZSH написал(а):
есно внутри цикла нужно вставить

Спустя 1 минута, 23 секунды (23.10.2011 - 21:35) Herotic написал(а):
что вставить?))

Спустя 2 минуты, 13 секунд (23.10.2011 - 21:37) ZSH написал(а):
в конец блока while
while()
{

// весь код

echo '
<div class="'
.$circle.'" style="left:'.$leftc.'px; top:'.$topc.'px;" title="'.$title.'"><span class="textincircle" style="width:12px;height:12px;left:50%;top:50%;position:absolute;margin-top:'.$otsuptextincircle.'px;margin-left:'.$margin.'px"> '.$mesto.' </span></div>
'
;

$mesto++;
if ($mesto == 9 || $mesto == 19) { $leftc = $leftc + 50;} else { $leftc = $leftc + $shuruna;}
if ($mesto == 27) { $topc = $topc+$vusota; $leftc = 0; $mesto = 1; $ryad = $ryad + 1;}
if ($i == 208) { $topc = $topc + 25; }
echo "</div>";

Спустя 2 минуты, 53 секунды (23.10.2011 - 21:40) Herotic написал(а):
Что-то не могу понять smile.gif
Мне как нужно.
Из базы выбирается все кружочки на которые нажали.
Дальше идет цикл, выводится первый кружочек и сразу проверяется или на него нажимали, то есть идет поиск среди тех значений, которые хранятся в базе.

Спустя 18 минут, 44 секунды (23.10.2011 - 21:59) ZSH написал(а):
while ($myrow = mysql_fetch_array($result));
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o') {$circle = "circleo"; $title = "Желтый";}
if ($myrow['status'] == 'p') {$circle = "circlep"; $title = "Красный";}
}

else
{
$circle = "circle parcircle";
$title = 'Свободный';
}
}

убрать точку с запятой
while ($myrow = mysql_fetch_array($result));

Спустя 12 минут, 36 секунд (23.10.2011 - 22:12) Herotic написал(а):
Теперь вообще 0 циклов делает (((

Спустя 2 минуты, 12 секунд (23.10.2011 - 22:14) ZSH написал(а):
error_reporting(E_ALL);
в самое начало скрипта

Спустя 2 минуты, 26 секунд (23.10.2011 - 22:16) Herotic написал(а):
без изменений dry.gif

Спустя 2 минуты, 32 секунды (23.10.2011 - 22:19) ZSH написал(а):
выложи код который утебя сейчас

Спустя 8 минут, 28 секунд (23.10.2011 - 22:27) Herotic написал(а):
echo "<div id='par'>";
$ryad = 1;
$mesto = 1;
$leftc = 0;
$topc = 5;
$margin = -7;

$result = mysql_query("SELECT * FROM br WHERE vu='$id' AND place='par'");
$myrow = mysql_fetch_array($result);

for ($i=1;$i<=442;$i++)
{
if ($mesto < 10) { $margin = -2;}
if ($mesto >= 10 && $mesto < 19) {$margin = -6;}
if ($mesto > 19) { $margin = -5;}
if ($mesto == 1) { $margin = -3;}

while ($myrow = mysql_fetch_array($result))
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o') {$circle = "circleo"; $title = "Желтый";}
if ($myrow['status'] == 'p') {$circle = "circlep"; $title = "Красный";}
}

else
{
$circle = "circle parcircle";
$title = 'Свободный';
}
}


echo '
<div class="'
.$circle.'" style="left:'.$leftc.'px; top:'.$topc.'px;" title="'.$title.'"><span class="textincircle" style="width:12px;height:12px;left:50%;top:50%;position:absolute;margin-top:'.$otsuptextincircle.'px;margin-left:'.$margin.'px"> '.$mesto.' </span></div>
'
;

$mesto++;
if ($mesto == 9 || $mesto == 19) { $leftc = $leftc + 50;} else { $leftc = $leftc + $shuruna;}
if ($mesto == 27) { $topc = $topc+$vusota; $leftc = 0; $mesto = 1; $ryad = $ryad + 1;}
if ($i == 208) { $topc = $topc + 25; }
}

echo "</div>";

Спустя 12 минут, 8 секунд (23.10.2011 - 22:39) ZSH написал(а):
1.$myrow = mysql_fetch_array($result); после запроса лишнее

2.внутрь цикла while для теста вставить echo 'TEST<br />';

3.сколько бы цикл while не выполнялся переменные $circle и $title будут безсмысленно перезаписыватся

Спустя 9 минут, 35 секунд (23.10.2011 - 22:49) Herotic написал(а):
3.сколько бы цикл while не выполнялся переменные $circle и $title будут безсмысленно перезаписыватся

Блин, точно, вот почему оно не пашет. Цикл выполняется, все нормально )

Помогите, пожалуйста, как сделать, чтобы оно там все работало?

Спустя 4 минуты, 14 секунд (23.10.2011 - 22:53) alexbel2404 написал(а):
вывод перемести внутрь цикла.

Спустя 2 минуты, 44 секунды (23.10.2011 - 22:56) ZSH написал(а):
объясни зачем цикл for совсем не пойму smile.gif

Спустя 52 минуты, 4 секунды (23.10.2011 - 23:48) Herotic написал(а):
Что-то оно вообще не пашет, гон какой-то выводит :(

Товарищ подсказал сделать таким образом:

$result = mysql_query("SELECT * FROM br WHERE vu='$id' AND place='par' ORDER BY `ryad`, `mesto`");
$myrow = mysql_fetch_array($result);
//...
for ($i=1;$i<=442;$i++)
{
//...

if ($i == (($myrow['ryad'] - 1) * 26) + $myrow['mesto'])
{
// ряд/место совпдает, делаем что нужно
$myrow = mysql_fetch_array($result);
}
else
{
// делаем что-то другое
}
//...
}


Но оно тоже не работает, только первый кружок из базы выделяет правильно. А дальше не пашет.

Спустя 6 минут, 10 секунд (23.10.2011 - 23:54) Herotic написал(а):
Разобрался почему не работает, потому что сортируется таблица таким образом:
user posted image

А нужно немного по другому )

Спустя 5 минут, 35 секунд (24.10.2011 - 00:00) ZSH написал(а):
<?php

echo "<div id='par'>";
$ryad = 1;
$mesto = 1;
$leftc = 0;
$topc = 5;
$margin = -7;

if ($mesto < 10){ $margin = -2; }
if ($mesto >= 10 && $mesto < 19){ $margin = -6; }
if ($mesto > 19){ $margin = -5; }
if ($mesto == 1){ $margin = -3; }

$result = mysql_query("SELECT * FROM br WHERE vu='$id' AND place='par'");
while ($myrow = mysql_fetch_array($result))
{
if ($myrow['ryad'] == $ryad && $myrow['mesto'] == $mesto)
{
if ($myrow['status'] == 'o')
{
$circle = "circleo";
$title = "Желтый";
}
if ($myrow['status'] == 'p')
{
$circle = "circlep";
$title = "Красный";
}
}

else
{
$circle = "circle parcircle";
$title = 'Свободный';
}

echo '<div class="' . $circle . '" style="left:' . $leftc . 'px; top:' . $topc . 'px;" title="' . $title . '"><span class="textincircle" style="width:12px;height:12px;left:50%;top:50%;position:absolute;margin-top:' . $otsuptextincircle . 'px;margin-left:' . $margin . 'px"> ' . $mesto . ' </span></div>';

$mesto++;
if ($mesto == 9 || $mesto == 19){ $leftc = $leftc + 50; }else{ $leftc = $leftc + $shuruna; }
if ($mesto == 27){ $topc = $topc + $vusota; $leftc = 0; $mesto = 1; $ryad = $ryad + 1; }
if ($i == 208){ $topc = $topc + 25; }

}



echo "</div>";

Спустя 10 минут, 54 секунды (24.10.2011 - 00:11) Herotic написал(а):
Всё, проблема решена, просто мои столбцы ряда и места имели текстовый тип. Теперь все сортируется и выводится правильно!

Всем огромное спасибо за оперативную помощь! smile.gif

Спустя 4 дня, 11 часов, 37 минут, 59 секунд (28.10.2011 - 11:49) GuesT написал(а):
while ($myrow[] = mysql_fetch_array($result));


_____________
Быстрый ответ:

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