Un petit défi d'encodage SQL pour ceux qui le veulent...

Eléphant du PHP | 58 Messages

15 août 2008, 11:43

J'ai un gros problème pour sauvegarder mes données à partif d'une appli Flash... Pb de codage je pense.... mais j'ai passé 10heures dessus hier et rien n'y fait....j'ai parcouru tout les forums de l'univers... ce doit pas être compliqué pourtant de trouver une appli Flash-PHP-MySQL du style carnet d'adresse avec SendAndLoad??!!

j'ai donc fait une version épurée qui peut intéresser les amateurs...c'est une appli qui lit 4 enregistrements et les affichent sous flash 8 dans un texte dynamique... Si l'utilisateur modifie le texte et appuie sur suivant ou précédent, il est sauvegardé.... et là le problème se pose! comment éviter les déformations de texte. J'ai tout essayé encodage, passer mes bases en UTF8... bref! rien n'y fait...

Je soumet donc à la participation collective un fichier PHP avec la base TEST et mon fichier FLASH pour ceux qui voudraient essayer de parvenir à un résultat.

Merci pour votre aide, c'est un projet très important pour moi et finalisé à 95% (10 mois que j'y suis dessus).

Jean Marc


Interclassement pour la connection MysSQL : UTF8_unicode_ci....
avec le jeu de caractère aussi UTF8_unicode <== default-character-set=utf8 dans WAMP.
Version MySQL : 5.0.37
Version Flash 8.0


CODE PHP (fichier à appeler test.php ou à télécharger ici : http://questar.free.fr/test.phpSAVE )
<?php
//intègre le fichier de connection qui sera différent en LOCAL ou sur le SERVEUR
include('donneesconnection.php');

//pour le local avec WAMP , vous pouvez activer le code ci-dessous :
//mysql_connect("localhost", "root", ""); // Connexion à MySQL
//mysql_select_db("questar") or die("Impossible d'ouvrir la base de donnees "); // Attention de bien remplacer le nom de la base qui ici est :QUESTAR

//$codage=mysql_query("SET NAMES 'UTF8'"); 
//récupère les variables passées par Flash
$actionsql=$_GET['actionsql'];
$idm=$_GET['idm'];
$message=$_GET['contenumessage'];
//on active le codage plus tard pour peaufiner petit à petit
//$message=mysql_real_escape_string(utf8_encode($message));
//remplace(&$message) si nécessaire et cela ne résoud pas tout en plus;

// selon action, lancer le code associé
//*** action=0 --> AFFICHAGE du PREMIER ENREGISTREMENT
if ($actionsql==0)
{
	//affiche le premier enregistrement de la base
	$rq="SELECT * FROM test ORDER BY id ASC limit 1";
	$resultat=mysql_query($rq) or die(mysql_error());
	$donnees = mysql_fetch_array($resultat);
	$idm=$donnees['id'];
	$message=$donnees['message'];
}

//*** action=1 --> Quest SUIVANTE ou affichage de la première message de la table active
if ($actionsql==1)
{
	//SAUVEGARDE le message en cours à activer dans un second temps quand on lira et affichera parfaitement les données
	//$rq="UPDATE test SET message='$message' WHERE id='$idm'";
	//$resultat=mysql_query($rq) or die(mysql_error());
	
	//ouvre la table du QCM et cherche le message suivant dont l'id est supérieur à l'ID reçu
	$rq="SELECT * FROM test WHERE id>".$idm." ORDER BY id ASC limit 1";
	$resultat=mysql_query($rq) or die(mysql_error());
	$donnees = mysql_fetch_array($resultat);
	$idm=$donnees['id'];
	$message=$donnees['message'];
}
//*** action=2 --> Quest PRECEDENTE
if ($actionsql==2)
{
	//sauvegarde le message en cours à activer dans un second temps quand on lira et affichera parfaitement les données
	//$rq="UPDATE test SET message='$message' WHERE id='$idm'";
	//$resultat=mysql_query($rq) or die(mysql_error());
	
	//ouvre la table du QCM et cherche la message dont l'id est supérieur à l'ID reçu
	$rq="SELECT * FROM test WHERE id<".$idm." ORDER BY id DESC limit 1";
	$resultat=mysql_query($rq) or die(mysql_error());
	$donnees = mysql_fetch_array($resultat);
	$idm=$donnees['id'];
	$message=$donnees['message'];
}
//renvoie les variables remplies à Flash
//echo "&idmessage=".$idquest."&message=".utf8_encode($message)."&r1=".utf8_encode($r1)."&r2=".utf8_encode($r2)."&r3=".utf8_encode($r3)."&numreponse=".$numreponse."&commentaire=".utf8_encode($commentaire);
echo "&idmessagephp=".$idm."&messagephp=".urlencode(utf8_encode($message));
//
// Code suivant : non appliqué si pas besoin.
//remplace les caractères accentués qui déforment le texte si la fonction est appelée
function remplace($a)
{
	$a = str_replace("è","è",$a);
	$a = str_replace("é","é",$a);
	$a = str_replace("ê","ê",$a);
	$a = str_replace("î","î",$a);
	$a = str_replace("ù","ù",$a);
	$a = str_replace("ô","ô",$a);
	$a = str_replace("ë","ë",$a);
	//$a = str_replace("à§","ç",$a);
	$a = str_replace("ç","ç",$a);	
	$a = str_replace("ë","ë",$a);	
}
?>
Code SQL de la petite base de test
-- phpMyAdmin SQL Dump
-- version 2.10.1
-- http://www.phpmyadmin.net
-- 
-- Serveur: localhost
-- Généré le : Ven 15 Août 2008 à 11:29
-- Version du serveur: 5.0.41
-- Version de PHP: 5.2.3

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

-- 
-- Base de données: `questar`
-- 

-- --------------------------------------------------------

-- 
-- Structure de la table `test2`
-- 

CREATE TABLE `test2` (
  `id` mediumint(9) NOT NULL auto_increment,
  `message` varchar(100) character set utf8 NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6 ;

-- 
-- Contenu de la table `test2`
-- 

INSERT INTO `test2` (`id`, `message`) VALUES 
(1, 'hélène est un peu coinçée; désolé c''est à cause du test.'),
(2, 'hélène bêle'),
(5, 'l''été à coté de la côte.'),
(4, 'où que j''aille, ça grêle.');
Code FLASH à charger - petit fichier test.fla
http://questar.free.fr/test.fla

ViPHP
ViPHP | 4039 Messages

15 août 2008, 12:17

. et là le problème se pose! comment éviter les déformations de texte. J'ai tout essayé encodage, passer mes bases en UTF8... bref! rien n'y fait...
les encoder en base64 ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 58 Messages

15 août 2008, 12:20

Merci mais pourquoi donc le 64? il y a un avantage? tout le monde conseille l'UTF8 d'autant que Flash fonctionne en UTF8!??

ViPHP
ViPHP | 4039 Messages

15 août 2008, 14:28

http://fr.wikipedia.org/wiki/Base64

C'est uniquement pour le transfert. Si tu as des soucis de transfert de texte, y'a pas mieux que le base64. Après, de chaque côté, tu en fais ce que tu veux :wink:
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 58 Messages

15 août 2008, 14:51

m'oui!...marrant justement je suis tombé sur cet article dès que tu m'en as parlé... mais j'ai l'impression que mon problème est plus basique et que cela ne vient pas du tout de Flash...

Je crois que j'aurais le même pb si je prend une donnée d'un enregistrement SQL à l'aide d'un script PHP appelé envoi.php, je le passe par POST en URL, et je le récupère dans un autre script PHP reception.php qui enregistre la donnée à nouveau.

Je crois que c'est effectivement un pb d'encodage. Peux tu me dire comment je l'encode en BASE64?

Il n'y a personne qui est capable de me renseigner très clairement la dessus?... cela fait tellement de temps et d'essais que je suis bloqué??!!

Merci.

Eléphant du PHP | 58 Messages

21 août 2008, 18:12

Personne n'a de réponse?? je suis toujours bloqué là!!

ViPHP
ViPHP | 4039 Messages

22 août 2008, 10:11

Pour ce qui est de l'encodage en base 64, la moindre recherche t'aurais donner ces deux fonctions, incluses dans php depuis la version 4:
* base64_encode()
* base64_decode()

Après, pour décoder du côté flash, tu dois pouvoir trouver assez de scripts en javascript sur le net, et ce sera un jeu d'enfant de les transférer en actionscript.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2008, 14:48

Ben d'accord ! j'avais déjà consulté tes références BASE64 ...je vais essayer mais le seul problème est que ce décodage n'est pas natif dans Flash et je m'en serait bien passé...

Bon la balle est dans le camp de Flash...

Merci à toi...

Je pensais néanmoins que si quelqu'un voulait s'attaquer à faire tourner avec moi la petite appli ci-dessus, ce serait une mine d'or pour tous ce qui veulent développer une appli très courante du même genre.

a+