Forums Développement Multimédia

Aller au contenu

Requêtes SQL multiple

sql as3 CODE Actionscript

16 réponses à ce sujet

#1 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 14 September 2012 - 13:34 PM

:smile: Bonjour à tous!
Je suis nouveau sur ce forum, d'habitude je me contente comme beaucoup de monde, de juste utiliser Google résoudre mes problèmes en programmation. J'avoue que cette fois je sèche depuis 3 jours sur une connexion SQL, j'ai essayé des tonnes de solution, me suis arraché les cheveux de toute mes perruques alors si vous pouviez m'aider un peu sa serait vraiment gentil :oops:

Sans plus attendre voici l'exposé de mon problème:

Je souhaite depuis AS3 atteindre ma BDD SQL. La connexion est établit, jusque là pas de souci, je peux depuis flash avoir accès à n'importe quel donnée de la base.
Sauf qu'il arrive que la BDD me renvoi plusieurs ligne SQL... c'est là ou je sèche.

PHP:


   echo 'vide=vide&id_max='.$id_max.'&num='.$num.'&id='.$id.'&type='.$type.'&url='.$url.'&titre='.$titre.'&description='.$description.'&image='.$image.'&flash='.$flash.'&administration='.$administration.'&newsletter='.$newsletter.'&dynamique='.$dynamique.'&vider=vider';
 

C'est cette ligne que PHP me renvoi et remplit parfaitement bien. Cette ligne est généré et complété à l'aide d'un while, comme ceci:

PHP:


while($item = $result->fetch(PDO::FETCH_ASSOC)) {
               
                  //Récupération des requêtes
         
                  $num = $result -> rowcount();
                  $id = $item['ID'];
                  $url = $item['URL'];
                  $type = $item['Type'];
                  $titre = $item['Titre'];
                  $description = $item['Description'];
                  $image = $item['Image'];
                  $flash = $item['Flash'];
                  $administration = $item['Administration'];
                  $newsletter = $item['Newsletter'];
                  $dynamique = $item['Dynamique'];
                        sendreceive($id_max, $num, $id, $type, $url, $titre, $description, $image, $flash, $administration, $newsletter, $dynamique);
                       
                  }//♪while
 

Du coup je reçois plusieurs fois la ligne précédente mais avec des valeurs différentes, sauf que flash ne va lire à juste titre, que la 1ère valeur de la variable.
J'entends par là que par exemple ma ligne va donner


vide=vide&id_max=9&num=2 etc...
vide=vide&id_max=5&num=1 etc...
 

Flash ne me renverra toujours que id_max = 9 :? J'ai essayé des tas de modification de mon code (que j'ai effacé depuis) pour essayer de rentrer chaque variable dans un Array afin d'organiser tout ça.. mais moi et la gestion des String sa fait 2 :eusa_doh:

Du coup j'ai essayé une autre solution :smile:
:evil: Qui est toute aussi foireuse!

Du fait que je n'arrive pas à gérer les String j'ai pensé à faire des requêtes SQL dans une boucle For, de cette manière:


for ( var k:int = 0; k <= id_max; k++ ){
 
          var préchargeur:URLLoader=new URLLoader();
          var urlRq:URLRequest=new URLRequest(all.SQL_PORTFOLIO);
          // un chaine de variables passées par couple variable/valeur séparés par esperluette
          // un objet URLVariables
          var vars:URLVariables=new URLVariables();
          // Les variables
          vars.type = type_galerie;
          vars.id = k;
       
          // on enverra avec la méthode POST
          urlRq.method=URLRequestMethod.POST;
          // les données à transmettre
          urlRq.data=vars;
       
          préchargeur.dataFormat=URLLoaderDataFormat.VARIABLES;
          préchargeur.addEventListener(Event.COMPLETE, sql_complete);
          préchargeur.load(urlRq);
       
           function sql_complete(evt:Event):void{
         
                 var sql_request:* = evt.target.data; //Récupération de la requête sous la forme d'un String
                         //Récupère chaque variables de la requête
                   var type:* = sql_request.type;
                   var url:* = sql_request.url;
                   var id:* = sql_request.id;          
                   var titre:* = sql_request.titre;
                   var description:* = sql_request.description;
                   var image:* = sql_request.image;
                   var flash:* = sql_request.flash;
                   var administration:* = sql_request.administration;
                   var newsletter:* = sql_request.newsletter;
                   var dynamique:* = sql_request.dynamique;
screen_design.mc_galerie_text_bg.t_galerie_description.text = id +"   " + k;
                  if ( id == k){
                 //L'élément existe et est placé dans un tableau
                 ar_pics.push(id, url, type, titre, description, image, flash, administration, newsletter, dynamique);
                  screen_design.mc_galerie_text_bg.t_galerie_description.text = id + "  " + url + "  " + type + "  " + titre + "  " + description + "  " + image;
                }//if
         
           }//♪sql_complete(evt)
 
         
   }//♪for
 

J'ai préalablement récupéré l'id maximal dans ma BDD, id_max = 9 pour information. De là je fais une boucle qui va de k = 0 à k = id_max.
Et avec grand espoir j'espérais récupérer chaque ligne, le souci, si vous n'avez pas encore deviné en voyant le code. C'est que dans ma boucle For, il y à cette ligne:


préchargeur.addEventListener(Event.COMPLETE, sql_complete);
 

L'event ne se lance que lorsque la requête est finit... du coup je suis déjà en fin de boucle lorsque la requête s'achève même si celle-ci est d'une courte durée...

:cry: Je sèche complètement...

Merci de m'avoir lu!

#2 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 14 September 2012 - 13:54 PM

Hello

essaies en mettant ces lignes en dehors de ta boucle (juste au-dessus par exemple)


var préchargeur:URLLoader=new URLLoader();
var urlRq:URLRequest=new URLRequest(all.SQL_PORTFOLIO);
préchargeur.dataFormat=URLLoaderDataFormat.VARIABLES;
préchargeur.addEventListener(Event.COMPLETE, sql_complete);
 

de plus ne mets pas ta fonction sql_complete dans la boucle.

Sinon ça m'a l'air d’être un beau bordel :mrgreen:
Renseignes-toi sur le format JSON qui permet de transformer tableaux et objets en String et qui est adapté pour les communications AS/PHP

PS:évites les accents sur les noms de variables.
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#3 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 14 September 2012 - 13:57 PM

:smile: J'essai de suite!
PS: Excellente remarque, d'habitude je ne met jamais d'accent sur mes var... erreur dût à la lassitude de la situation? :roll:

#4 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 14 September 2012 - 14:09 PM

Bon bah comme ça na pas corrigé le souci, je vais voir comment fonctionne Jason ;-)

#5 alama.be

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 224 messages

Posté 15 September 2012 - 08:13 AM

Ce ne serait pas + simple d'installer AMFPHP? A partir du moment où il y a pas mal d'échange flash <> mySQL, c'est à mon sens le plus facile.

Pas de parsing à faire vraiment, un recordset mySQL peut être récup en recordset coté AS3. les Types sont conservés! (contrairement à String et même à JSON) Quoi que AMFPHP gère aussi le JSON..

http://www.silexlabs.org/amfphp/
Ne baisse jamais les bras, car c'est à ce moment là que le miracle risque de se produire..

Site web: http://www.pureas3.org
Twitter: https://twitter.com/PureAS3

Enjoy with Flash Player :-)

#6 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 15 September 2012 - 09:20 AM

Tu peux, en effet.
mais ton sujet dévie là
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#7 alama.be

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 224 messages

Posté 15 September 2012 - 09:22 AM

Oui, c'est vrai.. mais comme il a l'air de galérer, je me dis que peut-être il ne connait pas AMFPHP .. Que c'est peut être intéressant pour lui.. :)
Ne baisse jamais les bras, car c'est à ce moment là que le miracle risque de se produire..

Site web: http://www.pureas3.org
Twitter: https://twitter.com/PureAS3

Enjoy with Flash Player :-)

#8 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 16 September 2012 - 12:16 PM

Ehhh merci pour ces réponses, de mon côté j'ai fais une pause après avoir galéré dessus pendant 3 jours... l'envie de tout jeter par la fenêtre ? :D

Suite au conseil de Badwolf je me suis mis à apprendre JSON, j'ai réussi la connexion SQL - PHP - AS3, je suis à présent bloqué sur la dernière étape je suppose. Je veux dire par là l'étape ou AS3 va utiliser JSON pour organiser les données renvoyé depuis PHP.

J'ai fais comme ceci:


loader.addEventListener(Event.COMPLETE, onComplete_handler);
 
        function onComplete_handler(evt:Event) {
 
          var raw:String = String(evt.target.data); //Renvoi le string au format JSON
          var sql_request:Array = JSON.decode(raw) as Array; //Ne fonctionne pas

   }//♪onComplete_handler(evt)
 

Je cherche je cherche

#9 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 17 September 2012 - 09:12 AM

quand tu dis "ne fonctionne pas" , en clair qu'est-ce qui ne fonctionne pas ?
que donne trace(raw) et trace(JSON.decode(raw)) ?
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#10 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 17 September 2012 - 10:46 AM

C'est bon je m'en suis sorti depuis un moment mais le forum ne fonctionnait plus hier du coup je n'ai pas pu poster de message pour prévenir que j'ai trouvé :) . Sinon sa fonctionne impécable de cette manière:

AS3:


private function chargement():void{
 
 
   var load_SQL:URLLoader = new URLLoader();
   var urlRequest:URLRequest=new URLRequest(all.SQL_PORTFOLIO);
   var variables:URLVariables=new URLVariables();
        //♪Variable envoyé à SQL
        variables.type = type_galerie; //♪Le type de l'élément cliqué (web/inf)
        //Méthode POST
        urlRequest.method=URLRequestMethod.POST;
        //♪Les données à transmettre
        urlRequest.data=variables;
 
        load_SQL.load(urlRequest);
 
        load_SQL.addEventListener(Event.COMPLETE, onComplete_handler);
 
  }//♪chargement()

private  function onComplete_handler(evt:Event) {
       
          //♪Récupération de la requête
          var datas:* = evt.target.data;
       
          //♪Préparation des données
                 myData = JSON.decode(datas);
                screen_design.mc_galerie_text_bg.t_galerie_description.text = myData.portfolio[0].description; //♪EXEMPLE
         
          //♪Affichage de la galerie à partir des données SQL préchargés
          display_gallery();
 
  }//♪onComplete_handler(evt)
 

Et ATTENTION le truc qui m'à fait galéré une demi journée de plus:

PHP:


$string = '{"id_max":"'.$id_max.'","num":"'.$num.'", "id":"'.$id.'", "type":"'.$type.'", "url":"'.$url.'", "titre":"'.$titre.'", "description":"'.$description.'", "image":"'.$image.'", "flash":"'.$flash.'", "administration":"'.$administration.'", "newsletter":"'.$newsletter.'", "dynamique":"'.$dynamique.'"}';
 

C'est la bonne réponse que je viens d'afficher ayant effacé la mauvaise ^^... j'ai cherché longtemps pourquoi flash n'interprétait pas le JSON...et donc après une demi journée de vérification diverses j'ai finit par comprendre qu'il faut faire attention aux " et '...
Il faut absolument suivre cette synthaxe:

PHP:


{"portfolio":[{"id_max":"9","num":"2" etc...
 

Et pas

PHP:


{'portfolio':[{'id_max':'9','num':'2' etc...
 

Même si PHP parvient à générer un String qui paraît être correct, Flash ne saura pas l'interpréter si les cotes sont inversés...
On ne m'y prendra plus ><!

#11 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 17 September 2012 - 15:50 PM

tu aurais pu utiliser json_encode en PHP qui t'aurait crée un String parfait au lieu de le faire a la main...
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#12 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 17 September 2012 - 16:55 PM

Justement je l'ai essayé mais sa ne fonctionnait pas, du moins je m'y prenait mal j'imagine. Au final j'ai directement fait à la main et sa fonctionne :P Je peux enfin avancer dans ma programmation et j'ai pu faire du ménage dans mon code :mrgreen: Merci Badwolf ton conseil m'à sortit d'un sacré pétrin

#13 hu9o

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 08 October 2012 - 12:15 PM

C'est vrai qu'au niveau du PHP ça a l'air bourrin :mrgreen:

Je pense que ça marcherait si tu remplaçais tout ton "while (fetch)" par ça:
$tab = $result->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($tab);
Et que tu donnais les bons noms à tes champs directement dans la requête, comme ça:
SELECT ID AS id, URL AS url, type AS Type ...

Après, ton code marche déjà, donc c'est peut être pas la peine.

#14 Nataly

    Community Jane

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5783 messages

Posté 09 October 2012 - 09:08 AM

Voir le messageXueFang, le 17 September 2012 - 10:46 AM, dit :

Il faut absolument suivre cette synthaxe:

PHP:


{"portfolio":[{"id_max":"9","num":"2" etc...
 

Même si PHP parvient à générer un String qui paraît être correct, Flash ne saura pas l'interpréter si les cotes sont inversés...
On ne m'y prendra plus ><!

merci de la synthèse :Hola:
Ces histoire de quotes doubles ou simples soit-disant acceptées l'une comme l'autre, ça m'a toujours flanqué la brouille :?
Le savoir est le seul bien qui s'accroit quand on le partage
une tartine de tutos

#15 Badwolf

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 667 messages

Posté 09 October 2012 - 10:05 AM

il suffit de régler les magic quotes dans les paramètres de PHP pour ne pas avoir ce problème.

sérieusement, faire du JSON a la main :mrgreen:
Haoooooooooooooooooooooooooooooooooooooooooooooou !!!

#16 XueFang

    Ceinture Bleue

  • Members
  • PipPipPipPipPip
  • 77 messages

Posté 09 October 2012 - 19:53 PM

:ph34r: C'était ma première fois... les premières fois on sait tous ce que sa donne :wub:

#17 hu9o

  • Members
  • PipPipPipPipPipPipPipPip
  • 653 messages

Posté 10 October 2012 - 16:01 PM

Voir le messageNataly, le 09 October 2012 - 09:08 AM, dit :

merci de la synthèse :Hola:
Ces histoire de quotes doubles ou simples soit-disant acceptées l'une comme l'autre, ça m'a toujours flanqué la brouille :?

Acceptées l'une comme l'autre en PHP - bien qu'elles ne soient pas tout à fait équivalentes.
Par contre, en JSON, une chaîne est entourée par des double-quotes ou n'en est pas une.



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP