Страница 1 из 2

Вывод из базы

Добавлено: 29 янв 2013, 22:11
Fedya
Здравствуйте
У меня в базе есть столбец ID (туда записываются id пользователей), Как вывести аватарки пользователей с этими ID?
Я думал сначала записать в массив, а потом

Код: Выделить всё

VK.api("users.get",
Но там же вроде нельзя массив, там же через запятую надо всех перечислять

Код: Выделить всё

mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());                    mysql_select_db($db_name) or die (mysql_error());                    mysql_query("SET NAMES 'utf8'");                     $query = 'SELECT * FROM `'.$table_name.'` WHERE `idfrom` = '.$_SESSION['viewer_id'].';';                    $sql = mysql_query($query);                    echo    "<table>";                    $i = 0;                    while ($sql_data = mysql_fetch_array($sql)) {                        $i++;                        echo    "<tr>                                        <script type='text/javascript' charset='utf8' >                                            VK.api('users.get', {uids:{$sql_data['idto']},fields:'photo_medium'}, function(data) {                                                document.getElementById('row{$i}').innerHTML = \"<img src='\" + data.response[0].photo_medium + \"'>\";                                            });                                        </script>                                        <td id='row{$i}'>                                        </td>                                </tr>";                    }                    echo "</table>";
Вот так выводит аватарки, но не у всех почему-то
Мне кажется, что это из-за большого кол-ва запросов.
Выводит вот так
http://rghost.ru/43406539/image.png
http://tau.rghost.ru/43406552/image.png

Re: Вывод из базы

Добавлено: 29 янв 2013, 22:17
Александр
Fedya писал(а):Но там же вроде нельзя массив, там же через запятую надо всех перечислять
В чем проблема сделать из массива строку?

Все что после

Код: Выделить всё

$sql = mysql_query($query);
это жуть...

Какие данные ты выбираешь своим запросом? Нужен ли там while ?

Javascript и PHP надо не тупо перемешать, а логически связать. Получи все данные в php, потом используй их в javascript.

Re: Вывод из базы

Добавлено: 29 янв 2013, 22:35
Fedya
Какие данные ты выбираешь своим запросом? Нужен ли там while ?
В смысле? из базы же вывожу, нужно же выводить с 1 по последний, ну можно FOR использовать, если ты про это

Как из массива сделать строку?
Не ну я понимаю, что как-то так, но чувствую, что можно проще :)

Код: Выделить всё

<?php$line = '';while ($sql_data = mysql_fetch_array($sql)) {$line = $line.$sql_data['idto'].',';}//тут надо будет удалить последнюю запятую?><script type='text/javascript' charset='utf8' >VK.api('users.get', {uids:<?php echo $line;?>,fields:'photo_medium'}, function(data) {    document.getElementById('row{$i}').innerHTML = \"<img src='\" + data.response[0].photo_medium + \"'>\";});</script> 

Re: Вывод из базы

Добавлено: 29 янв 2013, 22:46
Александр
Могу предположить, что запрос

Код: Выделить всё

SELECT * FROM `'.$table_name.'` WHERE `idfrom` = '.$_SESSION['viewer_id'].';
выбирает только одного пользователя по viewer_id.
Fedya писал(а):Как из массива сделать строку?
Зависит от языка программирования. Либо специальной функцией типа implode (php), join (js), либо пройтись циклом по массиву и записать данные в строку.

Код: Выделить всё

 <?$query = 'SELECT * FROM `'.$table_name.'` WHERE `idfrom` = '.$_SESSION['viewer_id'].';';$sql = mysql_query($query); $uids_arr = array();while ($sql_data = mysql_fetch_array($sql)) {    $uids_arr[] = $sql_data['idto'];}$uids = implode(',',$uids_arr)?> <script type='text/javascript' charset='utf8' >    VK.api('users.get', {uids:{<?=$uids?>},fields:'photo_medium'}, function(data) {         var users_table = '<table>';                for (var i=0; i<frCount; i++) {            users_table += '<tr>\                            <td>' + data.response[i].first_name + ' ' + data.response[i].last_name + '</td>\                            <td><img src="' + data.response[i].photo_medium + '" /></td>\                        </tr>';        }                users_table += '</table>';         document.getElementById('users_block').innerHTML = users_table;    });</script><div id="users_block"></div>
Код не проверял, могут быть ошибки. Только изучи его, пожалуйста. Если что-то непонятно - спроси.

Re: Вывод из базы

Добавлено: 29 янв 2013, 23:22
Fedya
выбирает только одного пользователя по viewer_id.
А, вы про это, не совсем одного, просто все поля, где есть этот id, поэтому while и использовал.

Код: Выделить всё

     <script type='text/javascript' charset='utf8' >    VK.api('users.get', {uids:'<?=$uids?>',fields:'photo_medium'}, function(data) {         var users_table = '<table>';               for (var i=0; i<<?=$frCount?>; i++) {            users_table += '<tr><td><img src="' + data.response[i].photo_medium + '"></td></tr>';        }               users_table += '</table>';         document.getElementById('users_block').innerHTML = users_table;    });    </script> 
Выводит ошибку

Код: Выделить всё

Uncaught TypeError: Cannot read property 'photo_medium' of undefined 
Не понимаю из-за чего, вроде все верно

Re: Вывод из базы

Добавлено: 30 янв 2013, 21:31
Александр

Код: Выделить всё

var users_count = data.response.length;for (var i=0; i<users_count; i++) {
Что находится в data? Какой ответ возвращает сервер api? Используй Charles.

Re: Вывод из базы

Добавлено: 30 янв 2013, 21:53
Fedya
Так почти работает, но

Код: Выделить всё

var users_count = data.response.length;
выдает 1

Re: Вывод из базы

Добавлено: 30 янв 2013, 22:15
Fedya
Изображение
То, что uids одинаковые - так и должно быть

Re: Вывод из базы

Добавлено: 30 янв 2013, 22:59
Serge
Fedya писал(а):Изображение
То, что uids одинаковые - так и должно быть
АПИ вернет только 1 ответ на каждый уид, он не будет их множить, как это делаете Вы

Re: Вывод из базы

Добавлено: 30 янв 2013, 23:13
Fedya
АПИ вернет только 1 ответ на каждый уид
Я понимаю
он не будет их множить, как это делаете Вы
Что я не так сделал?