Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите оформить таблицу как во вложении. Есть идеи? Как реализовать?
 
 автор: Oleg2016   (12.02.2016 в 11:12)   письмо автору
209.8 Кб
 
 

Помогите оформить таблицу как во вложении. Есть идеи? Как реализовать?Если есть возможность то покажите с примерами

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" Content="text/html; Charset=Windows-1251">
<style>
body {
width: 1200px;
margin: 40px auto;
font-family: 'trebuchet MS', 'Lucida sans', Arial;
font-size: 14px;
color: #444;
}

table {
*border-collapse: collapse; /* Для IE7 и старше */
border-spacing: 0;
width: 100%;
}

.bordered {
border: solid #ccc 1px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 1px 1px #ccc;
-moz-box-shadow: 0 1px 1px #ccc;
box-shadow: 0 1px 1px #ccc;
}

.bordered tr:hover {
background: #fbf8e9;
-o-transition: all 0.1s ease-in-out;
-webkit-transition: all 0.1s ease-in-out;
-moz-transition: all 0.1s ease-in-out;
-ms-transition: all 0.1s ease-in-out;
transition: all 0.1s ease-in-out;
}

.bordered td, .bordered th {
border-left: 1px solid #ccc;
border-top: 1px solid #ccc;
padding: 10px;
text-align: left;
}

.bordered th {
background-color: #dce9f9;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebf3fc), to(#dce9f9));
background-image: -webkit-linear-gradient(top, #ebf3fc, #dce9f9);
background-image: -moz-linear-gradient(top, #ebf3fc, #dce9f9);
background-image: -ms-linear-gradient(top, #ebf3fc, #dce9f9);
background-image: -o-linear-gradient(top, #ebf3fc, #dce9f9);
background-image: linear-gradient(top, #ebf3fc, #dce9f9);
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,.8) inset;
-moz-box-shadow:0 1px 0 rgba(255,255,255,.8) inset;
box-shadow: 0 1px 0 rgba(255,255,255,.8) inset;
border-top: none;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
}

.bordered td:first-child, .bordered th:first-child {
border-left: none;
}

.bordered th:first-child {
-moz-border-radius: 6px 0 0 0;
-webkit-border-radius: 6px 0 0 0;
border-radius: 6px 0 0 0;
}

.bordered th:last-child {
-moz-border-radius: 0 6px 0 0;
-webkit-border-radius: 0 6px 0 0;
border-radius: 0 6px 0 0;
}

.bordered tr:last-child td:first-child {
-moz-border-radius: 0 0 0 6px;
-webkit-border-radius: 0 0 0 6px;
border-radius: 0 0 0 6px;
}

.bordered tr:last-child td:last-child {
-moz-border-radius: 0 0 6px 0;
-webkit-border-radius: 0 0 6px 0;
border-radius: 0 0 6px 0;
}


</style>
</head>
<body>
<?php
$host="192.168.218.119";
$user="root";
$pw="123456";
$db="allprint";
$today = date("d.m.Y");
$connection=mysql_connect($host,$user,$pw) or die("Ошибка соединения");
mysql_select_db($db) or die("Ошибка соединения с базой данных");
$query="select Block AS 'Блок', Unit AS 'Подразделение', Xnumber AS 'Номер Xerox', Model As 'Модель', Snumber As 'Серийный номер', IPaddress As 'IP адрес', Count As 'Всего отпечатков' from print";
$result=mysql_query($query) or die ("Ошибка в запросе");
if (mysql_num_rows($result)>0)
{
echo "<h2>Статистика печати: $today</h2> ";
echo "<br>";
echo "<table class='bordered'>";
echo "<thead>
<tr>
<th><b>Блок</b></th>
<th><b>Подразделение</b></th>
<th><b>Номер Xerox</b></th>
<th><b>Модель</b></th>
<th><b>Серийный номер</b></th>
<th><b>IP адрес</b></th>
<th><b>Всего отпечатков</b></th>
</tr>
</thead>";
while ($row=mysql_fetch_row($result))
{
echo "<tr>";
echo "<td>" . $row[0] . "</td>";
echo "<td>" . $row[1] . "</td>";
echo "<td>" . $row[2] . "</td>";
echo "<td>" . $row[3] . "</td>";
echo "<td>" .$row[4] . "</td>";
echo "<td>" ."<a href='http://$row[5]'> $row[5]</a>" . "</td>";
echo "<td>" . $row[6] . "</td>";
echo "</tr>";
}
echo "</table>";
}
else {
echo "Таблица пустая";
}
mysql_free_result($result);
mysql_close($connection);
?>
</body>
</html>

  Ответить  
 
 автор: elenaki   (12.02.2016 в 11:42)   письмо автору
 
   для: Oleg2016   (12.02.2016 в 11:12)
 

РознЕчный??? Не буду помогать. Гугль поможет.

  Ответить  
 
 автор: Oleg2016   (12.02.2016 в 12:11)   письмо автору
 
   для: elenaki   (12.02.2016 в 11:42)
 

Если есть ссылка скиньте не нашел

  Ответить  
 
 автор: confirm   (12.02.2016 в 14:54)   письмо автору
 
   для: Oleg2016   (12.02.2016 в 11:12)
 

Накошмарено до ужаса. Во первых для чего такие алиасы 'Подразделение', да и вообще зачем они, если выбирается индексный массив данных - mysql_fetch_row($result)?

Пора забывать о MySQL, она более не поддерживается РНР, либо mysqli, либо PDO, и второе предпочтительнее. Далее под PDO, иначе предварительно получить из ресурса ассоциативный массив данных.

<?
//это запрос
$query "SELECT block, unit, xnumber, model, snumber, ipaddress, count FROM print ORDER BY block, unit";
//получить все данные как ассоциативный массив, описание PDO смотреть в руководстве
$q $dbh->query($query)->fetchAll(PDO::FETCH_ASSOC);
//получить количество родительских записей block и unit определяющих число объединяемых строк таблицы
$row_block array_count_values(array_column($q'block'));
$row_unit array_count_values(array_column($q'unit'));
$block $unit null;
//вывод таблицы
$tbl '<table  class="bordered">
 <tr>
  <td>Блок</td>
  <td>Подразделение</td>
  <td>Номер Xerox</td>
  <td>Модель</td>
  <td>Серийный номер</td>
  <td>IP адрес</td>
  <td>Всего отпечатков</td>
 </tr>'
;

foreach(
$q as $v) {
    if(
$block != $v['block']) {
        
$block $v['block'];
        
$tbl .= '<tr><td rowspan="'.$row_block[$block].'">'.$block.'</td>';
    }
    if(
$block == $v['block'] && $unit != $v['unit']) {
        
$unit $v['unit'];
        
$tbl .= '<td rowspan="'.$row_unit[$unit].'">'.$unit.'</td>
                 <td>'
implode('</td><td>'array_slice($v23)) .'</td>
                 <td><a href="http://'
.$v['ipaddress'].'">'.$v['ipaddress'].'</a></td>
                 <td>'
.$v['count'].'</td></tr>';
        continue;
    }
    
$tbl .= '<tr><td>'implode('</td><td>'array_slice($v23)) .'</td>
             <td><a href="http://'
.$v['ipaddress'].'">'.$v['ipaddress'].'</a></td>
             <td>'
.$v['count'].'</td></tr>';    
}

echo 
$tbl '</table>'

  Ответить  
 
 автор: Valick   (12.02.2016 в 21:23)   письмо автору
 
   для: confirm   (12.02.2016 в 14:54)
 

> Пора забывать о MySQL, она более не поддерживается
немного поправлю
MySQL - это название базы данных
mysql_ и mysqli_ - это драйвера для работы с MySQL
PDO - это библиотека (класс) для работы с базами данных (в том числе и с MySQL)
так что не надо забывать про MySQL

  Ответить  
 
 автор: confirm   (12.02.2016 в 21:26)   письмо автору
 
   для: Valick   (12.02.2016 в 21:23)
 

Я это знаю, а PDO это уровень абстракции, и также имеет свои драйверы под конкретную базу данных.
Не надо слов умных, просто нужно забыть об MySQL в чистом виде, в котором она перечисляется в списке в руководстве среди mysqli в том числе, и все.

  Ответить  
 
 автор: Valick   (12.02.2016 в 23:18)   письмо автору
 
   для: confirm   (12.02.2016 в 21:26)
 

> Не надо слов умных
не надо громких слов
и кстати mysqli_ был придуман аж в 2004 году, и грамотные люди перешли на него уже давно
про PDO это отдельный разговор, кому надо тот сам нагуглит плюсы и минусы

  Ответить  
 
 автор: confirm   (13.02.2016 в 07:05)   письмо автору
 
   для: Valick   (12.02.2016 в 23:18)
 

Охота просто поговорить или показать эрудированность? Ну тогда лучше вместо слов перепишите sql запрос так, чтобы он уже возвращал полями row_block и row_unit, и тогда товарищу не придется слазить с mysql и получать предварительно массив. От этого будет гораздо больше пользы чем от исторических сведений, и товарищ вас оценит.

  Ответить  
 
 автор: Valick   (13.02.2016 в 09:18)   письмо автору
 
   для: confirm   (13.02.2016 в 07:05)
 

> От этого будет гораздо больше пользы чем от исторических сведений
это ваше сугубо личное мнение, но вы постоянно об этом забываете, полагая что вселенная вращается вокруг вас...

> mysqli_ был придуман аж в 2004 году, и грамотные люди перешли на него уже давно
> тогда товарищу не придется слазить с mysql
сильно сомневаюсь в вашей адекватности

  Ответить  
 
 автор: confirm   (13.02.2016 в 09:52)   письмо автору
 
   для: Valick   (13.02.2016 в 09:18)
 

Зачем вы написали столько постов? Кроме словоблудия в них ничего нет. Охота языком почесать и оставить себя в истории, ну так пусть это будут ваши монологи.

  Ответить  
 
 автор: Oleg2016   (15.02.2016 в 07:26)   письмо автору
 
   для: confirm   (12.02.2016 в 14:54)
 

Пробую запустить ваш, скрипт получаю ошибку:
Fatal error: Call to undefined function array_column() in K:\home\192.168.218.119\www\index.php on line 9
##############################################################################################
<?php
$user="root";
$pass="123456";
$dbh = new PDO('mysql:host=192.168.218.119;dbname=allprint', $user, $pass);
$query = "select Block,Unit, Xnumber, Model, Snumber, IPaddress, Count from print";
//получить все данные как ассоциативный массив, описание PDO смотреть в руководстве
$q = $dbh->query($query)->fetchAll(PDO::FETCH_ASSOC);
//получить количество родительских записей block и unit определяющих число объединяемых строк таблицы
$row_block = array_count_values(array_column($q, 'block'));
$row_unit = array_count_values(array_column($q, 'unit'));
$block = $unit = null;
//вывод таблицы
$tbl = '<table class="bordered">
<tr>
<td>Блок</td>
<td>Подразделение</td>
<td>Номер Xerox</td>
<td>Модель</td>
<td>Серийный номер</td>
<td>IP адрес</td>
<td>Всего отпечатков</td>
</tr>';

foreach($q as $v) {
if($block != $v['block']) {
$block = $v['block'];
$tbl .= '<tr><td rowspan="'.$row_block[$block].'">'.$block.'</td>';
}
if($block == $v['block'] && $unit != $v['unit']) {
$unit = $v['unit'];
$tbl .= '<td rowspan="'.$row_unit[$unit].'">'.$unit.'</td>
<td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href="http://'.$v['ipaddress'].'">'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
continue;
}
$tbl .= '<tr><td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href="http://'.$v['ipaddress'].'">'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
}

echo $tbl . '</table>';

?>

  Ответить  
 
 автор: Valick   (15.02.2016 в 09:49)   письмо автору
 
   для: Oleg2016   (15.02.2016 в 07:26)
 

о чём вам говорит ошибка Fatal error: Call to undefined function array_column() ?

  Ответить  
 
 автор: Oleg2016   (15.02.2016 в 12:11)   письмо автору
 
   для: Valick   (15.02.2016 в 09:49)
 

не определенная функция, у меня все работает на denwer, может с pdo есть какие -то вопросы с подключение?

  Ответить  
 
 автор: Oleg2016   (15.02.2016 в 12:12)   письмо автору
 
   для: Oleg2016   (15.02.2016 в 12:11)
 

возможно решить без pdo?

  Ответить  
 
 автор: confirm   (15.02.2016 в 12:41)   письмо автору
 
   для: Oleg2016   (15.02.2016 в 12:11)
 

Я забыл сказать, что скрипт под версию РНР не ниже 5.5.0, именно в ней появилась функция array_column. Функция полезная, можно заменить ее этим аналогом:

<?
function arrayColumn($a$i) {
    return 
array_values(array_diff(array_map(function($v) use($i) {
        return 
$v[$i];
    }, 
$a), array(null)));
}


Можно без PDO, нужно только предварительно получить все записи в массив. Но только сама SQL таблица в приложении выглядит уж больно идеально, то есть все последующие записи принадлежат блоку "Розничный". Если это так и поле block не содержит других значений, то приведенный код будет работать. Но если поле block содержит иные значения, например, "Оптовый", а для него тоже будут определены значения например "ККО Академический", то таблица будет выведена некорректно. Пояснений по этому поводу не было никаких, но вдруг, поэтому код получающий количество записей нужно изменить:

<?
if($q mysql_query('SELECT block, unit, xnumber, model, snumber, ipaddress, count FROM tmp ORDER BY block, unit')) {
    if(
mysql_num_rows($q)) { 
        
//получить все записи в массив
        
$a = array();
        while(
$a[] = mysql_fetch_assoc($q));

        
$tbl '<table border=1>
                  <tr>
                    <td>Блок</td>
                    <td>Подразделение</td>
                    <td>Номер Xerox</td>
                    <td>Модель</td>
                    <td>Серийный номер</td>
                    <td>IP адрес</td>
                    <td>Всего отпечатков</td>
                  </tr>'
;
        
        
        
$row_unit arrayColumn($a'unit');
        
$block $unit null;
        
$n 0;

        foreach(
array_count_values(arrayColumn($a'block')) as $k=>$v) {
            
$rows_count[$k] = array_count_values(array_slice($row_unit$n$v));
            
$n += $v;
        }

        foreach(
$a as $v) {
            if(
$block != $v['block']) {
                
$block $v['block'];
                
$tbl .= '<tr><td rowspan="'.array_sum($rows_count[$block]).'">'.$block.'</td>';
            }
            
            if(
$block == $v['block'] && $unit != $v['unit']) {
                
$unit $v['unit'];
                
$tbl .= '<td rowspan="'.$rows_count[$block][$unit].'">'.$unit.'</td>
                         <td>'
implode('</td><td>'array_slice($v23)) .'</td>
                         <td><a href=http://'
.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
                         <td>'
.$v['count'].'</td></tr>';
                continue;
            }
    
            
$tbl .= '<tr><td>'implode('</td><td>'array_slice($v23)) .'</td>
                     <td><a href=http://'
.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
                     <td>'
.$v['count'].'</td></tr>';    
        }

        echo 
$tbl '</table>';
    }
}

  Ответить  
 
 автор: Oleg2016   (15.02.2016 в 13:17)   письмо автору
 
   для: confirm   (15.02.2016 в 12:41)
 

Fatal error: Call to undefined function arrayColumn() in K:\home\192.168.218.119\www\index.php on line 119


<?php
$host="192.168.218.119";
$user="root";
$pw="123456";
$db="allprint";
$today = date("d.m.Y");
$connection=mysql_connect($host,$user,$pw) or die("Ошибка соединения");
mysql_select_db($db) or die("Ошибка соединения с базой данных");
if($q = mysql_query('select Block, Unit, Xnumber, Model, Snumber, IPaddress, Count from print')) {
if(mysql_num_rows($q)) {
//получить все записи в массив
$a = array();
while($a[] = mysql_fetch_assoc($q));

$tbl = '<table border=1>
<tr>
<td>Блок</td>
<td>Подразделение</td>
<td>Номер Xerox</td>
<td>Модель</td>
<td>Серийный номер</td>
<td>IP адрес</td>
<td>Всего отпечатков</td>
</tr>';


$row_unit = arrayColumn($a, 'unit');
$block = $unit = null;
$n = 0;

foreach(array_count_values(arrayColumn($a, 'block')) as $k=>$v) {
$rows_count[$k] = array_count_values(array_slice($row_unit, $n, $v));
$n += $v;
}

foreach($a as $v) {
if($block != $v['block']) {
$block = $v['block'];
$tbl .= '<tr><td rowspan="'.array_sum($rows_count[$block]).'">'.$block.'</td>';
}

if($block == $v['block'] && $unit != $v['unit']) {
$unit = $v['unit'];
$tbl .= '<td rowspan="'.$rows_count[$block][$unit].'">'.$unit.'</td>
<td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
continue;
}

$tbl .= '<tr><td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
}

echo $tbl . '</table>';
}
}




?>

  Ответить  
 
 автор: confirm   (15.02.2016 в 13:26)   письмо автору
 
   для: Oleg2016   (15.02.2016 в 13:17)
 

Ну это уже смешно, неужели нужно пояснять, что функцию arrayColumn, код которой в посте показан, и которая взамен встроенной функции array_column, нужно также разместить либо в этом коде, либо в подключаемом файле функций? Ну неужто трудно подумать?

И впредь - не копируйте код целиком для указания ошибки, достаточно сообщения об ошибке.

  Ответить  
 
 автор: Oleg2016   (15.02.2016 в 13:54)   письмо автору
119.9 Кб
 
   для: confirm   (15.02.2016 в 13:26)
 

Результат не неожиданный? В этот раз что не так?

  Ответить  
 
 автор: confirm   (15.02.2016 в 14:35)   письмо автору
 
   для: Oleg2016   (15.02.2016 в 13:54)
 

Вы разницу между моим запросом и вашим не видите?

Учите функции языка, хотя бы те, что даны в примере, а не просто копируйте код и все. А функции, которые просчитывают количество записей полей block и unit по которым и нужно объединение строк, не только их просчитывают, но и определяют порядок их следования, который в свою очередь определяется сортировкой выбора. Вы выкидываете к чертовой матери сортировку из запроса, не знаю по каким соображениям, наверно надеясь, что оно само все разберется, и потом удивляетесь.

Учитесь анализировать код, думать над ним.

  Ответить  
 
 автор: Oleg2016   (18.02.2016 в 12:48)   письмо автору
 
   для: confirm   (15.02.2016 в 14:35)
 

Таблицу получаю, попутно вываливаются ошибки, перед таблицей, может это связанно с версией php? у меня 5.3

Warning: array_sum() expects parameter 1 to be array, null given in K:\home\192.168.218.119\www\index.php on line 53

Warning: array_slice() expects parameter 1 to be array, boolean given in K:\home\192.168.218.119\www\index.php on line 59

Warning: implode() [function.implode]: Invalid arguments passed in K:\home\192.168.218.119\www\index.php on line 59

  Ответить  
 
 автор: Oleg2016   (18.02.2016 в 13:38)   письмо автору
 
   для: Oleg2016   (18.02.2016 в 12:48)
 

а так же с низу появляется пустая строка

  Ответить  
 
 автор: confirm   (18.02.2016 в 17:23)   письмо автору
 
   для: Oleg2016   (18.02.2016 в 12:48)
 

array_sum() expects parameter 1 to be array, null given гласит о том, что функция ожидает первым параметром массив, а ему передается null, то есть не существует указанного массива.
Ошибка implode() [function.implode]: Invalid arguments passed сообщает, что ей переданы не верные аргументы.

Причина первой ошибки означает, что вы делаете что-то не так, так как массива подсчитывающего количество вхождений записей либо нет, либо он пуст, то есть равен null.

Вторая ошибка связана с данными.

От версии РНР это не зависит, указанные функции и в более старших версиях работают одинаково.

  Ответить  
 
 автор: Oleg2016   (19.02.2016 в 07:36)   письмо автору
 
   для: confirm   (18.02.2016 в 17:23)
 

А что делается не так в этом скрипте?
##################################################
<html>
<head>
<title>Статистика печати
</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?php
header('Content-type: text/html; charset=utf-8');
$dnow=date("d.m.Y");
$host="192.168.218.119";
$user="root";
$pw="123456";
$db="allprint";
$connection=mysql_connect($host,$user,$pw) or die("Ошибка соединения");
mysql_select_db($db) or die("Ошибка соединения с базой данных");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
if($q = mysql_query('SELECT block, unit, xnumber, model, snumber, ipaddress, count FROM print ORDER BY block, unit')) {
if(mysql_num_rows($q)) {
//получить все записи в массив
$a = array();
while($a[] = mysql_fetch_assoc($q));
$tbl = '<table border=1>
<thead>
<tr>
<th>Блок</th>
<th>Подразделение</th>
<th>Номер Xerox</th>
<th>Модель</th>
<th>Серийный номер</th>
<th>IP адрес</th>
<th>Всего отпечатков</th>
</tr>
</thead>';
function arrayColumn($a, $i) {
return array_values(array_diff(array_map(function($v) use($i) {
return $v[$i];
}, $a), array(null)));
}

$row_unit = arrayColumn($a, 'unit');
$block = $unit = null;
$n = 0;

foreach(array_count_values(arrayColumn($a, 'block')) as $k=>$v) {
$rows_count[$k] = array_count_values(array_slice($row_unit, $n, $v));
$n += $v;
}

foreach($a as $v) {
if($block != $v['block']) {
$block = $v['block'];
$tbl .= '<tr><td rowspan="'.array_sum($rows_count[$block]).'">'.$block.'</td>';
}

if($block == $v['block'] && $unit != $v['unit']) {
$unit = $v['unit'];
$tbl .= '<td rowspan="'.$rows_count[$block][$unit].'">'.$unit.'</td>
<td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
continue;
}

$tbl .= '<tr><td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';


}
echo $tbl . '</table>';
}
}
?>
</body>
</html>

  Ответить  
 
 автор: confirm   (19.02.2016 в 12:15)   письмо автору
 
   для: Oleg2016   (19.02.2016 в 07:36)
 

Надо вывести данные полученные из базы (только не все записи, хватит и 10 строк), массив $a, и массивы $row_unit и $rows_count и посмотреть их содержание.

Код выставляемый в сообщениях нужно форматировать, а для этого заключать его в теги [сode][/сode], я же не вываливаю вам код как просто текст.

  Ответить  
 
 автор: Oleg2016   (19.02.2016 в 12:54)   письмо автору
 
   для: confirm   (19.02.2016 в 12:15)
 

А как поправить?

  Ответить  
 
 автор: confirm   (19.02.2016 в 13:55)   письмо автору
 
   для: Oleg2016   (19.02.2016 в 12:54)
 

Не надо ничего править, если о массивах, нужно вывести их, чтобы видеть что твориться, так:

<?
echo '<pre>';
print_r($a);
print_r($row_unit);
print_r($rows_count);
echo 
'</pre>';


Если о своем сообщении, то уже никак, это на будущее - обрамляйте код своей тегами code, чтобы была подсветка и форматирование.

  Ответить  
 
 автор: Oleg2016   (19.02.2016 в 14:45)   письмо автору
 
   для: confirm   (19.02.2016 в 13:55)
 

Я хочу исправить вот эти ошибки. Тот скрипт что вы прислали возвращает эти ошибки, и прибавляет пустую строку в конце таблицы , мне нужно это побороть.
<code>
array_sum() expects parameter 1 to be array, null given гласит о том, что функция ожидает первым параметром массив, а ему передается null, то есть не существует указанного массива.
Ошибка implode() [function.implode]: Invalid arguments passed сообщает, что ей переданы не верные аргументы.
</code>
<code>
<html>
<head>
<title>Статистика печати
</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<?php
header('Content-type: text/html; charset=utf-8');
$dnow=date("d.m.Y");
$host="192.168.218.119";
$user="root";
$pw="123456";
$db="allprint";
$connection=mysql_connect($host,$user,$pw) or die("Ошибка соединения");
mysql_select_db($db) or die("Ошибка соединения с базой данных");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
if($q = mysql_query('SELECT block, unit, xnumber, model, snumber, ipaddress, count FROM print ORDER BY block, unit')) {
if(mysql_num_rows($q)) {
//получить все записи в массив
$a = array();
while($a[] = mysql_fetch_assoc($q));
$tbl = '<table border=1>
<thead>
<tr>
<th>Блок</th>
<th>Подразделение</th>
<th>Номер Xerox</th>
<th>Модель</th>
<th>Серийный номер</th>
<th>IP адрес</th>
<th>Всего отпечатков</th>
</tr>
</thead>';
function arrayColumn($a, $i) {
return array_values(array_diff(array_map(function($v) use($i) {
return $v[$i];
}, $a), array(null)));
}

$row_unit = arrayColumn($a, 'unit');
$block = $unit = null;
$n = 0;

foreach(array_count_values(arrayColumn($a, 'block')) as $k=>$v) {
$rows_count[$k] = array_count_values(array_slice($row_unit, $n, $v));
$n += $v;
}

foreach($a as $v) {
if($block != $v['block']) {
$block = $v['block'];
$tbl .= '<tr><td rowspan="'.array_sum($rows_count[$block]).'">'.$block.'</td>';
}

if($block == $v['block'] && $unit != $v['unit']) {
$unit = $v['unit'];
$tbl .= '<td rowspan="'.$rows_count[$block][$unit].'">'.$unit.'</td>
<td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';
continue;
}

$tbl .= '<tr><td>'. implode('</td><td>', array_slice($v, 2, 3)) .'</td>
<td><a href=http://'.$v['ipaddress'].'>'.$v['ipaddress'].'</a></td>
<td>'.$v['count'].'</td></tr>';


}
echo $tbl . '</table>';
}
}



?>
</body>
</html>



</code>

PS: теги не работают :)

  Ответить  
 
 автор: confirm   (19.02.2016 в 14:57)   письмо автору
 
   для: Oleg2016   (19.02.2016 в 14:45)
 

Когда пишите сообщение в форме справа видно сообщение "Используйте теги для выделения текста"? Нужно только щелкнуть по ВВ тегу, [сode][/сode] и внутрь этих тегов поместить код, все. А то что вы сами написали <code></code>, это не ВВ-теги, и они не будут обрабатываться.

Я вас просил показать содержание массивов, кода вашего не нужно. Выполните то что я писал перед циклом foreach, и то что будет выведено покажите здесь. Только если записей много, то скопируйте строк 10 и хватит.

  Ответить  
 
 автор: Oleg2016   (20.02.2016 в 05:52)   письмо автору
 
   для: confirm   (19.02.2016 в 14:57)
 


Array
(
    [0] => Array
        (
            [block] => ИТ
            [unit] => ОИТ
            [xnumber] => 0930070136
            [model] => Xerox_WorkCentre_6505_DN
            [snumber] => 3188387003
            [ipaddress] => 192.168.218.239
            [count] => 1495
        )

    [1] => Array
        (
            [block] => ИТ
            [unit] => ОИТ
            [xnumber] => 0930070136
            [model] => Xerox_WorkCentre_6505_DN
            [snumber] => 3188387003
            [ipaddress] => 192.168.218.239
            [count] => 1569
        )

    [2] => Array
        (
            [block] => Корпоративный
            [unit] => КИБ
            [xnumber] => 0930070125
            [model] => Xerox_WorkCentre_3325
            [snumber] => 3259926474
            [ipaddress] => 192.168.218.247
            [count] => 21670
        )

    [3] => Array
        (
            [block] => Корпоративный
            [unit] => КИБ
            [xnumber] => 0930070125
            [model] => Xerox_WorkCentre_3325
            [snumber] => 3259926474
            [ipaddress] => 192.168.218.247
            [count] => 21698
        )

    [4] => Array
        (
            [block] => Корпоративный
            [unit] => Кредитный
            [xnumber] => 0930070110
            [model] => Xerox_WorkCentre_3315
            [snumber] => 3972680779
            [ipaddress] => 192.168.218.48
            [count] => 11554
        )

    [5] => Array
        (
            [block] => Корпоративный
            [unit] => Кредитный
            [xnumber] => 0930070110
            [model] => Xerox_WorkCentre_3315
            [snumber] => 3972680779
            [ipaddress] => 192.168.218.48
            [count] => 11565
        )

    [6] => Array
        (
            [block] => Корпоративный
            [unit] => ООЮЛ
            [xnumber] => 0930070065
            [model] => HP_LaserJet_M2727nf
            [snumber] => CNHTC3POPS
            [ipaddress] => 192.168.218.43
            [count] => 66604
        )

    [7] => Array
        (
            [block] => Корпоративный
            [unit] => ООЮЛ
            [xnumber] => 0930070114
            [model] => Xerox_WorkCentre_3615
            [snumber] => 3152361342
            [ipaddress] => 192.168.218.137
            [count] => 71869
        )

    

    [132] => 
)
Array
(
    [0] => ОИТ
    [1] => ОИТ
    [2] => КИБ
    [3] => КИБ
    [4] => Кредитный
    [5] => Кредитный
    [6] => ООЮЛ
    [7] => ООЮЛ
    [8] => ООЮЛ
    [9] => ООЮЛ
    [10] => ООЮЛ
    

  Ответить  
 
 автор: confirm   (20.02.2016 в 06:29)   письмо автору
13.7 Кб
 
   для: Oleg2016   (20.02.2016 в 05:52)
 

Почему записи полученные из базы дубликатами по две записи, при этом count у них разный?

Я говорил о трех массивах: данные из базы, массив $row_unit и массив $rows_count. Где третий?

Проверяйте, вот по примеру неких данных:

Array
(
    [0] => Array
        (
            [block] => Другой
            [unit] => ККО Другой
            [xnumber] => 34532
            [model] => 34534
            [snumber] => 564564
            [ipaddress] => 45634
            [count] => 2
        )

    [1] => Array
        (
            [block] => Другой
            [unit] => ККО Другой
            [xnumber] => 563453
            [model] => 234526543
            [snumber] => 34534
            [ipaddress] => 32534
            [count] => 4
        )

    [2] => Array
        (
            [block] => Иной
            [unit] => ККО Академический
            [xnumber] => 53453
            [model] => 564634
            [snumber] => 45345
            [ipaddress] => 3453
            [count] => 5
        )

    [3] => Array
        (
            [block] => Иной
            [unit] => ККО Академический
            [xnumber] => 643453
            [model] => 234235
            [snumber] => 34536
            [ipaddress] => 4657332
            [count] => 7
        )

    [4] => Array
        (
            [block] => Иной
            [unit] => ККО Еще
            [xnumber] => 345362
            [model] => 3465346
            [snumber] => 234234
            [ipaddress] => 3453453
            [count] => 4
        )

    [5] => Array
        (
            [block] => Розничный
            [unit] => ККО Академический
            [xnumber] => 3465346
            [model] => 23523653
            [snumber] => 4536346
            [ipaddress] => 2352345
            [count] => 6
        )

    [6] => Array
        (
            [block] => Розничный
            [unit] => ККО Академический
            [xnumber] => 4534
            [model] => 5745745
            [snumber] => 346436
            [ipaddress] => 457454
            [count] => 7
        )

    [7] => Array
        (
            [block] => Розничный
            [unit] => ККО Успенский
            [xnumber] => 43532452
            [model] => 2342342
            [snumber] => 234523523
            [ipaddress] => 534534
            [count] => 3
        )

    [8] => Array
        (
            [block] => Розничный
            [unit] => ККО Успенский
            [xnumber] => 43543635
            [model] => 352324523
            [snumber] => 4623523
            [ipaddress] => 46534634
            [count] => 5
        )

    [9] => Array
        (
            [block] => Розничный
            [unit] => ККО Успенский
            [xnumber] => 4534632
            [model] => 23452352
            [snumber] => 4563456324
            [ipaddress] => 23523543
            [count] => 5
        )

    [10] => Array
        (
            [block] => Розничный
            [unit] => ККО Юбилейный
            [xnumber] => 574573
            [model] => 656456
            [snumber] => 2342
            [ipaddress] => 22323232
            [count] => 2
        )

    [11] => Array
        (
            [block] => Розничный
            [unit] => ККО Юбилейный
            [xnumber] => 656845
            [model] => 34534634
            [snumber] => 43543
            [ipaddress] => 4323423
            [count] => 3
        )

)


Массив $row_unit будет таким:


Array
(
    [0] => ККО Другой
    [1] => ККО Другой
    [2] => ККО Академический
    [3] => ККО Академический
    [4] => ККО Еще
    [5] => ККО Академический
    [6] => ККО Академический
    [7] => ККО Успенский
    [8] => ККО Успенский
    [9] => ККО Успенский
    [10] => ККО Юбилейный
    [11] => ККО Юбилейный
)


А массив $rows_count будет иметь такую структуру:


Array
(
    [Другой] => Array
        (
            [ККО Другой] => 2
        )

    [Иной] => Array
        (
            [ККО Академический] => 2
            [ККО Еще] => 1
        )

    [Розничный] => Array
        (
            [ККО Академический] => 2
            [ККО Успенский] => 3
            [ККО Юбилейный] => 2
        )

)


и вывод таблицы -->

  Ответить  
 
 автор: Oleg2016   (20.02.2016 в 08:07)   письмо автору
 
   для: Oleg2016   (20.02.2016 в 05:52)
 


Array
(
    [0] => ОИТ
    [1] => ОИТ
    [2] => КИБ
    [3] => КИБ
    [4] => Кредитный
    [5] => Кредитный
    [6] => ООЮЛ
    [7] => ООЮЛ
    [8] => ООЮЛ
    [9] => ООЮЛ
    [10] => ООЮЛ
    [11] => ООЮЛ
    [12] => ДП_УМБ
    [13] => ДП_УМБ
    [14] => ДП_УМБ
    [15] => ДП_УМБ
    [16] => ДП_УМБ
    [17] => ДП_УМБ
    [18] => ДП_УМБ
    [19] => ДП_УМБ
    [20] => ДП_УМБ
    [21] => ДП_УМБ
    [22] => ОО_Волочаевский
    [23] => ОО_Волочаевский
    [24] => ОО_Континентальный
    [25] => ОО_Континентальный
    [26] => ОО_Маршала_Жукова
    [27] => ОО_Маршала_Жукова
    [28] => ОО_Маршала_Жукова
    [29] => ОО_Маршала_Жукова
    [30] => ОО_Проспект_культуры
    [31] => ОО_Проспект_культуры
    [32] => ОО_Проспект_культуры
    [33] => ОО_Проспект_культуры
    [34] => ОО_Юность
    [35] => ОО_Юность
    [36] => ГФМ
    [37] => ГФМ
    [38] => Касса
    [39] => Касса
    [40] => ОТОР
    [41] => ОТОР
    [42] => ОТОР
    [43] => ОТОР
    [44] => ОТОР
    [45] => ОТОР
    [46] => Служба_инкассации
    [47] => Служба_инкассации
    [48] => АХО
    [49] => АХО
    [50] => Бухгалтерия
    [51] => Бухгалтерия
    [52] => Кадры
    [53] => Кадры
    [54] => Приёмная
    [55] => Приёмная
    [56] => Тренера
    [57] => Тренера
    [58] => Юридический
    [59] => Юридический
    [60] => БПК
    [61] => БПК
    [62] => БПК
    [63] => БПК
    [64] => ККО_Академический
    [65] => ККО_Академический
    [66] => ККО_Академический
    [67] => ККО_Академический
    [68] => ККО_Академический
    [69] => ККО_Академический
    [70] => ККО_Академический
    [71] => ККО_Академический
    [72] => ККО_Академический
    [73] => ККО_Академический
    [74] => ККО_Иртыш
    [75] => ККО_Иртыш
    [76] => ККО_Иртыш
    [77] => ККО_Иртыш
    [78] => ККО_Иртыш
    [79] => ККО_Иртыш
    [80] => ККО_Иртыш
    [81] => ККО_Иртыш
    [82] => ККО_Иртыш
    [83] => ККО_Иртыш
    [84] => ККО_Омск-Парк_культуры
    [85] => ККО_Омск-Парк_культуры
    [86] => ККО_Омск-Парк_культуры
    [87] => ККО_Омск-Парк_культуры
    [88] => ККО_Омск-Парк_культуры
    [89] => ККО_Омск-Парк_культуры
    [90] => ККО_Омск-Парк_культуры
    [91] => ККО_Омск-Парк_культуры
    [92] => ККО_Омск-Парк_культуры
    [93] => ККО_Омск-Парк_культуры
    [94] => ККО_Омск-Парк_культуры
    [95] => ККО_Омск-Парк_культуры
    [96] => ККО_Омск-Тополиный
    [97] => ККО_Омск-Тополиный
    [98] => ККО_Омск-Тополиный
    [99] => ККО_Омск-Тополиный
    [100] => ККО_Омск-Тополиный
    [101] => ККО_Омск-Тополиный
    [102] => ККО_Омск-Тополиный
    [103] => ККО_Омск-Тополиный
    [104] => ККО_Омск-Тополиный
    [105] => ККО_Омск-Тополиный
    [106] => ККО_Омск-Успенский
    [107] => ККО_Омск-Успенский
    [108] => ККО_Омск-Успенский
    [109] => ККО_Омск-Успенский
    [110] => ККО_Омск-Успенский
    [111] => ККО_Омск-Успенский
    [112] => ККО_Омск-Успенский
    [113] => ККО_Омск-Успенский
    [114] => ККО_Омск-Успенский
    [115] => ККО_Омск-Успенский
    [116] => ККО_Омск-Юбилейный
    [117] => ККО_Омск-Юбилейный
    [118] => ККО_Омск-Юбилейный
    [119] => ККО_Омск-Юбилейный
    [120] => ККО_Омск-Юбилейный
    [121] => ККО_Омск-Юбилейный
    [122] => ОРКК
    [123] => ОРКК
    [124] => ОРКК
    [125] => ОРКК
    [126] => ОРКК
    [127] => ОРКК
    [128] => ОРКК
    [129] => ОРКК
    [130] => СЭБ
    [131] => СЭБ
)

  Ответить  
 
 автор: Oleg2016   (20.02.2016 в 08:10)   письмо автору
 
   для: Oleg2016   (20.02.2016 в 08:07)
 

структура таблицы:

create table print(
IDprint INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Model VARCHAR(100) NOT NULL,
Block VARCHAR(100) NOT NULL,
Unit VARCHAR(80) NOT NULL,
Xnumber VARCHAR(80) NOT NULL,
Dprint DATE NOT NULL,
Snumber VARCHAR(80) NOT NULL,
Count INT NOT NULL,
IPaddress VARCHAR(80) NOT NULL
)
ENGINE=INNODB;


  Ответить  
 
 автор: confirm   (20.02.2016 в 12:35)   письмо автору
 
   для: Oleg2016   (20.02.2016 в 08:10)
 

Опять не вижу - где ваш массив $rows_count?

Структура таблицы мне не нужна, можно только заметить, что использование верхнего регистра в именах полей, это постоянно помнить об этом. По большому счету это кроме геморроя ничего не дает.

  Ответить  
 
 автор: confirm   (19.02.2016 в 16:19)   письмо автору
 
   для: Oleg2016   (19.02.2016 в 14:45)
 

-

  Ответить  
 
 автор: Sfinks   (20.02.2016 в 20:51)   письмо автору
 
   для: confirm   (12.02.2016 в 14:54)
 

Судя по тому, что MySQL написано именно в таком регистре, смею предположить, что речь идет не о способах доступа к мускулу...
А о том, что нужно забыть о самой СУБД.
Не расскажите почему?

  Ответить  
 
 автор: confirm   (12.02.2016 в 21:50)   письмо автору
 
   для: Oleg2016   (12.02.2016 в 11:12)
 

<th><b>Блок</b></th> - содержимое тега TH по умолчанию и так выводится в жирном начертании, так что тег B тут лишний.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования