1. #1
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144

    Flex combineren met PHP en SQL

    Hallo allemaal.

    Ik ben al een tijdje bezig met flash builder, vroeger FLEX van adobe, en ik ben bezig met de volgende stap: namelijk een applicatie maken die gegevens kan wegschrijven en halen uit een databank.

    Momenteel heb ik wel paar tutorials gevonden die adh van php gegevens uit een db halen, maar om een of andere reden lukt dat bij mij niet goed. + ik vind ook nergens hoe ik via flash builder bv, namen naar een db schrijf. Iemand die mij op weg kan helpen of enkele goede tutorials/boeken weet die mij kunnen helpen.

    merci alvast
    no votes  

  2. #2
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    Ge steekt de gegevens gewoon in een bepaald object, stuurt dat door naar PHP en voor de rest is PHP voor alles verantwoordelijk. Ik gebruik daar doorgaans AMFPHP voor, maar dat wordt niet meer actief ontwikkeld en vereist een kleine aanpassing voor nieuwere PHP versies, daarna werkt dat wel perfect.

    Dat is natuurlijk wel enkel nodig als ge een Flex site wilt maken, niet als ge in Air gaat werken.

    Gelieve trouwens de regels eens door te nemen voor de juiste prefix.

    En om te muggenziften, Flash Builder is niet de nieuwe naam van Flex. De IDE is gewoon hernoemd van Flex Builder naar Flash Builder, maar het framework heet wel nog steeds gewoon Flex.
    no votes  

  3. #3
    profound's Avatar
    Registered
    13/12/08
    Location
    Dendermonde
    Posts
    3,899
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Ben atm ook aan zo'n project bezig, en ik gebruik ook amfphp. Ik kan ook wel een framework aanraden, ikzelf gebruik het mate framework(flex). Als je er wat mee weg bent is het ideaal!
    no votes  

  4. #4
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Bedankt beide. ik zal dat eens bekijken en mocht ik vragen hebben weet ik jullie te vinden
    no votes  

  5. #5
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Om eerlijk te zijn begrijp ik er geen knars van. Ik moet nu wel eerlijk zijn dat ik nooit gene pro ben geweest met php, en dat mijn kennis in flex ook nooit te maken heeft gehad met databanken enz...

    Nu heb ik die Amfphp gedownload en daarin zit al een pizza voorbeeld voor flex in. Dat krijg ik dus niet aan de praat.

    Heb die amfphp in mijn www folder gezwierd van mijne WAMP en ook pizza files van flex steken in www folder. Ik krijg juiste layout als ik dat voorbeeld run, maar er gebeurt niks? Wat doe ik fout?
    no votes  

  6. #6

    Registered
    11/08/10
    Location
    De Panne
    Posts
    474
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    Euhm, wij zien nu Flex en daarin kan je alles automatisch laten genereren ivm de databank dacht 'k.
    Ergens bij databinding onderaan eens kijken.. Maar je hebt er idd ook de nodige php functies voor nodig.
    no votes  

  7. #7
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    Voorbeeldje van een project dat ne maat en ikzelf vorig jaar hebben gemaakt. We zijn nu ook niet bepaald helden in PHP/MySQL en hier zit ook geen try/catch of dergelijke in, maar het is goed genoeg om de werking aan te tonen. 'k Heb die PHP feitelijk zelfs niet eens geschreven.

    Code:
    <?php
    //database settings en verbinding
    require_once("../../core_functions.php");
    
    class magazineService {
    
    
    	function getMagazines() {
    		$db = getDBConnection();
    		
    		$sql = "SELECT * FROM magazines ORDER BY nr DESC LIMIT 2";
    		$sql = "SELECT * FROM magazines ORDER BY nr DESC";
    				
    		$result = $db->query($sql);
    		$magazines = array();
    				
    		while( $row = $result->fetch_assoc() ) {
    			$magazine = array("issue" => $row["issue"], "nr" => $row['nr'], "status" => $row['status'], "magazine" => $row['magazine']);
    			
    			$magazines[] = $magazine;
    		}
    		
    		$db->close();
    		return $magazines;
    	}
    	
    	function getPublishedMagazines() {
    		$db = getDBConnection();
    		
    		$sql = "SELECT * FROM magazines WHERE status = 'Published!' ORDER BY nr DESC";
    				
    		$result = $db->query($sql);
    		$magazines = array();
    				
    		while( $row = $result->fetch_assoc() ) {
    			$magazine = array("issue" => $row["issue"], "nr" => $row['nr'], "status" => $row['status'], "magazine" => $row['magazine']);
    			
    			$magazines[] = $magazine;
    		}
    		$db->close();	
    	
    		return $magazines;		
    	}
    	
    	function addComments($magazine_id, $article_id, $comment, $title, $datum){
    		$db = getDBConnection();			
    		$datum = date("m-d-y");      
    		
    		$sql = "INSERT INTO comments(magazine_id, article_id, comment, title, datum) VALUES(?,?,?,?,?)";
    		
    		$statement = $db->prepare($sql);
    		$statement->bind_param('sssss',$magazine_id, $article_id, $comment,  $title, $datum);
    		if($statement->execute()){
    			return true;
    		} else {
    			return false;
    		}
    		
    		$db->close();	
    	}
    In AS3 werkt dat dan als volgt:

    Code:
    package be.devine.major.services
    {
    	import be.devine.major.components.MagazineEditor;
    	import be.devine.major.events.AMFServiceEvents;
    	import be.devine.major.factories.MagazineEditorFactory;
    	import be.devine.major.models.MagazineEditorModel;
    	import be.devine.major.models.ModelLocator;
    	import be.devine.major.models.SettingsModel;
    	import be.devine.major.vo.MagazineVO;
    	
    	import flash.events.Event;
    	import flash.events.EventDispatcher;
    	import flash.events.IEventDispatcher;
    	import flash.events.IOErrorEvent;
    	import flash.events.ProgressEvent;
    	import flash.filesystem.File;
    	import flash.filesystem.FileMode;
    	import flash.filesystem.FileStream;
    	import flash.net.NetConnection;
    	import flash.net.Responder;
    	import flash.net.URLRequest;
    	import flash.net.URLStream;
    	import flash.utils.ByteArray;
    	
    	import mx.collections.ArrayCollection;
    	import mx.events.FileEvent;
    	
    	public class AMFService extends EventDispatcher
    	{	
    		private var netConnection:NetConnection;
    		
    		public function AMFService() {
    			netConnection = new NetConnection();
    			netConnection.connect(ModelLocator.getInstance().getModel(SettingsModel.NAME).amfGateway);
    
    		}
    		
    		public function getMagazines():void{
    			netConnection.addEventListener(IOErrorEvent.IO_ERROR, databaseErrorHandler);
    			netConnection.call("magazineService.getMagazines", new Responder(magazinesLoadedHandler));
    		}
    		
    		/**
    		 * Magazines uit de database ophalen + XML Genereren met alle magazines
    		 */
    		private function magazinesLoadedHandler(result:Object):void {
    			var xml:String = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+"<magazines>";
    
    			for each (var magazine:Object in result) {
    				xml += '<magazine id="'+magazine.nr+'" status="'+magazine.status+'"><title>'+magazine.issue+'</title><url>'+magazine.magazine+'</url></magazine>';
    			}
    
    			xml +="</magazines>";
    						
    			dispatchEvent(new AMFServiceEvents( XML(xml), AMFServiceEvents.MAGAZINES_LOADED) );
    		}
    		
    		private function databaseErrorHandler(e:IOErrorEvent):void {
    			dispatchEvent( new AMFServiceEvents(null, AMFServiceEvents.CONNECTION_FAILED));
    		}
    	}
    }
    Again, die code is absoluut niet optimaal. Het is maar om snel een idee te geven van hoe het in zijn werk gaat.

    De gateway, krijgt ge in een popup te zien als ge amfphp voor het eerst start. Is gewoon iets in de aard van http://host/amfphp/gateway.php Dat is het bestand dat de communicatie voorziet van as3 naar php en terug feitelijk.

    Die browser in amfphp is gewoon om uw phpcode op fouten te testen, vind em persoonlijk maar onhandig maar is tegelijk ook onontbeerlijk. Zet die niet online eens ge deployed, is een beveiligingsrisico.
    no votes  

  8. #8
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Quote Originally Posted by krulle3 View Post
    This quote is hidden because you are ignoring this member. Show
    Euhm, wij zien nu Flex en daarin kan je alles automatisch laten genereren ivm de databank dacht 'k.
    Ergens bij databinding onderaan eens kijken.. Maar je hebt er idd ook de nodige php functies voor nodig.
    Ja daar heb ik ook al eens gekeken. Ik vind het gewoon allemaal wat veel en onduidelijk, maar dat zal eerder aan mij liggen dan aan flex vrees ik. Ben eigenlijk nooit echt goed in programmeren geweest. HTML/CSS waren nooit een probleem om dat ik dan daadwerkelijk de veranderingen zag.

    Er zijn ook nergens echt goeie tutorials te vinden die dit systeem uitleggen. En als ik er eentje tegen kom werkt die niet. Ik mis een goede tutorial voor absolute beginners

    Quote Originally Posted by Zero Grav View Post
    This quote is hidden because you are ignoring this member. Show
    Voorbeeldje van een project dat ne maat en ikzelf vorig jaar hebben gemaakt. We zijn nu ook niet bepaald helden in PHP/MySQL en hier zit ook geen try/catch of dergelijke in, maar het is goed genoeg om de werking aan te tonen. 'k Heb die PHP feitelijk zelfs niet eens geschreven.

    Code:
    <?php
    //database settings en verbinding
    require_once("../../core_functions.php");
    
    class magazineService {
    
    
    	function getMagazines() {
    		$db = getDBConnection();
    		
    		$sql = "SELECT * FROM magazines ORDER BY nr DESC LIMIT 2";
    		$sql = "SELECT * FROM magazines ORDER BY nr DESC";
    				
    		$result = $db->query($sql);
    		$magazines = array();
    				
    		while( $row = $result->fetch_assoc() ) {
    			$magazine = array("issue" => $row["issue"], "nr" => $row['nr'], "status" => $row['status'], "magazine" => $row['magazine']);
    			
    			$magazines[] = $magazine;
    		}
    		
    		$db->close();
    		return $magazines;
    	}
    	
    	function getPublishedMagazines() {
    		$db = getDBConnection();
    		
    		$sql = "SELECT * FROM magazines WHERE status = 'Published!' ORDER BY nr DESC";
    				
    		$result = $db->query($sql);
    		$magazines = array();
    				
    		while( $row = $result->fetch_assoc() ) {
    			$magazine = array("issue" => $row["issue"], "nr" => $row['nr'], "status" => $row['status'], "magazine" => $row['magazine']);
    			
    			$magazines[] = $magazine;
    		}
    		$db->close();	
    	
    		return $magazines;		
    	}
    	
    	function addComments($magazine_id, $article_id, $comment, $title, $datum){
    		$db = getDBConnection();			
    		$datum = date("m-d-y");      
    		
    		$sql = "INSERT INTO comments(magazine_id, article_id, comment, title, datum) VALUES(?,?,?,?,?)";
    		
    		$statement = $db->prepare($sql);
    		$statement->bind_param('sssss',$magazine_id, $article_id, $comment,  $title, $datum);
    		if($statement->execute()){
    			return true;
    		} else {
    			return false;
    		}
    		
    		$db->close();	
    	}
    In AS3 werkt dat dan als volgt:

    Code:
    package be.devine.major.services
    {
    	import be.devine.major.components.MagazineEditor;
    	import be.devine.major.events.AMFServiceEvents;
    	import be.devine.major.factories.MagazineEditorFactory;
    	import be.devine.major.models.MagazineEditorModel;
    	import be.devine.major.models.ModelLocator;
    	import be.devine.major.models.SettingsModel;
    	import be.devine.major.vo.MagazineVO;
    	
    	import flash.events.Event;
    	import flash.events.EventDispatcher;
    	import flash.events.IEventDispatcher;
    	import flash.events.IOErrorEvent;
    	import flash.events.ProgressEvent;
    	import flash.filesystem.File;
    	import flash.filesystem.FileMode;
    	import flash.filesystem.FileStream;
    	import flash.net.NetConnection;
    	import flash.net.Responder;
    	import flash.net.URLRequest;
    	import flash.net.URLStream;
    	import flash.utils.ByteArray;
    	
    	import mx.collections.ArrayCollection;
    	import mx.events.FileEvent;
    	
    	public class AMFService extends EventDispatcher
    	{	
    		private var netConnection:NetConnection;
    		
    		public function AMFService() {
    			netConnection = new NetConnection();
    			netConnection.connect(ModelLocator.getInstance().getModel(SettingsModel.NAME).amfGateway);
    
    		}
    		
    		public function getMagazines():void{
    			netConnection.addEventListener(IOErrorEvent.IO_ERROR, databaseErrorHandler);
    			netConnection.call("magazineService.getMagazines", new Responder(magazinesLoadedHandler));
    		}
    		
    		/**
    		 * Magazines uit de database ophalen + XML Genereren met alle magazines
    		 */
    		private function magazinesLoadedHandler(result:Object):void {
    			var xml:String = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+"<magazines>";
    
    			for each (var magazine:Object in result) {
    				xml += '<magazine id="'+magazine.nr+'" status="'+magazine.status+'"><title>'+magazine.issue+'</title><url>'+magazine.magazine+'</url></magazine>';
    			}
    
    			xml +="</magazines>";
    						
    			dispatchEvent(new AMFServiceEvents( XML(xml), AMFServiceEvents.MAGAZINES_LOADED) );
    		}
    		
    		private function databaseErrorHandler(e:IOErrorEvent):void {
    			dispatchEvent( new AMFServiceEvents(null, AMFServiceEvents.CONNECTION_FAILED));
    		}
    	}
    }
    Again, die code is absoluut niet optimaal. Het is maar om snel een idee te geven van hoe het in zijn werk gaat.

    De gateway, krijgt ge in een popup te zien als ge amfphp voor het eerst start. Is gewoon iets in de aard van http://host/amfphp/gateway.php Dat is het bestand dat de communicatie voorziet van as3 naar php en terug feitelijk.

    Die browser in amfphp is gewoon om uw phpcode op fouten te testen, vind em persoonlijk maar onhandig maar is tegelijk ook onontbeerlijk. Zet die niet online eens ge deployed, is een beveiligingsrisico.
    Bedankt voor de uitleg en moeite. Ik ga vanavond eens testen of ik uw voorbeeld aan de praat krijg en dan hopelijk mijn project erdoor kan verwezenlijken. Zie dad je ook xml code genereerd om deze dan in flex te kunnen gebruiken. XML kan ik al iets beter dus er is hoop.
    no votes  

  9. #9
    profound's Avatar
    Registered
    13/12/08
    Location
    Dendermonde
    Posts
    3,899
    iTrader
    5 (100%)
    Mentioned
    0 Post(s)
    Quote Originally Posted by Zero Grav View Post
    This quote is hidden because you are ignoring this member. Show
    Die browser in amfphp is gewoon om uw phpcode op fouten te testen, vind em persoonlijk maar onhandig maar is tegelijk ook onontbeerlijk.
    Onhandig?!
    Ik vind het net wel handig, elke nieuwe functie wordt eerst daar getest, en dan in flex. Vooral voor iemand die nog maar net begint is het handig; zo zie je direct of je php fout zit of je flex.
    Als je meerdere argumenten moet meegeven is het idd soms wat sukkelen, maar als je gwn data uit je db haalt is het echt wel een aanrader!
    no votes  

  10. #10
    Zero Grav's Avatar
    Registered
    06/06/04
    Location
    Bilzen
    Posts
    8,805
    iTrader
    18 (100%)
    Mentioned
    0 Post(s)
    Reputation
    42/128
    Maja, de browser zelf is natuurlijk wel handig, maar als ge met een bug zit suckt het wel enorm. Is op zich ook niet echt de functie van die browser om dat op te sporen, maar kom. Zit ge daar met een Flash debugger error omdat er eigenlijk een fout in uw PHP syntax zit, heb daar in't begin veel tijd aan verloren. Sindsdien altijd eerst naar het PHP-bestand zelf surfen om te kijken of dat bugvrij is.

    En ik zeg hier dat het niet om fouten op te sporen is terwijl ik in mijn vorige post net zei van wel. Maar ik spreek hier over syntax errors waardoor uw php gewoon niet draait, de browser is om runtime errors te fixen. Gewoon even in general meegeven. ^^

    Sorry to disappoint Streaker, maar die XML gebruikten wij gewoon omdat dat het gemakkelijkste was om templates te maken voor de layout van onze magazines. Dat gaat ge zelf niet moeten doen waarschijnlijk. Maar die functie moest er wel bij om het result object te illustreren.


    Edit - Ha, net op de site van AMFPHP geweest, wat al een tijdje geleden was, en blijkbaar is dat niet meer EOL ondertussen. Site is heel vernieuwd en precies ook een nieuwe versie uit. Interessant!
    Last edited by Zero Grav; 30-11-2011 at 21:10.
    no votes  

  11. #11
    KingOfWoods's Avatar
    Registered
    28/07/02
    Location
    Gent
    Posts
    2,195
    iTrader
    19 (91%)
    Mentioned
    0 Post(s)
    Reputation
    0/144
    Zal voor van't weekend worden. Ik snap gewoon niveel van php en flex combineren. Khad al superveel moeilijkheden met php en html, ge moet dus ni vragen hoe het ga worden om php te combineren met een flash omgeving. Anyway ik houd jullie op de hoogte if you would like that;
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in