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

Форум MySQL

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

 

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

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

тема: проблемы с выводом данных и базы данных
 
 автор: zepter   (20.07.2006 в 13:37)   письмо автору
 
 

Суть проблемы такова. Есть БД куда заносятся картинки пользовательские через blob. И так же потом вытаскиваются. Так вот помещаются они туда замечательно а когда начинаешь их вытаскивать
include "inc/config.php";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
$sql="SELECT small_pic FROM 'foto' WHERE 1 ORDER BY 'id' ASC";
$result = mysql_db_query($dbname,$sql);
while($row = mysql_fetch_row($result)) {
header("Content-type: image/jpeg");
echo $a = base64_decode($row[0]);
echo $a = base64_decode($row[1]);
echo $a = base64_decode($row[2]);
echo $a = base64_decode($row[3]);
......
php говорит что $row[1] $row[2] $row[3] и тд не существует. Просто не ГРУЗЯТСЯ. Зато $row[0] грузиться. Захожу в базу там все заечательно все лежит как должно и быть

   
 
 автор: Trianon   (20.07.2006 в 13:41)   письмо автору
 
   для: zepter   (20.07.2006 в 13:37)
 

SELECT small_pic FROM
Вы вытаскиваете только small_pic
Он-то и попадает в row[0]

Между прочим 5 картинок таким способом отобразить не удастся.
Один вызов - один документ.

   
 
 автор: zepter   (20.07.2006 в 13:43)   письмо автору
 
   для: Trianon   (20.07.2006 в 13:41)
 

нет small_pic содержит в себе еще до матери картинок

   
 
 автор: zepter   (20.07.2006 в 13:44)   письмо автору
 
   для: zepter   (20.07.2006 в 13:37)
 

у меня не получается вывестит все остальные row[1] row[2] и тд.

   
 
 автор: Trianon   (20.07.2006 в 13:47)   письмо автору
 
   для: zepter   (20.07.2006 в 13:44)
 

В любом случае, одно поле resultset-а попадает в один элемент массива.
Вы бы привели структуру таблицы и операторы добавления.
А то так непонятно, что у Вас там творится.

   
 
 автор: zepter   (20.07.2006 в 13:51)   письмо автору
 
   для: Trianon   (20.07.2006 в 13:47)
 

стурктура таблицы
id small_pic big_pic content

в id храниться id, small_pic превьюшки, big_pic хранятся сами фотки, content описание к ним.

   
 
 автор: zepter   (20.07.2006 в 13:52)   письмо автору
 
   для: zepter   (20.07.2006 в 13:51)
 

Да забыл small_pic and big_pic this is BLOB

   
 
 автор: Trianon   (20.07.2006 в 14:15)   письмо автору
 
   для: zepter   (20.07.2006 в 13:52)
 

Как-то так...

<?
include "inc/config.php";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
$id = @intval($_GET['id']);
$mode = @intval($_GET['mode']);
$filter $id " and id = $id " '';
switch(
$mode)
{
   case 
0$sel 'id, content'; break;
   case 
1$sel 'small_pic'; break;
   case 
2$sel 'big_pic'; break;
}
   
$sql "SELECT $sel FROM foto WHERE 1 $filter ORDER BY 'id' ASC";
$result mysql_query($sql);
if(!
$result) die("error in $sql:".mysql_error());
if(
$mode == && $id == 0)
    while(
$row mysql_fetch_row($result))
    {
        
$r_id $row[0];
        
$r_content htmlspecialchars($row[1]);
        echo  
"<hr><a href=?mode=2&id=$r_id>"
            
"<img src=?mode=1&id=$r_id></a><br>$r_content<br>\r\n";
    }
else if(
$id != && $mode != 0)
{

    
$row mysql_fetch_row($result);
    if(
$row === false)
       echo 
"No picture N $id";
    else
    {
      
header("Content-type: image/jpeg");
      echo 
$row[0];
    }
}
?>

   
 
 автор: novik_06   (20.07.2006 в 14:15)   письмо автору
 
   для: zepter   (20.07.2006 в 13:52)
 

вы же запускаете цикл.
надо писать так

<?
include "inc/config.php";
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
$sql="SELECT small_pic FROM 'foto' WHERE 1 ORDER BY 'id' ASC";
$result mysql_db_query($dbname,$sql);
header("Content-type: image/jpeg");
while(
$row mysql_fetch_row($result)) {
$a base64_decode($row[0]);
echo 
"$a<br>";
}
?>

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

   
 
 автор: zepter   (20.07.2006 в 14:24)   письмо автору
 
   для: novik_06   (20.07.2006 в 14:15)
 

нет дело не в этом он просто не находит row[1] row[2] row[3]! Выводит только row[0]. Вот в чем дело

   
 
 автор: Trianon   (20.07.2006 в 14:39)   письмо автору
 
   для: zepter   (20.07.2006 в 14:24)
 

если Вы выполните такой запрос:

SELECT small_pic FROM foto WHERE 1 ORDER BY id ASC
то увидите, что он вернет 1(один) столбец. А не 4.
Соответственно, определяется только row[0].
Было б 4 столбца, определилось бы еще row[1], row[2], row[3].

   
 
 автор: zepter   (20.07.2006 в 14:42)   письмо автору
 
   для: Trianon   (20.07.2006 в 14:39)
 

ну и как это теперь сделать?

   
 
 автор: Trianon   (20.07.2006 в 14:59)   письмо автору
 
   для: zepter   (20.07.2006 в 14:42)
 

Примерно как я сказал в 20.07.2006 в 13:52
Я исправил там ошибки - можете попробовать взять код еще раз

   
 
 автор: zepter   (20.07.2006 в 15:07)   письмо автору
 
   для: Trianon   (20.07.2006 в 14:59)
 

Он возвращает 1 столбец и 4 строки так что с запросом все впорядке!

   
 
 автор: Trianon   (20.07.2006 в 15:33)   письмо автору
 
   для: zepter   (20.07.2006 в 15:07)
 

Четыре строки таблицы будут возвращаться последовательно в цикле

while($row = mysql_fetch_row($result)) 
{
   echo $row[0]; 
}

Оператор echo $row[0]; выполнится 4 раза и выдаст каждый из четырех элементов нулевого столбца по очереди.

Применительно к данным типа image/jpg это ничем хорошим не кончится, но это уже проблема другого рода.

   
 
 автор: zepter   (20.07.2006 в 16:15)   письмо автору
 
   для: Trianon   (20.07.2006 в 15:33)
 

не работает выдает только row[0]

   
 
 автор: Trianon   (20.07.2006 в 16:30)   письмо автору
 
   для: zepter   (20.07.2006 в 16:15)
 

Если Вы хотите, чтобы в массиве row оказались все строки результата, писать надо так:

$sql="SELECT content FROM 'foto' WHERE 1 ORDER BY 'id' ASC"; 
$res = mysql_query($sql); $row = array();
while($col = mysql_fetch_row($res))
    $row[] = $col[0];
print_r($row);

   
 
 автор: zepter   (20.07.2006 в 16:37)   письмо автору
 
   для: Trianon   (20.07.2006 в 16:30)
 

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /usr/home/aw154/www/staff/create_img.php on line 7
ВОт что на это он отвечает

   
 
 автор: Trianon   (20.07.2006 в 16:43)   письмо автору
 
   для: Trianon   (20.07.2006 в 16:30)
 

Апострофы вокруг id и foto надо убрать.
А лучше переписать код вот так:
<?
$sql
="SELECT content FROM foto WHERE 1 ORDER BY id ASC";  
$row = array(); 
$res mysql_query($sql) or die("Error in $sql: ".mysql_error());
while(
$col mysql_fetch_row($res)) 
    
$row[] = $col[0]; 
print_r($row); 
?>

   
 
 автор: zepter   (20.07.2006 в 16:52)   письмо автору
 
   для: Trianon   (20.07.2006 в 16:43)
 

теперь пишет вот так Array ( [0] => foto1 [1] => foto2 )

   
 
 автор: Trianon   (20.07.2006 в 16:53)   письмо автору
 
   для: zepter   (20.07.2006 в 16:52)
 

Значит у Вас только две строки в таблице.
А не четыре.
echo count($row); выведет двойку. Вы же этого добиваетесь?

   
 
 автор: zepter   (20.07.2006 в 17:06)   письмо автору
 
   для: Trianon   (20.07.2006 в 16:53)
 

Я так и нихера и не понял.НО СПАСИБО ТЕБЕ БОЛЬШУЩЕЕ У МЕНЯ ВСЕ ЗАРАБОТАЛО

   
Rambler's Top100
вверх

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