PDA

View Full Version : Please, help me tweak this as file



schammy79
March 28th, 2008, 12:03 PM
First time I get this error, so I'm not sure how to understand it...

Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables()
at flash.net::URLLoader/onComplete()

I see that the line resulting in error is:
var vars:URLVariables=new URLVariables(e.target.data);

I tried adding trace(e.target.data), but not sure where at this point... Any HELP, PLS ?!?!

Below is my code:



package
{
import flash.display.MovieClip;
import flash.text.TextField;
import flash.utils.Timer;

import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.events.IEventDispatcher;

import flash.net.URLLoader;
import flash.net.URLVariables;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLLoaderDataFormat;
import flash.events.SecurityErrorEvent;
import flash.events.IOErrorEvent;

public class Main extends MovieClip
{
private var angle:Number=Math.PI/2;

private var timer:Timer;

private var loader:URLLoader;

private const url:String='newsletter.php';
private var _Name:String;
private var _EMail:String;

private var action:String;

public function Main()
{
init();
closebutton.addEventListener(MouseEvent.CLICK, unloadFunction);
}

public function init():void
{
if (stage) {
stage.frameRate = 31;
}

letter_mc.alpha=.7;
letter_mc.addEventListener(Event.ENTER_FRAME,turnL etter);

email_mc.field_txt.background=name_mc.field_txt.ba ckground=false;
email_mc.field_txt.backgroundColor=name_mc.field_t xt.backgroundColor=0x999999;
email_mc.field_txt.border=name_mc.field_txt.border =true;
email_mc.field_txt.borderColor=name_mc.field_txt.b orderColor=0x333333;

join_btn.label='JOIN';
join_btn.addEventListener(MouseEvent.MOUSE_DOWN,go );
delete_btn.label='DELETE';
delete_btn.addEventListener(MouseEvent.MOUSE_DOWN, go);
}

private function go(evt:MouseEvent):void
{
_EMail=email_mc.field_txt.text;
_Name=name_mc.field_txt.text;

if(EmailChecker.checkEMail(_EMail))
{
if(_Name!="")
{
if(_Name.length>=4)
{
switch(evt.target.name)
{
case 'join_btn':
action='registra';
cool(action);
break;

case 'delete_btn':
action='elimina';
cool(action);
break;
}
}
else
{
notCool('the name is too short');
}
}
else
{
notCool('please, insert a name');
}
}
else
{
notCool('invalid e-mail address');
}
}

private function turnLetter(evt:Event):void
{
var sine:Number=Math.sin(angle);
var cosine:Number=Math.cos(angle);
evt.target.scaleX=sine;
angle+=.1;
}

private function notCool(s:String):void
{
letter_mc.alpha=.2;
error_txt.text=s;

timer=new Timer(1500,1);
timer.addEventListener(TimerEvent.TIMER,done);
timer.start();
}

private function cool(s:String):void
{
var variables:URLVariables=new URLVariables();
variables.azione=s;
variables.nome=_Name;
variables.eMail=_EMail;
var richiesta:URLRequest=new URLRequest();
richiesta.url=url;
richiesta.method=URLRequestMethod.POST;
richiesta.data=variables;
loader=new URLLoader();
loader.dataFormat=URLLoaderDataFormat.VARIABLES;
addListeners(loader);
try
{
loader.load(richiesta);
}
catch (error:Error)
{
trace('Unable to load requested document.');
}
}

private function done(evt:TimerEvent):void
{
letter_mc.alpha=.7;
error_txt.text="";
}

private function addListeners(d:IEventDispatcher):void
{
d.addEventListener(Event.OPEN,inizio);
d.addEventListener(Event.COMPLETE,completato);
d.addEventListener(SecurityErrorEvent.SECURITY_ERR OR,securityError);
d.addEventListener(IOErrorEvent.IO_ERROR,ioError);
}

private function inizio(e:Event):void
{
letter_mc.alpha=.2;
email_mc.visible=false;
name_mc.visible=false;
join_btn.visible=false;
delete_btn.visible=false;
info_mc.visible=false;
}

private function completato(e:Event):void
{
var vars:URLVariables=new URLVariables(e.target.data);
trace(vars.answer);
switch(vars.answer)
{
case 'done':
writeDone();
break;

case 'not done':
writeNotDone();
break;
}
}

private function securityError(e:SecurityErrorEvent):void
{
trace('security error: '+e+'\n');
}

private function ioError(e:IOErrorEvent):void
{
trace('send/load error: '+e+'\n');
}

private function writeDone():void
{
if(action=='registra')
final_txt.text=' You have been added to our Newsletter.\n'+
'A confirmation link has been sent to your e-mail';
else
final_txt.text=' You have been deleted from our Newsletter.\n'+
'A confirmation link has been sen tto your e-mail'; reset();
}

private function writeNotDone():void
{
if(action=='registra')
final_txt.text=' You already are a member of our Newsletter.\n';

else
final_txt.text=' You are not a member of our Newsletter yet.\n'+
"we can't delete you\n"+
'Have a superb day.';

reset();
}

private function reset():void
{
timer=new Timer(4000,1);
timer.addEventListener(TimerEvent.TIMER,resetAll);
timer.start();
}

private function resetAll(evt:TimerEvent):void
{
final_txt.text="";
email_mc.field_txt.text="";
name_mc.field_txt.text="";
letter_mc.alpha=.7;
email_mc.visible=true;
name_mc.visible=true;
join_btn.visible=true;
delete_btn.visible=true;
info_mc.visible=true;
}
function unloadFunction(event:MouseEvent) {
dispatchEvent(new Event("UnloadMe", true));
}
public function kill():void {
removeEventListener(MouseEvent.CLICK, unloadFunction);
}
}
}

omine
March 28th, 2008, 01:25 PM
Are you sure you need URLLoaderDataFormat.VARIABLES ?

I'm working on a Flash + Rails application, and faced the same issue. The Rails app is returning JSON data, so I set loader.dataFormat to URLLoaderDataFormat.TEXT.

schammy79
March 31st, 2008, 09:48 AM
Thanks for your help... Unfortunately it did not work and I still get the same error... Argh!

omine
March 31st, 2008, 11:32 AM
What is newsletter.php returning to your request?

amarghosh
April 1st, 2008, 12:49 AM
add a trace statement to urlloader's oncomplete handler

private function completato(e:Event):void
{
trace(e.target.data);
var vars:URLVariables=new URLVariables(e.target.data);

schammy79
April 2nd, 2008, 09:49 AM
I added the trace statement and I'm still getting the same error message.

Here's newsletter.php below:


<?php
// Controllo l'esistenza della variabile azione
if ( !isset($_POST['azione']) || $_POST['azione'] == "" )
{
echo "Nessun azione!";
exit();
}

// Includo il file config e function
require_once("./include/config.php");
require_once("./include/function.php");
$azione = $_POST['azione'];
switch ($azione) {
case "registra" :

// Controllo variabili
if ( !isset($_POST['nome']) || !isset($_POST['eMail']) || trim($_POST['eMail']) == "" || trim($_POST['nome'] == "") )
{
echo "error"; // Stampo error
exit(); // Esco dall script
}

// Controllo le variabili
$nome = mysql_escape_string(strtolower(trim($_POST['nome'])));
$eMail = mysql_escape_string(strtolower(trim($_POST['eMail'])));

// Connessione al db
$connessione = Connect($db_host,$db_user,$db_pass,$db_name);

// Cancello tutte le email che non sno state confermate entro il tempo limite
Ripulisci($db_table,$tempo_max);

// Controllo esistenza eMail
$query = "SELECT * FROM ".$db_table." WHERE eMail='".$eMail."' && conferma='1';";
$sql = mysql_query($query);

if ( mysql_num_rows($sql) != 0 ) {
// L'email è gia presente nel database
$answer="not done";
echo "answer=".$answer;
} else {
// L'email non è presente nel DB e la posso inserire
$query = "INSERT INTO `".$db_table."` ( `ID` , `nome` , `eMail` , `conferma` , `data` )".
"VALUES (NULL , '".$nome."', '".$eMail."', '0' , '".time()."');";
if ( !mysql_query($query) ) {
$answer="not done";
echo "answer=".$answer;
}

// Recupero l'id
$id = mysql_insert_id();

// Invio la mail
if ( InviaMail($nome,$eMail,$mittente,$azione,$id) ) { $answer="done"; echo "answer=".$answer; }
else { $answer="not done mail"; echo "answer=".$answer; }

}

// Chiusura connessione al db
mysql_close($connessione) or die ("Errore nella chiusura della connessione");

break;

case "elimina" :

// Controllo variabili
if ( !isset($_POST['nome']) || !isset($_POST['eMail']) || trim($_POST['eMail']) == "" || trim($_POST['nome'] == "") )
{
echo "error"; // Stampo error
exit(); // Esco dall script
}

// Controllo le variabili
$nome = mysql_escape_string(strtolower(trim($_POST['nome'])));
$eMail = mysql_escape_string(strtolower(trim($_POST['eMail'])));

// Connessione al db
$connessione = Connect($db_host,$db_user,$db_pass,$db_name);

// Controllo esistenza
$query = "SELECT * FROM ".$db_table." WHERE nome='".$nome."' && eMail='".$eMail."' && conferma='1';";
$sql = mysql_query($query);

if ( mysql_num_rows($sql) != 1 ) {
// L'email con quel nome non è presente nel database
$answer="not done";
echo "answer=".$answer;
} else {

// Creo un array
$riga = mysql_fetch_array($sql);

// Invio la mail
if ( InviaMail($nome,$eMail,$mittente,$azione,$riga['ID']) ) { $answer="done"; echo "answer=".$answer; }
else { $answer="not done mail"; echo "answer=".$answer; }
}

// Chiusura connessione al db
mysql_close($connessione) or die ("Errore nella chiusura della connessione");
break;

case "createXML" :

// Varibili user e pass nn settate
if ( !isset($_POST['user']) || !isset($_POST['pass']) )
{
echo "error"; // Stampo error
exit(); // Esco dall script
}

// Vecupero le variabili e le cripto in md5. QUALUNQUE COSA CONTENGANO! ;)
$user_flash = md5($_POST['user']);
$pass_flash = md5($_POST['pass']);

// Controllo la coerenza tra le variabili ricevute da flash e quelle del file config
if ( $user_flash != $admin_user || $pass_flash != $admin_user )
{
$answer="mismatch vars";
echo "answer=".$answer;
exit();
}

// Ok user e pass corrette

// Connessione al db
$connessione = Connect($db_host,$db_user,$db_pass,$db_name);

// Creo ed eseguo la query
$query = "SELECT * FROM ".$db_table;
$sql = mysql_query($query);

// Creo e apro il file
$file = CreateXML($XMLname);

// Scrivo intestazione XML
$str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n".
"<users>\n";
fwrite($file,$str);

while( $riga = mysql_fetch_array($sql) ) {
// Preparo la stringa da scrivere
$str = "<item nome=\"".$riga['nome']."\" eMail=\"".$riga['eMail']."\" conferma=\"".$riga['conferma']."\"></item>\n";
// E la scrivo
fwrite($file,$str);
}

// Chiudo XML
$str = "</users>";
fwrite($file,$str);

// Chiudo il file
fclose($file);

// Stampo indirizzo file XML
echo "http://".getenv(HTTP_HOST).dirname($_SERVER['SCRIPT_NAME'])."/xml/".$XMLname.".xml";

// Chiusura connessione al db
mysql_close($connessione) or die ("Errore nella chiusura della connessione");
break;
default:
echo "error var";
break;
}


?>