[Flash / PHP / MySQL] Le-tangram.com [TUTO]

Le-tangram.com [TUTO] [Flash / PHP / MySQL] - Flash/ActionScript - Programmation

Marsh Posté le 17-11-2005 à 19:19:42    

J'ai mis en ligne mon premier site Flash / PHP / MySQL, que j'ai réalisé dans le but de comprendre comment interfacer tous ca...
J'en communiquerais une partie des sources et utiliserais ce post sur le forum pour aider, répondre aux questions ou améliorer le site.
Ca se passe la:
http://le-tangram.com/
 
Si il y a des apprentis (ou confirmés) Hacker parmis les lecteurs de se post, je les autorises à essayer de foutre en l'air ma BDD, je l'ai sauvegardé  à l'instant et autant se la faire pirater tout de suite que dans 2 mois quand elle sera bien remplis ;)
 
Sinon toutes remarques m'interresses...
 
(évidement il y a qq manquement au niveau contenu mais ca devrait s'ameliorer dans les semaines à venir)


Message édité par mechkurt le 19-12-2005 à 08:09:25

---------------
D3
Reply

Marsh Posté le 17-11-2005 à 19:19:42   

Reply

Marsh Posté le 23-11-2005 à 09:34:17    

qq'un comprend comment regler ce PB ?
http://validator.w3.org/check?verb [...] /index.php
 
mon site sur le Tangram ce voulant être un tutoriel XHTML CCS Flash PHP MySQL (rien que ca ;) ), j'aimerais bien que accueil, sources et liens soit valide (pour jouer et creer c'est malheureusement impossible a cause des (nombreux) parametres que j'envoie a Flash en parametre et qui font planter le validateur)
 
j'ai aucun caracteres qui traine, et le pire c'est qu'il n'y a rien dans les guillemets du message d'erreurs...
 
j'utilise ce doctype ailleurs sans PB, seul difference c'est qu'ici au lieu d'etre en 8859 je suis en utf-8 pour simplifier l'interfacage Flash PHP MySQL...
 
j'ai essayer d'ajouter ca: header("Content-type: text/html; charset=UTF-8" );
...sans succes  :(


---------------
D3
Reply

Marsh Posté le 23-11-2005 à 12:07:25    

:bounce:


---------------
D3
Reply

Marsh Posté le 23-11-2005 à 13:55:19    

Citation :

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.


 
tu t'en fous c'est le BOM :o
ou bien vires le :o


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 23-11-2005 à 15:14:26    

effectivement m'en fout du BOM, c'est pas ca qui me gene mais ca:

Citation :


This page is not Valid XHTML 1.0 Strict!
 
Below are the results of checking this document for XML well-formedness and validity.
 
   1. Error Line 1 column 0: character "" not allowed in prolog.
 
���<?xml version="1.0" encoding="UTF-8" ?>


d'ailleurs je me suis foutu le doigt dans l'oeil, ca n'as rien a voir avec le charset vu qu'avec ISO-8859-1 j'ai le même PB


---------------
D3
Reply

Marsh Posté le 23-11-2005 à 15:55:48    

Citation :

���<?xml version="1.0" encoding="UTF-8" ?>


 

Citation :

���


mais justement. Ce symbole designe le BOM [:pingouino] (ce n'es pas le bom heinnn)
Supprimes le et dans le ca ou ton editeur le remet automatiquement a chaque fois qu'il sauve le document et bien change d'editeur  
(Tu utilises quel editeur? )
 


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 23-11-2005 à 16:13:16    

Dreamweaver 8, et quand je fait enregistrer sous et que je decoche "inclure une signature unicode", j'ai pas l'impression que ca marche, j'ai aussi essayer de sauver mes pages avec notepad mais sans plus de succes...
 
a propos bom c'est l'histoire de grand boutien / petit boutien parcqu'un processeur x86 (intel ou AMD) ca fonctionne pas comme un processeur de macs qui lisent pas les octets dans le même ordre que les PC ou un truc du genre  :pt1cable:  en fait j'ai rien compris a tous ca...
 
PB résolu avec Html Kit (hkedit) ou effectivement des caracteres invisibles était présent devant certaines de mes pages, je pense que ce n'est pas la faute de Dreamweaver dans la mesure ou , a mon avis, il enregistre en fonction du charset specifies, seulement j'utilise un header dans un fichier separes alors ca la mis un peu a la rue...
 
m'enfin en decochant ca aurait dut marcher  :heink:


Message édité par mechkurt le 23-11-2005 à 16:39:54

---------------
D3
Reply

Marsh Posté le 23-11-2005 à 21:21:08    

Notepad met aussi ces caractères si jme trompe pas :/
 
enfin si ca marche avec HtmlKit, tant mieux


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 03-12-2005 à 10:13:28    

Voila je voulais verifier que je n'avais pas laissé de faille béante de sécurité...
 
voila mon fichier php d'insertion de donnees:

Code :
  1. <?php
  2. ##################################################################
  3. #Fichier d'insertion de donnees pour le tangram Flash
  4. # arrive en $_POST:
  5. # -> le titre ['titre']
  6. # -> une description et/ou des mots clés['description']
  7. # -> le nom de l'auteur ['auteur']
  8. # -> pour chaque pieces p1 à p7: -> la position en X ['p1_posx']
  9. #                                -> la position en Y ['p1_posy']
  10. #                                -> l'angle ['p1_angle']
  11. #                                -> si elle est flip ou non ['flip']
  12. # actions:
  13. # -> on rajoute la date
  14. # -> on enregistre la nouvelle entrée dans la BDD
  15. # -> on renvoie statut=ok ou statut=error
  16. ##################################################################
  17. //variables de connexions:
  18. $host="adresse_du_serveur";
  19. $login="identifiant";
  20. $password="mot_de_passe ";
  21. $db="nom_de_la_base";
  22. $table="tangram";
  23. $connexion = mysql_connect($host,$login,$password);
  24. if ($connexion) {
  25. $statut = 'ok';
  26. } else {
  27. $statut = mysql_error();
  28. }
  29. mysql_select_db($db);
  30. //preparation de la requete d'insertion:
  31. $trucavirer = array("<", ">", "\"", "'", "\\", "&" );
  32. $titre = str_replace($trucavirer," ",$_POST['titre']);
  33. $description = str_replace($trucavirer," ",$_POST['description']);
  34. $auteur = str_replace($trucavirer," ",$_POST['auteur']);
  35. $date = date('Y-m-d');
  36. $post_num = array();
  37. foreach($_POST as $key => $value) {
  38. $post_num[$key] = intval($value);
  39. }
  40. $query="INSERT INTO ".$table." VALUES ('', '".$titre."', '".$description."', '".$auteur."', '".$date."', ";
  41. $query.=$post_num['p1_posx'].", ".$post_num['p1_posy'].", ".$post_num['p1_angle'].", ".$post_num['p1_flip'].", ";
  42. $query.=$post_num['p2_posx'].", ".$post_num['p2_posy'].", ".$post_num['p2_angle'].", ".$post_num['p2_flip'].", ";
  43. $query.=$post_num['p3_posx'].", ".$post_num['p3_posy'].", ".$post_num['p3_angle'].", ".$post_num['p3_flip'].", ";
  44. $query.=$post_num['p4_posx'].", ".$post_num['p4_posy'].", ".$post_num['p4_angle'].", ".$post_num['p4_flip'].", ";
  45. $query.=$post_num['p5_posx'].", ".$post_num['p5_posy'].", ".$post_num['p5_angle'].", ".$post_num['p5_flip'].", ";
  46. $query.=$post_num['p6_posx'].", ".$post_num['p6_posy'].", ".$post_num['p6_angle'].", ".$post_num['p6_flip'].", ";
  47. $query.=$post_num['p7_posx'].", ".$post_num['p7_posy'].", ".$post_num['p7_angle'].", ".$post_num['p7_flip']." );";
  48. //envoie de la requete d'insertion:
  49. if (mysql_query($query)) {
  50. $statut = 'ok';
  51. } else {
  52. $statut = mysql_error();
  53. }
  54. //retour Flash
  55. echo "&statut=".$statut."&";
  56. mysql_close();
  57. ?>


et la recuperation des donnes de $_GET de jouer.php:

Code :
  1. ##################### recupération des données de $_GET[] et verification ################################
  2. if (isset($_GET['ID'])) {
  3. $ID=intval($_GET['ID']);
  4. } else {
  5. $ID='ID';
  6. }
  7. if (isset($_GET['page'])) {
  8. $page=intval($_GET['page']);
  9. } else {
  10. $page=1;
  11. }
  12. if (isset($_GET['recherche'])) {
  13. $recherche = urldecode($_GET['recherche']);
  14. $trucavirer = array("<", ">", "\"", "'", "\\", "&" );
  15. $recherche = str_replace($trucavirer," ",$recherche);
  16. $recherche_array = explode(" ",$recherche);
  17. } else {
  18. $recherche='';
  19. }
  20. if (isset($_GET['tri'])) {
  21. switch ($_GET['tri']) {
  22. case 'auteur':
  23.    $tri='auteur';
  24.    break;
  25. case 'titre':
  26.    $tri='titre';
  27.    break;
  28. default:
  29.    $tri='date';
  30.    break;
  31. }
  32. } else {
  33. $tri='date';
  34. }
  35. if (isset($_GET['sens'])) {
  36. switch ($_GET['sens']) {
  37. case 'croissant':
  38.    $sens='croissant';
  39.    break;
  40. default:
  41.    $sens='decroissant';
  42.    break;
  43. }
  44. } else {
  45. $sens='decroissant';
  46. }
  47. if (isset($_GET['resultats'])) {
  48. switch ($_GET['resultats']) {
  49. case 5:
  50.    $resultats=5;
  51.    break;
  52. case 10:
  53.    $resultats=10;
  54.    break;
  55. case 20:
  56.    $resultats=20;
  57.    break;
  58. case 25:
  59.    $resultats=25;
  60.    break;
  61. default:
  62.    $resultats=15;
  63.    break;
  64. }
  65. } else {
  66. $resultats=15;
  67. }


 
A votre avis, y a un PB ?


Message édité par mechkurt le 03-12-2005 à 10:14:50

---------------
D3
Reply

Marsh Posté le 04-12-2005 à 09:58:26    

:bounce:


---------------
D3
Reply

Marsh Posté le 04-12-2005 à 09:58:26   

Reply

Marsh Posté le 04-12-2005 à 10:29:41    

un conseil, au lieu d'utiliser ton "trucavirrer" (genre t'a pas virrer le --), utilise mysql_secure_escape (je suis plus sur a 100% du nom, mais c'est un truc dans ce style la)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-12-2005 à 12:24:02    

mysql_real_escape_string() ?
 
Pour empecher les javascripts injections, j'ai fait un mix d'un code trouvé sur php.net et de mon ancien truc, qu'en pensez vous ?

Code :
  1. $trucavirer = array("<", ">", "&", "-", "=" );
  2. function verif_post($value) {
  3.    // Stripslashes
  4.    if (get_magic_quotes_gpc()) {
  5.      $value = stripslashes($value);
  6.    }
  7.    // Protection si ce n'est pas un entier
  8.    if (!is_numeric($value)) {
  9.      $value = "'" . mysql_real_escape_string($value) . "'";
  10.      $value = str_replace($trucavirer," ",$value);
  11.    }
  12.    return $value;
  13. }
  14. $post_traite = array();
  15. foreach($_POST as $key => $value) {
  16.     $post_traite[$key] = verif_post($value);
  17. }


 
Ps: pourquoi virer les --, qu'est ce qu'on peut faire avec des -- ?


Message édité par mechkurt le 04-12-2005 à 18:19:57

---------------
D3
Reply

Marsh Posté le 04-12-2005 à 18:18:26    

Commenter du SQL


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-12-2005 à 23:32:28    

Bonjour à tous,
 
Je suis en train de faire un petit site en flash/PHP/SQL
Quand je teste le flash, tout marche.
Mais quand j'integre le fichier swf dans une page html et que je l'ouvre, aucune mise à jour de table ne fonctionne   :??:   et je n'ai aucun message d'erreur. Est-ce normal ?
Pour l'instant tout tourne en local. J'utilise easyphp 1.8 et je n'ai pas encore d'hebergeur qui accepte le PHP.
Est-ce que quelqu'un à une idée ?
Merci d'avance
JR


---------------
Noël au balcon, enrhumé comme un con
Reply

Marsh Posté le 19-12-2005 à 07:48:14    

tu dit que que tu teste la Flash, de quel manière ?
comment fait tu tes connexions Flash / PHP ?
 
difficile a dire comme ca, essaye de renvoyer les messages d'erreur SQL a Flash et de les afficher dans un champs texte (cf. tangram_make.fla et insert.php de mon site sur le tangram)


---------------
D3
Reply

Marsh Posté le 19-12-2005 à 09:29:45    

Je teste mon fichier flash en faisant:
Control --> Test Movie
A chaque fois que j'ai besoin d'interroger ou de mettre à jour une table, j'appelle un php.
 
Ex:
envoi_departement.sendAndLoad(phppath + "departements.php", select_departement, "GET" );
 
Mais, a mon avis c'est plutot entre le PHP et MYSQL qu'il y a un probleme, je vais essayer de récupérer l'éventuel message d'erreur de MYSQL.
Toutes les requetes SQL semblent marcher tant qu'il n'y a pas de maj.
Ce sont les "UPDAT" ou "INSERT" qui ne fonctionne plus en passant par Internet explorer

Reply

Marsh Posté le 19-12-2005 à 10:43:55    

UPDATE
 
sinon, c'est sur que c'est un PB de PHP/mySQL (surtout si les insert simple fonctionne mais pas les mises a jour de champs existant), montre voir ta requete d'update pour voir ce qui deconne...


---------------
D3
Reply

Marsh Posté le 20-12-2005 à 17:52:21    

Il y a une case a cocher en dessous de chaque miniature. Quand on clique dessus, flash appelle ce PHP.
avec comme parametres entrants swf_Id_utilisateur et swf_Id_carte_postale
Il regarde dans la table "caddies"(Caddies_Id_utilisateur,Caddies_Id_carte_postale) si il y a un enregistrement correspondant (SELECT)
si oui => Il l'efface (DELETE) et il retourne  &select=0
sinon => Il l'ajoute (INSERT) et il retourne  &select=1
 
L'OBJET FLASH (SWF) MARCHE NICKEL MAIS DES QUE JE PASSE SOUS INTERNET EXPLORER CA DECONNE:
Il ne passe jamais dans le "sinon" et n'efface jamais l'enregistrement . Il retourne toujours &select=1 au flash
qui donc laisse la case cochée ????   :heink:  
 
<?
$server = "localhost";
$username = "root";
$password = "moncusulacomod";
$database = "cp";
 
if (!mysql_connect($server, $username, $password)) {
   $r_string = '&errorcode=1&msg='.mysql_error().'&';
} elseif (!mysql_select_db($database)) {
   $r_string = '&errorcode=2&msg='.mysql_error().'&';
} else {
   $libquery= 'SELECT * from caddies WHERE Caddies_Id_utilisateur = "' . $_GET["swf_Id_utilisateur"] . '" AND Caddies_Id_carte_postale="' . $_GET["swf_Id_carte_postale"] . '"';
   $qr = mysql_query($libquery);
   if (!qr) {
   $r_string = '&errorcode=1&msg='.mysql_error().'&';
   } else {
      if (mysql_num_rows($qr)==0) {
   $libquery= 'INSERT INTO caddies(Caddies_Id_utilisateur, Caddies_Id_carte_postale) VALUES(' . $_GET["swf_Id_utilisateur"] . ' , ' . $_GET["swf_Id_carte_postale"] . ')';
        $r_string = '&errorcode=0&select=1&libquery=' . $libquery . '&';
      } else {
      $libquery= 'DELETE FROM caddies WHERE Caddies_Id_utilisateur = "' . $_GET["swf_Id_utilisateur"] . '" AND Caddies_Id_carte_postale="' . $_GET["swf_Id_carte_postale"] . '"';
        $r_string = '&errorcode=0&select=0&libquery=' . $libquery . '&';
      }
      $qr = mysql_query($libquery);
   }
}
 
// Debug //
   if (!qr) {
   $r_string = '&errorcode=1&msg='.mysql_error().'&';
   }
 
echo $r_string;
?>


---------------
Noël au balcon, enrhumé comme un con
Reply

Marsh Posté le 20-12-2005 à 17:59:58    

PS Je ne pense pas que ça vienne du code puisque ça marche avec l'objet flash. Je pense plutot à une incompatibilité avec la version d'internet explorer (6.0.2900.2180.xpsp_sp2)  
J'utilise EASYPHP 1.8 :
APACHE 1.3.33
PHP 4.3.10
PHPMYADMIN 2.6.1
MYSQL 4.1.9


---------------
Noël au balcon, enrhumé comme un con
Reply

Marsh Posté le 21-12-2005 à 07:57:18    

laisse tomber flash pour le moment, comme tu passe par $_GET, tu peux debuguer dans ton browser en tappant tes variables derrieres l'URL nomdetapage.php?swf_Id_utilisateur=valeur&swf_Id_carte_postale=valeur
 
vois avec differentes valeur si ton code PHP se comporte comme il faut
verifie aussi avec PHPMYADMIN que ta base actualise bien les valeurs...
 
-> en l'état si select=1 est troujours renvoyé c'est que mysql_num_rows($qr) renvoie toujours 0, soit ta base est vide, soit ta requete est foireuse
 
bon courage  ;)


---------------
D3
Reply

Marsh Posté le 21-12-2005 à 17:44:46    

Merci mechkurt pour ton aide.
En deboguant le php dans IE, ça marche.
Le probleme n'apparait que à l'affichage de la page html contenant le swf.
Par contre je me suis apperçu que la case restait toujours cochée jusqu'à ce que je ferme IE
A l'ouverture suivante, au contraire, elle restait toujours vierge.
J'ai changé dans les options de IE:
Outils  
-> Options Internet
-> Onglet Général
-> Bouton Paramètres... de Fichiers Internet temporaires
-> J'ai coché Vérifier s'il existe une version plus récente des pages enregistrées
    "A chaque visite de la page"
 
et depuis ça marche !
Alors, une nouvelle question:
Comment forcer le rafraichissement de la page du visiteur ?

Reply

Marsh Posté le 21-12-2005 à 18:43:24    

je sais plus exactement mais une balise pragma no cache, (recherche google) devrait correspondre a ce que tu recherche


Message édité par mechkurt le 21-12-2005 à 18:43:36

---------------
D3
Reply

Marsh Posté le 21-12-2005 à 20:38:55    

J'ai essayé:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
et:
<META HTTP-EQUIV="expires" CONTENT="0">
mais ça ne marche pas

Reply

Marsh Posté le 22-12-2005 à 08:06:35    

sinon header() fait un truc du même genre mais en plus efficace, par contre le header doit etre en tout debut de page (comme session et cookie)
 
cf. interdire la mise en cache


---------------
D3
Reply

Marsh Posté le 27-12-2005 à 09:49:06    

J'ai tout essayé (?), il n'y a rien a faire.
En fait j'ai l'impression que ce n'est pas un probleme de cache.
Pour IE, la page est déjà affichée donc il n'essaie même pas de la réafficher.
Donc, même sans cache, il ne la recharge pas.
Je vais essayer de trouver une bidouille dans mon flash pour montrer à IE que la page à changé.
Décidément, je commence à croire que flash et PHP sont incompatibles:
J'ai trouvé un hebergement pour faire des tests, c'est pas gagné !
Suivant le poste d'où on se connecte, ça marche ou ça ne marche pas ?!?
Sur certain postes:
select_utilisateur.onLoad = function(ok:Boolean) {
retourne ok=false
=> impossible de recuperer les parametres en retour du PHP.
Le plus étonnant c'est que sur ces postes si je lance le PHP à partir de la barre d'adresse d'IE, ça marche !

Reply

Marsh Posté le 27-12-2005 à 18:55:41    

ca ne regleras sans doute pas le PB (quoique) mais si j'étais toi, j'enregistrais l'état des cases dans flash et ne ferait un appell a la base de donnée qu'a la fin, parcque faire un insert ou un delete a chaque fois que l'on coche / decoche une case c'est lourd!


---------------
D3
Reply

Marsh Posté le 03-01-2006 à 14:55:52    

question à propos de Flash et PHP...
Quand on fait du php... on envoie une requete au serveur, le serveur mouline... et il nous retourne un resultat...
 
Je voulais savoir si avec flash.. utilisant du PHP, utilise le même principe.. c'est à dire est ce qu'il faut recharger une page PHP pour en recuperer les resultats ou bien il peut faire une requete directement au serveur ?
 
(je sais pas si ma question est bien claire en fait)


Message édité par freed102 le 03-01-2006 à 14:58:21

---------------
Freed102
Reply

Marsh Posté le 05-01-2006 à 14:13:07    

Mmmmh TOI, tu ne "fais pas du PHP" ... jamais ... ton navigateur interprète du HTML ( et tout les machins "client-side" qu'il y a autour )
Ce que l'interpréteur PHP crache à ton navigateur, c'est et ça sera toujours du HTML ( ou n'importe quoi d'autre; xml+xsl/xslt, texte brut, ... ) .. la preuve en est que, à moins d'un gros plantage du serveur dans ses mimetypes, tu ne verras jamais le code source de ton script PHP dans ton navigateur !
 
Suivant le même raisonnement, Flash ne "fait" ni n' "utilise" du PHP, il se contente de faire une requête au serveur qui va interpréter le code php et renvoyer "qque-chose" à Flash ... un fichier .xml par exemple généré dynamiquement par le script ...
 
Pour la même raison, Flash peut faire appel à des "pages" écrites en n'importe quoi ( perl, php, python, cgi en c/c++, en java, ... ) du moment que la réponse qu'il reçoit du serveur qui aura exécuté/interprété le programme/script lui est compréhensible ...
 
(je sais pas si ma réponse est bien claire enfait) ;)
 

Reply

Marsh Posté le 05-01-2006 à 14:18:11    

je ne vois nulle part l'avertissement pourtant rendu obligatoire par l'assemblée nationale (loi du 7juillet 2004) sur la haute toxicité de flash ? :heink:

Reply

Marsh Posté le 05-01-2006 à 14:26:34    

( marrant .. ça a pas trop changé en fait ..... )

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed