Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибки - данные из БД не выводятся. AS3 доступ к MySQL средствами PHP (http://www.flasher.ru/forum/showthread.php?t=207246)

mariamarfi 04.04.2014 00:15

Ошибки - данные из БД не выводятся. AS3 доступ к MySQL средствами PHP
 
Вложений: 2
Ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at record_fla::MainTimeline/frame1()

Я, как новичок, решила попробовать на основе источника проверить доступ к MySQL. На сайте ссылки недоступны на скачивания файлов. Чуток изменила я в программе, т.к. не раз выдавали ошибки после компиляции... дело в dataGrid - item. Почему данные из БД не выводятся... Что не так сделала я?

Источник: http://rad-line.blogspot.ru/2009/03/as3-mysql-php.html

Код AS3:

import fl.controls.DataGrid;
 
function readRecord():void
{
        var readRequest:URLRequest = new URLRequest();
        var readLoader:URLLoader = new URLLoader();
        readRequest.url='records.php'+'?command=readRecord&'+Math.random();
        readLoader.addEventListener(Event.COMPLETE, allLoad);
        readLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
        function ioErrorHandler(e:IOErrorEvent):void
        {
                trace("Ошибка чтения");
        }
 
        var myXML:XML;
 
        function allLoad(e:Event):void
        {
                var tempLoader:URLLoader=URLLoader(e.target);
 
                myXML=new XML(tempLoader.data);
                if (myXML!="")
                {
                        for each (var item:XML in myXML.record)
                        {
                                trace("Имя:"+item.name); trace("Очки:"+item.points);//выводим данные
                        }
                }
                else
                {
                        trace("Нет данных");
                }
        }
 
        readLoader.load(readRequest);
}
 
 
function writeRecord(name:String, points:int):void
{
        var saveRequest:URLRequest = new URLRequest();
        var saveLoader:URLLoader = new URLLoader();
        saveRequest.url='records.php'+'?command=writeRecord&name='+name+'&points='+points;
        saveLoader.addEventListener(Event.COMPLETE, allSave);
        saveLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
        function ioErrorHandler(e:IOErrorEvent):void
        {
                trace("Ошибка записи");
        }
 
        function allSave(e:Event):void
        {
                trace("Информация сохранена");
        }
 
        saveLoader.load(saveRequest);
}
 
 
var gridRecord:DataGrid = new DataGrid;
var i: uint;
 
gridRecord.columns=["Место","Имя","Очки"];
 
//Добавление полей
//gridRecord.addItem({Место:i, Имя:item.name, Очки:item.points});
 
var item:Object = {Место:i, Имя:item.name, Очки:item.points};
gridRecord.addItem(item);
        //Удаление всех полей
 
        gridRecord.removeAll();
 
addChild(gridRecord);

PHP код:

<?php
header
("Content-Type: text/xml");
/*
//////Connect to MySQL//////
mysql_connect("localhost", "root", "") or die (mysql_error()); //Открывает соединение с сервером MySQL
mysql_select_db("record_table") or die (mysql_error()); //Выбирает базу данных MySQL
mysql_query("SET NAMES 'utf8'"); //Посылает запрос MySQL
*/
$command = isset($_GET['command']) ? $_GET['command'] : "";
$name = isset($_GET['name']) ? $_GET['name'] : "";
$points = isset($_GET['points']) ? $_GET['points'] : "";

$servername="localhost";// ваш сервер - обычно localhost
$user="root"//ваш_пользователь
$password=""//ваш_пароль
$dbname="record_table"//ваша_база_данных
$dbserver mysql_connect($servername$user$password);
mysql_select_db($dbname$dbserver);

mysql_query("SET NAMES utf8");

if(
$command=="readRecord")
{
    
$query "SELECT * FROM record ORDER BY points DESC LIMIT 0, 8";
    
$result mysql_query($query);
    echo 
'<?xml encoding="utf-8" version="1.0" ?><records>';
    while(
$myrow mysql_fetch_array($result))
    {
        echo 
'<record>';
            echo 
'<name>'.$myrow['name'].'</name>';
            echo 
'<points>'.$myrow['points'].'</points>';
        echo 
'</record>'
    } 
    echo 
'</records>'


if(
$command=="writeRecord")
{
    
$query="INSERT INTO record (name, points) VALUES ('$name', '$points')";
    
$result mysql_query($query);
}

mysql_close($dbserver);

?>

Код:

<?xml version="1.0" encoding="utf-8"?>
<records>
        <record>
                <name>Нина</name>
                <points>1232</content>
        </record>
        <record>
                <name>Инна</name>
                <points>1029</content>
        </record>
        <record>
                <name>Вера</name>
                <points>863</content>
        </record>
</records>


alexandrratush 04.04.2014 02:15

Ошибка вот в этой строчке, если честно не пойму что вы хотели тут сделать:
Код AS3:

var item:Object = {Место:i, Имя:item.name, Очки:item.points};

Вы создали объект item, и используете его поля name и points, которых у него нету.

И если это весь ваш код, то вы не вызываете функции обращения к серверу.
Добавьте кнопку, вешайте на нее слушатель, и вызывайте в нем функцию writeRecord или readRecord.

mariamarfi 04.04.2014 11:21

Вложений: 2
В источнике написано вот так:
Вот пример флешки читающий рекорды из базы данных MySQL используя PHP. Здесь для вывода данных я использовал флешовский компоненты DataGrid и Button. Использование компонентов упрощает проектирование, но несколько увеличивает объем флешки, а также не гарантирует правильную совместимую с вашим приложением работу.
Я добавил компонент DataGrid и назвал его gridRecord. Добавление заголовка осуществляется функцией

gridRecord.columns=["Место","Имя","Очки"];

Добавление полей

gridRecord.addItem({Место:i, Имя:item.name, Очки:item.points});

Удаление всех полей

gridRecord.removeAll();


Я написала изначально эти коды в своей программе, выдаётся ошибка (см в картинке)



Код AS3:

import fl.controls.DataGrid;
 
function readRecord():void
{
        var readRequest:URLRequest = new URLRequest();
        var readLoader:URLLoader = new URLLoader();
        readRequest.url='records.php'+'?command=readRecord&'+Math.random();
        readLoader.addEventListener(Event.COMPLETE, allLoad);
        readLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
        function ioErrorHandler(e:IOErrorEvent):void
        {
                trace("Ошибка чтения");
        }
 
        var myXML:XML;
 
        function allLoad(e:Event):void
        {
                var tempLoader:URLLoader=URLLoader(e.target);
 
                myXML=new XML(tempLoader.data);
                if (myXML!="")
                {
                        for each (var item:XML in myXML.record)
                        {
                                trace("Имя:"+item.name); trace("Очки:"+item.points);//выводим данные
                        }
                }
                else
                {
                        trace("Нет данных");
                }
        }
 
        readLoader.load(readRequest);
}
 
 
function writeRecord(name:String, points:int):void
{
        var saveRequest:URLRequest = new URLRequest();
        var saveLoader:URLLoader = new URLLoader();
        saveRequest.url='records.php'+'?command=writeRecord&name='+name+'&points='+points;
        saveLoader.addEventListener(Event.COMPLETE, allSave);
        saveLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
        function ioErrorHandler(e:IOErrorEvent):void
        {
                trace("Ошибка записи");
        }
 
        function allSave(e:Event):void
        {
                trace("Информация сохранена");
        }
 
        saveLoader.load(saveRequest);
}
 
//======= Из источника http://rad-line.blogspot.ru/2009/03/as3-mysql-php.html
gridRecord.columns=["Место","Имя","Очки"];
 
//Добавление полей
gridRecord.addItem({Место:i, Имя:item.name, Очки:item.points});
 
//Удаление всех полей
gridRecord.removeAll();
//======= /Из источника http://rad-line.blogspot.ru/2009/03/as3-mysql-php.html
 
/* Моё написание
var gridRecord:DataGrid = new DataGrid;
var i: uint;
 
gridRecord.columns=["Место","Имя","Очки"];
 
//Добавление полей
//gridRecord.addItem({Место:i, Имя:item.name, Очки:item.points});
 
var item:Object = {Место:i, Имя:item.name, Очки:item.points};
gridRecord.addItem(item);
        //Удаление всех полей
 
        gridRecord.removeAll();
 
addChild(gridRecord);


mariamarfi 04.04.2014 11:24

Код:

CREATE TABLE `record` (
`id` INT( 3 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 50 ) NOT NULL ,
`points` INT( 6 ) NOT NULL
) ENGINE = MYISAM ;

У меня три столбца: id, name, points.

Как их отобразить во флэше?


Часовой пояс GMT +4, время: 10:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.