Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум веб-мастеров _ Веб-программирование (PHP, CGI, ASP, ...) _ построение таблицы

Автор: Veto-Irina 28.4.2008, 13:55

Здравствуйте, подскажите пожалуйста, rolleyes.gif
Как сделать вывод данных из базы MySQL , чтобы вывод был в формате

Код

|$data1| |$data2|
|$data3| |$data4| ну и т,д,
  Вот цикл вывода
while ($data=mysql_fetch_row($result))
{ echo ("<tr> <td> <img src='$data[0]'</td></tr>");}

Автор: gid 28.4.2008, 16:16

Простой пример:

Код
<?php
    /* Соединение, выбор БД */
    $link = mysql_connect("mysql_host", "mysql_user", "mysql_password")
        or die("Could not connect");
    print "Connected successfully";
    mysql_select_db("my_database") or die("Could not select database");

    /* Выполнение SQL query */
    $query = "SELECT * FROM my_table";
    $result = mysql_query($query) or die("Query failed");

    /* Печать результатов в HTML */
    print "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
  print "\t\t<td>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";

    /* Освобождение resultset */
    mysql_free_result($result);

    /* Закрытие соединения */
    mysql_close($link);
?>

Автор: gid 28.4.2008, 16:19

C разделением данных из массива на N-ное число колонок:

Код

    function print_as_table($rub_array, $colon=2)
    {
    $count = sizeof($rub_array);
    $id = 0;

    if ($colon<$count) $count_r_in_col = ceil($count/$colon);
    else $count_r_in_col = $count;

    $cel_percent = ceil(100/$colon);

    $sh = '
    <table width="100%">
    ';

    for ($c=1; $c<=$count_r_in_col; $c++)
    {
        $sh .= '
        <tr align="left">
        ';
        for ($cr=1; $cr<=$colon; $cr++)
        {
            
            $sh .= "
            <td width=\"$cel_percent%\" valign=\"top\">".$rub_array[$id]."</td>
            ";
            
            if ($id >= $count) break;
            $id++;

        }
        $sh .= '
        </tr>
        ';
    }

    $sh .= '
    </table>
    ';
    return $sh;
    }


Автор: Veto-Irina 29.4.2008, 12:26

Gid, поясните пожалуйста вот эту строчку:

Код

foreach ($line as $col_value) {

И я не пойму как функцию связать с выводом, куда ее ставить?
$rub_array - это переменная в которой хранится массив данных?


Автор: gid 29.4.2008, 13:27

Цитата
foreach ($line as $col_value)

Массив $line, "разбирается" попорядку, от начала к концу, в переменной $col_value содержится значение элемента массива в данный момент времени. подробнее http://forum.wm-help.net/go/?http://php-manual.info/foreach.html


Цитата
И я не пойму как функцию связать с выводом, куда ее ставить?$rub_array - это переменная в которой хранится массив данных?

Ну напримар так:
Код
<?php

function print_as_table($rub_array, $colon=2)
    {
     ....
     }

$colon = 2; // число колонок в таблице

$arr = array("значение 1", "значение 2", "значение 3", "значение 4"); // массив с данными, каждый элемент массива будет в своей ячейке.

echo print_as_table($arr, $colon); // печать результата работы функции

?>

Автор: Veto-Irina 29.4.2008, 14:20

Вы знаете я наверно что-то не догнала unsure.gif , ошибку выдает ,вот такой код у меня

Код

<?php
function print_as_table($rub_array, $colon=2)
{
     }          
   $db_name=" ";    //база данных
    $table=" ";        //таблица
    $link=@mysql_connect("localhost","root"," ") or die ("Подключиться невозможно");
    $db=@mysql_select_db( $db_name,$link) or die ("Подключиться невозможно");
$result=mysql_query("SELECT * FROM $table") or die(mysql_errno($link).mysql_error($link));
   print "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
  echo print_as_table($col_value,$colon);}
        }
        print "\t</tr>\n";
    }
    print "</table>\n";  
  ?>  
Выводит ошибку
Division by zero in /localhost/pp.php on line 11 и в 13
это строчки в функции
Код
(11)  if ($colon<$count) $count_r_in_col = ceil($count/$colon);
           (13) $cel_percent = ceil(100/$colon);        

Автор: gid 29.4.2008, 14:34

А попробуйте так:

Код
<?php
function print_as_table($rub_array, $colon=2)
{
// код функции
}          
   $db_name=" ";    //база данных
    $table=" ";        //таблица
    $link=@mysql_connect("localhost","root"," ") or die ("Подключиться невозможно");
    $db=@mysql_select_db( $db_name,$link) or die ("Подключиться невозможно");
$result=mysql_query("SELECT * FROM $table") or die(mysql_errno($link).mysql_error($link));
$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
    $_str = "";
    foreach($row as $key=>$val)
    {
        $_str .= $key." => ".$val."<br>";
    }
     $t_arr[] = $_str;
}
echo print_as_table($t_arr, 2);
?>

Автор: gid 29.4.2008, 14:42

В последующем нужно будет заменить кусок кода:

Код
    $_str = "";
    foreach($row as $key=>$val)
    {
        $_str .= $key." => ".$val."<br>";
    }
     $t_arr[] = $_str;

на шаблонизатор для записи из данной таблицы, т.е. на что-то типа:
Код
$t_arr[] = <<<EOF
Заголовок: {$row['title']}
<br>
Текст:
<br>
{$row['text']}

EOF;

где title и text - имена полей в таблице mysql

Автор: Veto-Irina 29.4.2008, 15:42

Вариант с этим кодом работает:

Код
    $_str = "";
    foreach($row as $key=>$val)
    {
        $_str .= $key." => ".$val."<br>";
    }
     $t_arr[] = $_str;

а вот когда меняю на шаблонизатор пишет следующее
unexpected $end in (строчке EOF;)
(все скобки проверила все на месте)

Автор: gid 29.4.2008, 15:48

Перед и после EOF; не должно быть побелов или других символов! и сточка с EOF; должна начинаться с новой строки!

Автор: Veto-Irina 29.4.2008, 16:39

А я символы никакие не ставила, я скопировала код и поменяла поля как вы сказали, отсебятину вроде не писала, вот код, ,может я что-то не так поняла blink.gif Надеюсь я вас еще не сильно достала?

Код

$result=mysql_query("SELECT * FROM $table") or die(mysql_errno($link).mysql_error($link));
$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
$t_arr[] = <<<EOF
Заголовок: {$row['partn']}
EOF;
echo print_as_table($t_arr, 2);

Автор: gid 29.4.2008, 17:01

Можно еще так попробовать:

Код

$result=mysql_query("SELECT * FROM $table") or die(mysql_errno($link).mysql_error($link));
$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$t_str = <<<EOF
Заголовок: {$row['partn']}
EOF;
$t_arr[] = $t_str;
}
echo print_as_table($t_arr, 2);

Автор: Veto-Irina 29.4.2008, 17:17

Пишет syntax error, unexpected ']', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /ppp.php on line 43
(43) $t_arr[] = $t_str;
А если написать $t_arr = $t_str; то опять предыдущая ошибка (unexpected $end in)

А нельзя в таком виде оставить по крайней мере выводит то что мне нужно

Код

$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
     $_str = "";
         foreach($row as $val)
     {
     $_str .=" <img src= '$val'>";
}
  $t_arr[] = $_str;
     }
  echo print_as_table($t_arr, 2);

Автор: gid 29.4.2008, 20:35

Цитата
А нельзя в таком виде оставить по крайней мере выводит то что мне нужно

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

ps
правильней было бы тогда писать так:
Код
$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
      foreach($row as $val)
     {
     $t_arr[] = " <img src= '$val'>";
     }
}
echo print_as_table($t_arr, 2);

или еще лучше так:
Код
$t_arr = array();
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
     $t_arr[] = " <img src= '{$row['partn']}'>";
}
echo print_as_table($t_arr, 2);

Автор: Veto-Irina 30.4.2008, 10:43

Спасибо большое Gid за ваши советы и терпение, а в скрипто-писании мне еще разбираться и разбираться rolleyes.gif

Invision Power Board ()
© Invision Power Services ()