[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл дописыает лишнее
Игорь_Vasinsky
Есть БД с ячейками zaim, sro, start, end
вывожу из них данный (которые ввиде массивов)

while($row = mysql_fetch_array($res)){

//Если массив содержит 1 элемент то вывод
//"Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0]." г.Окончание: $end[0] г


if($count_zaim == 1)
{
$zaim_need = "<b>Кредит: </b>
<i>"
.$zaim[0]." руб.</i>
<b>Срок: </b> <i>"
.$srok[0]." мес.</i>
<b>Начало: </b> <i>"
.$start[0]." г.</i>
<b>Окончание: </b> <i>"
.$end[0]." г</i><br/>";
}

//Если массив содержит более 1 элемента то вывод
//"1.Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0]." г.Окончание: $end[0] г
//2.Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0]." г.Окончание: $end[0] г
//3.Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0]." г.Окончание: $end[0] г



elseif($count_zaim > 1)
{
for($z = 0; $z <= $count_zaim-1; $z++)
{
$j = $z+1;
$zaim_need.= $j.". <b>Кредит: </b>
<i>"
.$zaim[$z]." руб.</i>
<b>Срок: </b> <i>"
.$srok[$z]." мес.</i>
<b>Начало: </b> <i>"
.$start[$z]." г.</i>
<b>Окончание: </b>
<i>"
.$end[$z]." г</i><br/>";
}

}


Если в ячейке массив с 2 и более элемнтами - я использую цикл FOR
и делаю вывод $zaim_need. - z раз

Использую именно такой пример с точкой $zaim_need. чтоб дописывать переменую.

Так вот - этот мой блин код выводит так:

1 запрос из цикла WHILE (выборка из БД)
1. Кредит: 10000 руб. Срок: 1 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г
2. Кредит: 120000 руб. Срок: 6 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г


2 запрос из цикла WHILE (выборка из БД)
1. Кредит: 10000 руб. Срок: 1 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г
2. Кредит: 120000 руб. Срок: 6 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г

1. Кредит: 12000 руб. Срок: 1 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г
2. Кредит: 1000 руб. Срок: 1 мес. Начало: 15.03.2011 г. Окончание: 08.03.2049 г


Т.е. если предъидущая ячейка содержала массив - то пре выводе следующей - в начало дописывается предъидущая

это потому что я использую склеивание переменных при $zaim_need.=

Ни как не врублюсь как от этой ерези избавиться.



Спустя 6 минут, 25 секунд (15.03.2011 - 22:43) neadekvat написал(а):
Покажите, как и где определяется переменная $count_zaim

Спустя 4 минуты, 7 секунд (15.03.2011 - 22:47) Игорь_Vasinsky написал(а):
Ну тут то я не мог накасарезить

$zaim = explode(":", $row[razmerzaima]);
$count_zaim = count($zaim);
$srok = explode(":", $row[srokzaim]);
$start = explode(":", $row[startzaim]);
$end =explode(":", $row[endzaim]);

Спустя 2 минуты, 6 секунд (15.03.2011 - 22:49) neadekvat написал(а):
Хм, у вас, видимо, тоже беда с базой данных.. Отсюда и проблемы. Какая структура?

Спустя 2 минуты, 51 секунда (15.03.2011 - 22:52) Игорь_Vasinsky написал(а):
Простая. Причём здесь база?

я просто в запарке такой хлам написал и гдето накасарезил

если в массиве 1 элемент - то строчкавыходит как надо и не дописывается из предъидущей.

Спустя 3 минуты, 21 секунда (15.03.2011 - 22:56) neadekvat написал(а):
В общем, честно, я не врубаюсь в вашу логику. Но попробуйте так:
elseif($count_zaim > 1)
{
$zaim_need = null;
for($z = 0; $z <= $count_zaim-1; $z++)
{
$j = $z+1;
$zaim_need.= $j.". <b>Кредит: </b>

Спустя 4 минуты, 20 секунд (15.03.2011 - 23:00) Игорь_Vasinsky написал(а):
Цитата
$zaim_need = null;

это строка е даст вывод для ячеек с массивами из 1го элемента.

Логика проста:
Если в ячейке массив из 1го элемента (строка) - то вывести её.

Если в ячейке массив из 2х и более элементов - то в цикле вывести все элементы и склеить в одну переменную при выводе.

Спустя 1 минута, 10 секунд (15.03.2011 - 23:01) Trianon написал(а):
База тут при том, что в полях таблиц массивы данных не хранят.
Это вызывает нарушение нормальных форм, ну и как следствие, полную чехарду в процессе разработки и модификации.

Так что неудивительно, что вышел косорез в результате.

Спустя 27 секунд (15.03.2011 - 23:01) neadekvat написал(а):
Игорь_Vasinsky, вы попробовали предложенный вариант?

Спустя 6 минут, 52 секунды (15.03.2011 - 23:08) Игорь_Vasinsky написал(а):
Цитата
База тут при том, что в полях таблиц массивы данных не хранят.


епт. ну это виртуальный массив, а по сути строка:

var:var:var - разделитель двоеточие

Спустя 1 минута, 52 секунды (15.03.2011 - 23:10) Trianon написал(а):
суть-то от этого не меняется.
Все равно набор данных, доступ к которым нужен поэлементно.

Спустя 47 секунд (15.03.2011 - 23:11) Игорь_Vasinsky написал(а):
Цитата
Игорь_Vasinsky, вы попробовали предложенный вариант?


как я и говорил - то же самое тока при 1элементе массива - вывода нету

Спустя 27 секунд (15.03.2011 - 23:11) walerus написал(а):
Попробуйте так

<?php
while($row = mysql_fetch_array($res)){

$zaim_need = ''; // Обнулили переменную

/*
* Если массив содержит 1 элемент то вывод
* Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0] г. Окончание: $end[0] г
*
*/


if($count_zaim == 1)
{
// На мой взгляд так удобнее, при необходимости добавить/убрать данные

$zaim_need = '1.'." <b>Кредит: </b>";
$zaim_need .= "<i>".$zaim[0]." руб.</i>";
$zaim_need .= "<b>Срок: </b> <i>".$srok[0]." мес.</i>";
$zaim_need .= "<b>Начало: </b> <i>".$start[0]." г.</i>";
$zaim_need .= "<b>Окончание: </b> <i>".$end[0]." г.</i>";
$zaim_need .= "\n<br>";

echo $zaim_need;
flush();
}
else
{
/*
* Если массив содержит более 1 элемента то вывод
* 1. Кредит: $zaim[0] руб. Срок: $srok[0] мес. Начало: $start[0] г. Окончание: $end[0] г
* 2. Кредит: $zaim[1] руб. Срок: $srok[1] мес. Начало: $start[1]." г.Окончание: $end[1] г
* 3. Кредит: $zaim[2] руб. Срок: $srok[2] мес. Начало: $start[2]." г.Окончание: $end[2] г
*
*/


foreach($zaim as $number => $data)
{
$zaim_need = ($number + 1)." <b>Кредит: </b>"; // ($number + 1) - что бы список начался не с "0", а с "1"
$zaim_need .= "<i>".$zaim[$number]." руб.</i>";
$zaim_need .= "<b>Срок: </b> <i>".$srok[$number]." мес.</i>";
$zaim_need .= "<b>Начало: </b> <i>".$start[$number]." г.</i>";
$zaim_need .= "<b>Окончание: </b> <i>".$end[$number]." г.</i>";
$zaim_need .= "\n<br>";

echo $zaim_need;
flush();
}
}
}

?>

Спустя 1 минута, 26 секунд (15.03.2011 - 23:13) walerus написал(а):
Возможно проблема была в том что Вы не сбрасывали переменную - "$zaim_need" и foreach - на мой взгляд веселее, чем for, ну а там, как Вам угодно )

Спустя 18 секунд (15.03.2011 - 23:13) Игорь_Vasinsky написал(а):
Цитата
суть-то от этого не меняется.


Как это ? запрос он и в африке запрос;

Найди 2 отличия в запросе:

1. Ячейка содержит: бла-бла-бла
2. Ячейка содержит: бла-бла-бла:бла-бла-бла:бла-бла-бла

Я уже после вывода работаю с массивом..

Спустя 49 секунд (15.03.2011 - 23:14) neadekvat написал(а):
Игорь_Vasinsky, существует понятие "нормальной формы", у нее есть несколько уровней. Вы, кажется, нарушаете даже первую.

Спустя 1 минута, 53 секунды (15.03.2011 - 23:16) Игорь_Vasinsky написал(а):
walerus

Ты гений!

Цитата
Возможно проблема была в том что Вы не сбрасывали переменную


Всё работает!

А то база, массивы.... ОБНУЛЕНИЕ - вот в чём смла!

Спустя 49 секунд (15.03.2011 - 23:17) neadekvat написал(а):
Цитата (Игорь_Vasinsky @ 15.03.2011 - 23:16)
ОБНУЛЕНИЕ - вот в чём смла!

Вы не поверите.. Хотя, что вам объяснять.

Спустя 1 минута, 22 секунды (15.03.2011 - 23:18) walerus написал(а):
Спасибо )), если не трудно я там Пост создал ), помогите если в курсе как)

Спустя 6 минут, 17 секунд (15.03.2011 - 23:24) Guest написал(а):
neadekvat
Цитата
существует понятие "нормальной формы",

существует много понятий, а я не понял про что ты.

Спустя 9 минут, 15 секунд (15.03.2011 - 23:34) Игорь_Vasinsky написал(а):
Цитата
Вы не поверите.. Хотя, что вам объяснять.


ты это про что?

За участие вем спасибо!

Спустя 14 минут, 14 секунд (15.03.2011 - 23:48) neadekvat написал(а):
Цитата (Guest @ 15.03.2011 - 23:24)
существует много понятий, а я не понял про что ты.

Спустя 11 минут, 44 секунды (16.03.2011 - 00:00) Snus написал(а):
Игорь_Vasinsky
А чем такая структура не нравится?
id | userid | razmerzaima | srokzaima | startzaim
1 | 666 | 9000.05 | 5 | 2010-01-20
2 | 666 | 6500 | 7 | 2010-01-25

SELECT * FROM `zaim` WHERE `userid` = '666'

И endzaima можно высчитать из srokzaima + startzaima

Спустя 25 минут, 38 секунд (16.03.2011 - 00:25) Игорь_Vasinsky написал(а):
Snus
да нет., это всё на скорую руку и черз ж...

Спустя 2 минуты, 16 секунд (16.03.2011 - 00:27) Игорь_Vasinsky написал(а):
Тема закрыта.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

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