|
|
|
| Помогите, пожалуйста Сделала прайс, таблица, 4 колонки, самая левая колонка должна показывать номер товара по порядку, т.е. 1,2,3 и т.д. У меня же показывает 1,3,4,7.
Привожу только код цикла:
<?php
//здесь идет запрос к базе, который вытягивает категорию, товары в категории,
//расфасовку товаров и их цену
for($result = mysql_query($query),$b = null,$i=1;$arr = mysql_fetch_assoc($result);$i++) {
$pid = $arr['pid']; //id товара
$ptitle = htmlspecialchars($arr['ptitle']); //заголовок товара
$pdescr = htmlspecialchars($arr['pdescr']); //описание товара
$pop = $arr['pop']; //популярный продукт
$pi = $arr['pi']; //id прайса
$pfas = htmlspecialchars($arr['pfas']); //фасовка
$pprice = htmlspecialchars($arr['pprice']); //цена
$cid = $arr['cid']; //id категории товара
$cname = htmlspecialchars($arr['cname']); //название категории товара
$s = "SELECT COUNT(*) fcount
FROM product_price
WHERE product_id = " . $pid;
$res = mysql_query($s);
if(!$res)exit("Error in" . $s . mysql_error());
$count = mysql_result($res,0);
if($count>1)
$fcount = "rowspan=" . $count;
else $fcount = "";
//категория товара
if($b !=$cid){
$b = $cid;
$price .= '<tr><td colspan = 4><h3>' . $cname . '</h3></td></tr>';
$b1 = 0;
}
if($b1 !=$pid){
$b1 = $pid;
//порядковый номер товара
$price .= '<tr><td ' . $fcount . '>' . $i . '</td>';
//название товара, его описание
$price .= '<td ' . $fcount . '>' . $ptitle . ". " . $pdescr . '</td>';
$b2 = 0;
}
// далее - расфасовка, цена
}
?>
|
Не выходит вот это: $price .= '<tr><td ' . $fcount . '>' . $i . '</td>';
Допустим, посчитать весь товар я могу, куда можно запихнуть цикл? | |
|
|
|
|
|
|
|
для: Лена
(22.12.2009 в 22:54)
| | А чего-то это вы через for? через while же удобнее, нэ? | |
|
|
|
|
|
|
|
для: neadekvat
(22.12.2009 в 23:05)
| | >А чего-то это вы через for? через while же удобнее, нэ?
Нет. Мне через for здесь удобнее. Какая разница, если и то, и то - операторы цикла? | |
|
|
|
|
|
|
|
для: Лена
(22.12.2009 в 23:08)
| | В читабильности разница, очень проблематично понять код (не пеняйте на мой опыт, с переменными ближе к концу намутили кашу)
P.S. И в бд, имхо, название у столбцов плохие:
$pid = $arr['pid']; //id товара
Понятнее либо id (т.е. основной идентификатор), либо product_id
$ptitle = htmlspecialchars($arr['ptitle']); //заголовок товара
product_id
$pdescr = htmlspecialchars($arr['pdescr']); //описание товара
product_desc
$pop = $arr['pop']; //популярный продукт
popular
$pi = $arr['pi']; //id прайса
price_id
$pfas = htmlspecialchars($arr['pfas']); //фасовка
$pprice = htmlspecialchars($arr['pprice']); //цена
эти два даже не могу расшифровать, к чему первая p относится то..
$cid = $arr['cid']; //id категории товара
cat_id
$cname = htmlspecialchars($arr['cname']); //название категории товара
cat_name
Пожалейте человека, который будет после вас работать с этим всем :)
Это мое имхо, конечно же) | |
|
|
|
|
|
|
|
для: neadekvat
(22.12.2009 в 23:14)
| | Это все алиасы :)))
Ладно, вот весь код:
<?php
//соединение с базой
include ("configs/dbopen.php");
//общее количество товаров
$sq = "SELECT COUNT(*) tcount
FROM product";
$res = mysql_query($sq);
if(!$res)exit("Error in" . $sq . mysql_error());
$tcount = mysql_result($res,0);
$query = "
SELECT pr.product_id pid,
pr.product_title ptitle,
pr.product_descr_price pdescr,
pr.popular_product pop,
pp.id pi,
pp.fasovka pfas,
pp.price pprice,
cat.cat_id cid,
cat.cat_name cname
FROM product pr
LEFT JOIN category cat ON pr.cat_id = cat.cat_id
LEFT JOIN product_price pp ON pr.product_id = pp.product_id
WHERE pr.product_id != 49 AND pr.product_id != 50
ORDER BY cid,pid
";
$price = '';
$price .= '<table border = "2">';
for($result = mysql_query($query),$b = null,$i=1;$arr = mysql_fetch_assoc($result);$i++) {
$pid = $arr['pid']; //id товара
$ptitle = htmlspecialchars($arr['ptitle']); //заголовок товара
$pdescr = htmlspecialchars($arr['pdescr']); //описание товара
$pop = $arr['pop']; //популярный продукт
$pi = $arr['pi']; //id прайса
$pfas = htmlspecialchars($arr['pfas']); //фасовка
$pprice = htmlspecialchars($arr['pprice']); //цена
$cid = $arr['cid']; //id категории товара
$cname = htmlspecialchars($arr['cname']); //название категории товара
$s = "SELECT COUNT(*) fcount
FROM product_price
WHERE product_id = " . $pid;
$res = mysql_query($s);
if(!$res)exit("Error in" . $s . mysql_error());
$count = mysql_result($res,0);
if($count>1)
$fcount = "rowspan=" . $count;
else $fcount = "";
//категория товара
if($b !=$cid){
$b = $cid;
$price .= '<tr><td colspan = 4><h3>' . $cname . '</h3></td></tr>';
$b1 = 0;
}
if($b1 !=$pid){
$b1 = $pid;
//порядковый номер товара
$price .= '<tr><td ' . $fcount . '>' . $i . '</td>';
//название товара, его описание
$price .= '<td ' . $fcount . '>' . $ptitle . ". " . $pdescr . '</td>';
$b2 = 0;
}
// расфасовка, цена
if($b2 != $pi){
$b2 = $pi;
$price .= '<td>' . $pfas . '</td>';
$price .= '<td width="50px">' . $pprice . '</td>';
$price .= '</tr>';
for($j=1;$j<$count,$b2 != $pi;$j++){
$price .= '<tr>';
$price .= '<td>' . $pfas . '</td>';
$price .= '<td width="50px">' . $pprice . '</td>';
$price .= '</tr>';
}
}
}
$price .= '</table>';
print $price;
?>
|
| |
|
|
|
|
|
|
|
для: Лена
(22.12.2009 в 23:16)
| | Шота я ужо сплю и нифига не понимаю, но раз уж начал говорить, не могу уйти по-английски)
Не знаю, пробовали вы или нет.. Попробуйте выводить какие-то ключевые переменные (в данном случаи $i) вне всяких проверок, внутренних циклов и тд. То есть сразу под главной строчкой for (по идее то должен идти натуральный ряд..) а потом спускайте все нииже..нииже.. И так, пока получающийся ряд не станет тоже глючить. После какого блока глючит - там и ошибка)
Но вообще, в целом,я бы пересмотрел код, запросы в бд, названия переменных и тд, хотя бы для себя) Закройте это и откройте через месяц..)
SELECT COUNT(*) fcount
Вот, например, что за слово после COUNT(*)? Для чего оно там нужно (просто интересуюсь, в sql не силен) и нужно ли вообще? | |
|
|
|
|
|
|
|
для: neadekvat
(22.12.2009 в 23:27)
| | >Вот, например, что за слово после COUNT(*)? Для чего оно там нужно (просто интересуюсь, в sql не силен) и нужно ли вообще?
Это да. Согласна. Не нужно. Спасибо. | |
|
|
|
|
|
|
|
для: Лена
(22.12.2009 в 23:36)
| | У вас выполняется условие формирования шапки для группы строк - это один проход цикла, затем выполняется условие для вывода строк - опять проход, и т.д., а счетчик то увеличивается с каждым проходом. | |
|
|
|
|
|
|
|
для: sim5
(23.12.2009 в 04:20)
| | Да, я это уже поняла.
У меня товары выводятся на 1,4, 7 и т.д. цикле, 2,3,5,6- циклы считает фасовку товара,
поэтому для товара счетчик считает его порядковый номер как 1,4,7. Как сделать так, чтобы считалось по порядку? Как сделать счетчик, независимый от вывода товара? | |
|
|
|
|
|
|
|
для: Лена
(23.12.2009 в 10:24)
| | А вы представьте такой счетчик вне цикла, и который обновляется только по условию вывода товаров, и все станет на свои места, будет видна "дыра" в коде. Да и действительно - код короткий, но "грузный" для чтения. | |
|
|
|
|
|
|
|
для: sim5
(23.12.2009 в 10:29)
| | Получилось. Спасибо. | |
|
|
|