flex 3 error

Status
Niet open voor verdere reacties.

as1

Gebruiker
Lid geworden
22 mrt 2009
Berichten
305
Hi, ik weet niet zeker waar ik het moet plaatsen dus ik zet t hier maar neer,
zoals ik eerst in PHP heb gedaan ben ik nu in Adobe Flex 3 een scriptje aan het maken waar de app data uit een databasekolom leest,
dit wil alleeen niet echt lukken, ik heb gebrik gemaakt van een tutorial op en website

Dit is mijn MSXML script
HTML:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    initialize="doSend()" 
    layout="absolute">
<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.rpc.events.ResultEvent; 
        
        [Bindable]
        private var datalist:ArrayCollection;
        
        private function resultHandler(event:ResultEvent):void{                
                datalist = event.result.data.row;
                rowcount = event.result.data.numrows;
                if(rowcount == '1'){
                        datalist.removeItemAt(1);
                }
         }
        public function doSend():void {
            xmlFromDatabase.url = "http://10.0.0.162/xml.php";
            xmlFromDatabase.send();
        }
    ]]>
</mx:Script>
<mx:HTTPService url="http://10.0.0.162/xml.php"
    id="xmlFromDatabase" 
    showBusyCursor="true" 
    result="resultHandler(event)" 
    method="POST" />
    <mx:DataGrid x="10" y="10" dataProvider="{datalist}" id="dg">
        <mx:columns>
            <mx:DataGridColumn headerText="Col1" dataField="Column1Name"/>
            <mx:DataGridColumn headerText="Col2" dataField="Column2Name"/>
        </mx:columns>
    </mx:DataGrid>
</mx:Application>

Dit zijn de errors die flex geeft:

Severity and Description Path Resource Location Creation Time Id
1120: Gebruik van niet-gedefinieerde eigenschap rowcount. jns_beta2_localtest/src jns_beta2_localtest.mxml line 15 1241468860393 17
1120: Gebruik van niet-gedefinieerde eigenschap rowcount. jns_beta2_localtest/src jns_beta2_localtest.mxml line 16 1241468860403 18


En bij het PHP script geeft wampserver een error op line 20

PHP:
<?php
//SQL Connection Info - update with your database, username & password
$connection = mysql_connect('localhost', 'root', '') or die ('cannot reach database');
$db = mysql_select_db("flex") or die ("users_test");

//Change this query as you wish for single or multiple records
$result = mysql_query("SELECT * FROM yourTableName");

//Get the number of rows
$num_row = mysql_num_rows($result);

//Start the output of XML
echo '<?xml version="1.0" encoding="iso-8859-1"?>';
echo "<data>";
echo '<num>' .$num_row. '</num>';
if (!$result) {
   die('Query failed: ' . mysql_error());
}    a
/* get column metadata - column name -------------------------------------------------*/
        $i = 0;
        while ($i < mysql_num_fields($result)) {
              $meta = mysql_fetch_field($result, $i);
            $ColumnNames[] = $meta->name;                      //place col name into array
            $i++;
        }
$specialchar = array("&",">","<");                                         //special characters
$specialcharReplace = array("&amp;","&gt;","&lt;");            //replacement
/* query & convert table data and column names to xml ---------------------------*/

$w = 0;    
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "<row>";
    foreach ($line as $col_value){
        echo '<'.$ColumnNames[$w].'>';
        $col_value_strip = str_replace($specialchar, $specialcharReplace, $col_value);        
        echo $col_value_strip;
        echo '</'.$ColumnNames[$w].'>';
        if($w == ($i - 1)) { $w = 0; }
        else { $w++; }
       }
    echo "</row>";
}
if($num_row  == "1"){
    echo '<row></row>';
}
echo "</data>";
mysql_free_result($result);
?>

BDW
AS1
 
Voor je MSXML: Je wil iets in rowcount opslaan, maar er bestaat geen variabele met de naam rowcount, even aanmaken dus. Ik vermoed dat dit zou kunnen werken (invoegen op regel 12):
Code:
private var rowcount:Number;

De fout in je PHP-script zit op lijn 18 waar er een a staat na de }
Deze a mag gewoon verwijderd worden.
 
de fout van regel 15 is weg en nu in regel 16 deze fout


Severity and Description Path Resource Location Creation Time Id
1176: Vergelijking van een waarde van het type 'static' Number en een mogelijk niet-gerelateerd type String. jns_beta2_localtest/src jns_beta2_localtest.mxml line 16 1241548569707 22

 
ik heb nog op google gezocht maar ik word niets wijzer
 
De foutmelding zegt dat je een String in een Number probeert op te slaan.

Ik had gegokt dat data.numrows een Number bevatte, maar dat is blijkbaar een String. Als je niet met rowcount moet rekenen, kan je het type van rowcount dus gewoon naar String wijzigen. Lijn 12 wordt dan
Code:
private var rowcount:String;

Als je er wel mee moet rekenen zal je de waarde van data.numrows naar een Number moeten casten alvorens die aan rowcount toe te kennen.
 
Ok dat werkt,

en in mijn php script had ik nog een klein vraagje in de regel waar staat

SELECT * FROM YourTableName

weet ik dat ik * kan vervangen door namen v/d regels alleen ben ik vergeten hoe ik dit excact moest typen ik heb rondgezogt op de select querie maar ik word niet veel wijzer

Maar alvast bedank voor de hulp met flex
 
vergeet t bovenstaande maar, heb ik al gevonde (naar veel zoeken)
maar het is volgens t flex script de bedoeling dat PHP de output in XML geeft maar ik krijg alles op 1 regel zonder spaties of iets waardoor t an elkaar gepropt zit en flex moet de XML output kunnen lezen

wat nu: het script:

PHP:
<?php
//SQL Connection Info - update with your database, username & password
$connection = mysql_connect('localhost', 'root', '') or die ('cannot reach database');
$db = mysql_select_db("flex") or die ("DB invalid");
 
//Change this query as you wish for single or multiple records
$result = mysql_query("SELECT user_id, user_name, user_email FROM cpg14x_users");
 
//Get the number of rows
$num_row = mysql_num_rows($result);
 
//Start the output of XML
echo '<?xml version="1.0" encoding="iso-8859-1"?>';
echo "<data>";
echo '<num>' .$num_row. '</num>';
if (!$result) {
   die('Query failed: ' . mysql_error());
}
/* get column metadata - column name -------------------------------------------------*/
        $i = 0;
        while ($i < mysql_num_fields($result)) {
              $meta = mysql_fetch_field($result, $i);
            $ColumnNames[] = $meta->name;                      //place col name into array
            $i++;
        }
$specialchar = array("&",">","<");                                         //special characters
$specialcharReplace = array("&amp;","&gt;","&lt;");            //replacement
/* query & convert table data and column names to xml ---------------------------*/
 
$w = 0;    
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "<row>";
    foreach ($line as $col_value){
        echo '<'.$ColumnNames[$w].'>';
        $col_value_strip = str_replace($specialchar, $specialcharReplace, $col_value);        
        echo $col_value_strip;
        echo '</'.$ColumnNames[$w].'>';
        if($w == ($i - 1)) { $w = 0; }
        else { $w++; }
       }
    echo "</row>";
}
if($num_row  == "1"){
    echo '<row></row>';
}
echo "</data>";
mysql_free_result($result);
?>
 
Laatst bewerkt:
Voor je Flex script maken nieuwe regels normaal niet veel uit om XML te lezen.
XML is geldig zolang de tags kloppen, regeleindes hebben daar niks mee te maken.

In elk geval, indien je die er toch tussen wil (want dat leest zelf wel makkelijker natuurlijk), kan je gewoon aan het einde van elke echo, binnen dubbele quotes een linefeed toevoegen (\n)

Als voorbeeld hier de nieuwe regel 13-15 uit je script:
PHP:
echo '<?xml version="1.0" encoding="iso-8859-1"?>'."\n";
echo "<data>\n";
echo '<num>' .$num_row. '</num>'."\n";
 
ok thx ik test t als k weer thuis ben
 
wel ik kirjg dit als xml output (lijkt er al meer op)\maar ik kan er geen data i n vinden
HTML:
<?xml version="1.0" encoding="iso-8859-1" ?> 
- <data>
  <num>13</num> 
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
- <row>
  <user_id>user_id</user_id> 
  <user_group>user_group</user_group> 
  </row>
  </data>

en ik heb de flex app getest, ik krijg de tabel met de 2 cullums maar geen data die ik zou moeten krijgen

AS1
 
Hmm.. het is al even geleden dat ik nog met Flex gewerkt heb.. Maar van wat ik zo op het eerste zicht kan zien klopt de code in je resultHandler niet echt.

Als je in je resulthandler eens een trace/alert zet met de inhoud van result.data kom je misschien al wat verder. In elk geval bestaat bij mijn weten result.data.row niet evenals result.data.rowcount niet bestaat.
event.result is vermoedelijk een XML-String, en zal je dus als iets van het type String of van het type XMLNode moeten behandelen (ik gok op het laatste).
 
Ik heb t helemaal omgegooid, het zijn nu 2 stukken in een tabbar,
de 1e werkt via de JSWOOF SWC plugin
de 2e is het script waar t hier over gaat

de 1e werkt goed maar de 2e nog steeds niet hier volgt de flex code:
HTML:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
    backgroundColor="#FFFFFF"
    backgroundAlpha="0" width="1000" height="500" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #FFFFFF]">
      <mx:Script>
   <![CDATA[
     import mx.events.DataGridEvent;
     import mx.controls.TextInput;
     import mx.rpc.events.ResultEvent;
     import mx.collections.ArrayCollection;
     //import com.adobe.serialization.json.JSON;
     import json.*;	//Bring in jswoof.
   
     [Bindable]
     private var dataArray:ArrayCollection;
   
     private function initDataGrid():void
     {
       dataArray = new ArrayCollection();
       getData.send();
     }
   
     private function getPHPData(event:ResultEvent):void
     {
       var rawArray:Array;
       var rawData:String = String(event.result);
       //rawArray = JSON.decode(rawData) as Array;
       
       rawArray = JParser.decode(rawData) as Array;		//New.
       
       dataArray = new ArrayCollection(rawArray);
     }
 
     private function sendPHPData():void
     {
       var objSend:Object = new Object();
       //var dataString:String = JSON.encode(dataArray.toArray());
       
       var dataString:String = JParser.encode(dataArray.toArray());
       
       dataString = escape(dataString);
       objSend.setTutorials = "true";
       objSend.jsonSendData = dataString;
       sendData.send(objSend);
     }
   
     private function updatedPHPDataResult(event:ResultEvent):void
     {
       lblStatus.text = String(event.result);
     }
   
     private function checkRating(event:DataGridEvent):void
     {
       var txtIn:TextInput = TextInput(event.currentTarget.itemEditorInstance);
       var curValue:Number = Number(txtIn.text);
       if(isNaN(curValue) || curValue < 0 || curValue > 10)
       {
         event.preventDefault();
         lblStatus.text = "Please enter a number rating between 0 and 10";
       }
     }
   ]]>
 </mx:Script>
 <mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.rpc.events.ResultEvent; 
        
        [Bindable]
        private var datalist:ArrayCollection;
        private var rowcount:String
        private function resultHandler(event:ResultEvent):void{                
                datalist = event.result.data.row;
                rowcount = event.result.data.numrows;
                if(rowcount == '1'){
                        datalist.removeItemAt(1);
                }
         }
        public function doSend():void {
            xmlFromDatabase.url = "http://jnswalmen.co.cc/site/admin/xml.php";
            xmlFromDatabase.send();
        }
    ]]>
</mx:Script>
   <mx:HTTPService id="getData" url="database.php" 
     useProxy="false" method="GET" resultFormat="text" 
     result="getPHPData(event)">
    <mx:request xmlns="">
      <getTutorials>"true"</getTutorials>
    </mx:request>
  </mx:HTTPService>
  <mx:HTTPService id="sendData" url="database.php" 
     useProxy="false" method="GET" resultFormat="text" 
     result="updatedPHPDataResult(event)">
  </mx:HTTPService>
  <mx:Binding source="dgData.dataProvider as ArrayCollection" 
     destination="dataArray"/>
     <mx:HTTPService url="http://10.0.0.162/xml.php"
    id="xmlFromDatabase" 
    showBusyCursor="true" 
    result="resultHandler(event)" 
    method="POST" />
    <mx:Panel width="900" height="400" title=":::JN Swalmen - De Vrijdaggroep::: -=[Admin Center]=- Flex Version 1.0" >
        <mx:TabBar dataProvider="{viewstack1}" />

        <mx:ViewStack id="viewstack1"
        	x="30" y="32"
        	width="874" height="339"
        	selectedIndex="0">
            <mx:Form label="FotoGalley"
            	width="100%" height="100%">
                    <mx:DataGrid id="dgData" x="26.5" y="10" height="234" 
       dataProvider="{dataArray}" creationComplete="{initDataGrid()}" 
       editable="true" itemEditEnd="{checkRating(event)}" width="851">
      <mx:columns>
        <mx:DataGridColumn headerText="ID" dataField="user_id" editable="false" width="10"/>
        <mx:DataGridColumn headerText="User Name" dataField="user_name" width="50"
           editable="false"/>
        <mx:DataGridColumn headerText="Active" dataField="user_active" width="20"
           editable="true" />
        <mx:DataGridColumn headerText="Email Adres" dataField="user_email" width="100"
           editable="true" />
      </mx:columns>
    </mx:DataGrid>
    <mx:Button x="26.5" y="253" label="UpdateDatabase" id="butUpdate" 
       click="{sendPHPData()}"/>
    <mx:Label x="156.5" y="257" id="lblStatus"/>
            </mx:Form>
            <mx:Form label="Forum Users" width="100%" height="100%">
            <mx:DataGrid x="10" y="10" dataProvider="{datalist}" id="dg" height="234" width="851">
        <mx:columns>
            <mx:DataGridColumn headerText="ID" dataField="user_id"/>
            <mx:DataGridColumn headerText="UserName" dataField="user_name"/>
            <mx:DataGridColumn headerText="Email" dataField="user_email"/>
        </mx:columns>
    </mx:DataGrid>
            </mx:Form>
        </mx:ViewStack>
    </mx:Panel>

</mx:Application>

Het PHP script voor de 1e tab voeg ik niet bij want dat werkt naar behoren
Note: het 2e script in de felx code hoort bij t gedeelte dat NIET werkt

Php van niet werkende gedeelte
XML.php

PHP:
<?php
//SQL Connection Info - update with your database, username & password
$connection = mysql_connect('localhost', 'ruben', '********') or die ('cannot reach database');
$db = mysql_select_db("ruben_JNSFORUM") or die ("Sorry, DataBase does nto excist or is inaccessible contact system admin of problem presists");
 
//Change this query as you wish for single or multiple records
$result = mysql_query("SELECT * FROM jns_users");
 
//Get the number of rows
$num_row = mysql_num_rows($result);
 
//Start the output of XML
echo '<?xml version="1.0" encoding="iso-8859-1"?>'."\n";
echo "<data>\n";
echo '<num>' .$num_row. '</num>'."\n";
if (!$result) {
   die('Query failed: ' . mysql_error());
}
/* get column metadata - column name -------------------------------------------------*/
        $i = 0;
        while ($i < mysql_num_fields($result)) {
              $meta = mysql_fetch_field($result, $i);
            $ColumnNames[] = $meta->name;                      //place col name into array
            $i++;
        }
$specialchar = array("&",">","<");                                         //special characters
$specialcharReplace = array("&amp;","&gt;","&lt;");            //replacement
/* query & convert table data and column names to xml ---------------------------*/
 
$w = 0;    
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
   echo "<row>";
    foreach ($line as $col_value){
        echo '<'.$ColumnNames[$w].'>';
        $col_value_strip = str_replace($specialchar, $specialcharReplace, $col_value);        
        echo $col_value_strip;
        echo '</'.$ColumnNames[$w].'>';
        if($w == ($i - 1)) { $w = 0; }
        else { $w++; }
       }
    echo "</row>";
}
if($num_row  == "1"){
    echo '<row></row>';
}
echo "</data>";
mysql_free_result($result);
?>

Thx,
AS1
 
Laatst bewerkt:
oh ja nog 1 ding in t 1e deel ook een fout ondedkt, ik kan de user_actove en user_email bewerken maar hij wil alleen een nummer en ik moet een STRING in kunnen voeren en ik heb dat niet kunnen veranderen zonder dat flex een fout geeft

hoe doe k dit??

Ruben
 
Voor zover ik zie roep je de functies van het 2de script ook nergens aan, dus worden ze uiteraard nooit uitgevoerd...
Bovendien probeer je daar nog steeds event.data.numrows uit te lezen, een eigenschap die volgens mij helemaal niet bestaat. Opnieuw, vraag daar het type/inhoud van event.data op (maak gebruik van describeType).

Voor je String/Number probleem denk ik dat je op deze manier kan casten:
Code:
var a:String = "123";
var b:Number = (Number)a;
Als dat niet gaat moet je even in de livedocs kijken of de class Number geen parse-methodes heeft.
 
sorry voor late reactie,
maar dan word t tog number terwijl ik STRING moet hebben
 
In je vorige post zei je net het tegenovergestelde..
... maar hij wil alleen een nummer en ik moet een STRING in kunnen voeren ...
Daarom ging ik ervan uit dat jij ergens een getal liet invoeren (wat in mijn code de variabele a was), wat een string is, aangezien elke invoer string is...
De variabele b werd dan de numerieke waarde van die invoer, die je dus als parameter in die functies kon gebruiken.


Het omgekeerde, van Number naar String converteren kan gewoon door .toString() achter je nummer te zetten, en is in de meeste gevallen niet eens nodig.
Code:
var d:Number = 321;
var e:String = d.toString();
//of
var f:String = (String)d;
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan