Compléter une BDD
Bonjour,
J'aimerais savoir s'il est possible de remplir une table de ma base de données avec un NSDictionary.
Car je souhaite pouvoir modifier les données des personnages de mon application directement en ligne (grâce à la BDD), mais pour ne pas devoir remplir la BDD à la main ( copier coller ...) j'aimerais savoir si je peux envoyer mon NSDictionnary contenant toutes les informations des personnages directement dans la base.
Merci,
Horus.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ca manque de données ta question : quand tu parles de BDD, tu parles d'une Base de Données CoreData ? Ou d'une base en ligne sur un serveur (genre MySQL) ? Si oui comment communiques-tu avec ? Un WebService de ton cru ?
Dans tous les cas "envoyer ton NSDictionary directement dans la base" ça n'a pas trop de sens... j'ai du mal à voir ce que tu imagines par cette phrase. Et d'ailleurs j'ai du mal à comprendre pourquoi tu utilises des NSDictionary pour manipuler les données detes personnages, plutôt que des objets (voire même mieux, si tu utilises CoreData tu as directement les NSManagedObject correspondant, donc y'a rien à faire)
Salut Ali,
Alors j'ai une BDD MySQL hébergé chez OVH (donc oui distant).
Je sais que j'aurais du utiliser des objets plutôt que des NSDictionary mais pour le moment j'ai des NSDictionnary composé des informations de chaque champion (Nom, fort contre ... faible contre .... etc) et je souhaite donc remplir ma base de données MySQL avec toutes ces informations, car je souhaite améliorer l'application pour que celle-ci récupérer les données de chaque champion sans pour autant devoir effectuer une MaJ de l'application.
Mais pour ne pas devoir remplir la BDD à la main depuis PhpMyAdmin je souhaite envoyer toute les informations qui compose l'application actuellement sur la BDD.
J'aimerais donc savoir comment faire ? je sais comment faire en lecture avec une page php renvoyant un fichier JSON, mais pas en écriture.
Ok je suis obligé ? il n'y a pas de FrameWork même non officiel c'est juste pour ne pas devoir tout recopier.
Et l'envoi des données depuis l'iPhone vers le WebService se fait comment JSON ?
Il faut convertir le NSDictionary ?
Merci de ton aide ali.
Y'a d'autres membres du forum qui sauront mieux te répondre que moi de ce côté, et puis ça dépend de ton niveau en PHP, de l'architecture de ta BDD et de ton MDD, si tu auras besoin de plusieurs points d'entrée et donc de penser ton WS proprement avec une architecture type REST ou autre, ou si c'est un truc très simple à un seul point d'entrée et un seul type de données à modifier, avec juste finalement un ".php" qui fait le boulot.
Bien sûr il y a à prendre en compte les aspects sécurité d'accès (pour l'accès à ton WS que n'importe qui ne puisse pas modifier ta BDD et foutre le boxon dedans), sécurité de code (pour éviter les failles SQL ou autre), les cas d'accès synchrones (2 clients iPhone qui modifient ta base en même temps)... mais bon, là encore y'a plein de sujets sur les forums qui parlent de ça et pour lesquels on a déjà expliqué ces sujets plusieurs fois.
Et oui les échanges de données se font en JSON (enfin c'est pas obligé mais c'est le plus répandu et le plus adapté). Convertir un NSDict en JSON se fait en une LoC, de la même manière que la conversion inverse que tu fais déjà pour la lecture.
Niveau sécurité ce n'est pas le plus important le code va être utilisé une seule fois pour remplir la BDD après je supprime tout une fois celle-ci remplie.
Je vais donc regarder comment faire pour le WebService merci ^^ et niveau php je débute tout juste le code de lecture je ne l'ai pas vraiment j'ai juste déjà travaillé dessus donc j'ai déjà fait quelque recherche à ce sujet.
Tu peux creer ce fichier .sql à partir de tes NSDictinary en faisant un petit bout de code dans un coin à base de NString stringWithFormat:.
Ah merci beaucoup FKDEV ! je vais regarder comment ça fonctionne si tu as un exemple de fonctionnement je veux bien, car je ne connais pas vraiment à quoi ressemble le format des .sql
Je pense :
-> Enregistrer toutes les lignes dans un tableau puis afficher le tableau pour faire un copier de la console et coller dans un fichier texte ?
-> Les ligne vont ressembler à ça que je génére avec le stringWithFormat et une boucle for :
mysql_query ("INSERT INTO Champion (nom, image) VALUES ('Ahri', 'Ahri.png')");
mysql_query ("INSERT INTO Champion (nom, image) VALUES ('Akali', 'Akali.png')");
etc etc.
C'est bien ça ?
Oui c'est bien ça, dans la console ou dans un fichier texte via le message writeToFile: de NSString.
Avec la console, il faut faire attention aux caractères spéciaux.
Tu n'as pas besoin de mettre les "mysql_query".Juste tes requêtes SQL, sans guillemets, terminées par un point-virgule.
Si tu utilises phpMyAdmin, il y a un bouton SQL à gauche qui ouvre une fenêtre contenant un onglet pour l'import des fichiers.
D'accord comme ceci alors: INSERT INTO Champion (nom, image) VALUES ('Ahri', 'Ahri.png');
Et Champion correspond à la table c'est bien ça ?
Oui j'ai trouvé merci beaucoup de ton aide !
Yep.
Je te laisse chercher sur google : mysql +"INSERT INTO"
Merci beaucoup de ton aide je bosse dessus de suite ^^
Je suis la pour donner un avis niveau SQL mon prof m'a fait hair une chose : Les nom des tables c'est en majuscules CHAMPION
Apres je sais pas pour vous ...
Ok ok je n'ai pas les réflexes de SQL je m'en sert très peux et j'apprend au soir par loisir ^^.
Apres la c'est pas grave tu as une lettre en maj et puis tu vas pas t'amuser à renommer toutes les tables
Je ne suis pas un spécialiste de la base de donnée mais, à priori, je n'aime pas l'idée de mettre les noms de table en majuscules.
Les majuscules sont plutôt réservées aux mots clés en SQL, non ?
Mes conventions de nommages perso sont :
table : tblChampion
clé primaire : id
clé étrangère : champion_id
champ : nom
Les pros de la BDD ont des règles plus strictes. Un fil intéressant.
Ah bon bah je fait fausse route je suis d'accord avec tout sauf pour le nom des tables.
Mais c'est un très bon lien
Par contre je galère bien sur l'écriture ...
J'utilise :
et ça ne fonctionne pas quelqu'un à déjà utiliser writeToFile svp ?
Oui :
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *directory = [paths objectAtIndex:0];
NSString *path = [[NSString alloc] initWithFormat:@%@/%@", directory, @codeSQL.txt];
[ligne writeToFile:path atomically:YES]; //tu peux laisser encoding et error
Si c'est un fichier temporaire pas besoins de paths tu met directory = NSTemporaryDirectory();
Cf http://forum.cocoacafe.fr/topic/11226-résolu-envoyer-un-fichier-txt-au-serveur/
Quand on fait un MDD on utilise en général directement le nom de l'entité sans préfixe, encore + quand on fait du ActiveRecord derrière (comme en Ruby avec Rails... ou même en ObjC avec MagicalRecord et CoreData) pour pouvoir écrire NSArray* liste = [Champion findAll] si on a bien nommé notre entité Champion et pas tblChampion. Du coup en général avec une BDD (qui bien souvent est liée à un MDD similaite dans 95% des cas) on a les mêmes conventions.
Ce que j'avais en tete c'est que les XXX était en maj, j'avais oublier qu'il fallait mettre tbl ou t devant mais ca reste en maj le nom de la table : tCUISINE
Ah bon ok bah si tu le dis mois je suis plutot SQL Developer apres bon peut etre que je me trompe
J'ai sortie le texte par copier coller de la console car l'enregistrement dans un fichier texte ne fonctionne pas ... j'ai essayé de mettre un booléen pour vérifier et il fonctionne sauf que je n'est aucun fichier ... j'ai fait sa pour gagner du temps mais c'est encore plus long que prévue xd quelqu'un sait pourquoi le fichier texte n'existe pas ? je l'ai créé et ajouté à xCode.
et SQL me constate une erreur de syntaxe ?
Message d'erreur :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Attaque x9 +0,95 dàƒÂ©gàƒÂ¢ts d'attaque', 'Grand Glyphe de RàƒÂ©sistance Magique x9 ' at line 1
J'ai testé en UTF 8 et 16 même problème
Je ne suis pas sadique mais c'est un problème classique dans tous les langages donc c'est mieux si tu le trouves tout seul, ça va te faire gagner des points d'experience, voir un niveau supplementaire, si tu le trouves.
Allez je t'aide aussi ca saute aux yeux surtout les couleurs vertes :P
+0,95 dégâts d'attaque', 'Grand Glyphe de Résistance Magique x9
+1,34 résistance à la magie', 'Grand Sceau d'Armure x9
MAJ : EN plus gros c'est mieux
Oui j'ai bien compris que c'était à cause des caractères spéciaux (à ,é,è ...) donc je me suis dit si j'arrive à enregistrer le .txt avec l'encodage UTF8 peut être que le problème disparaà®trait mais je n'arrive pas à utiliser le writeToFile pourtant il ne me retourne aucune erreur (utilisation d'une variable bool pour vérifier).
Oui je me doute bien... mais à l'affichage il n'y aura plus les accents, je cherche je vous tien au courant dés que j'ai trouvé mais je ne comprend vraiment pas pourquoi je n'arrive pas à utiliser le writeToFile ...
Edit: le bug ne viens pas des é,à etc le problème viens de : d'attaque etc c'est l'apostrophe qui pose problème.
Edit 2: Résolu :
si ça peux aider. ^^
Super ! Tu as trouvé 'tout seul' !