Videos streaming images jeux et buzz
Connexion






Perdu le mot de passe ?

Inscrivez-vous maintenant !
Menu Principal
Communauté


(1) 2 3 »


Wiliwilliam
Sql => array php
 0  #1
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 37191
Karma: 17455
Bonjour bonsoir,
je tente actuellement de faire une chose:
je crée un array en php, basique, array("1"=>1,"2"=>1,"3"=>0,"4"=>1,"5"=>0,"6"=>1,"7"=>0);
Je stock en brut l'array dans un VARCHAR en SQL.

Ensuite j'aimerais récupérer cette valeur et pouvoir la réutiliser sous forme d'array comme précédemment.

J'ai regardé à gauche à droite sur le web, je suis tombé sur des fonctions de serialize, mais j'ai pas l'impression que ça me permette de récupérer exactement le même array.

Du coup mes questions sont:
est ce que c'est la bonne méthode pour stocker l'array dans la base de donnée?
comment récupérer exactement le même array en php ensuite?

Contribution le : 16/03/2016 11:59
Signaler

Arsenick
 0  #2
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
@Wiliwilliam_
Tu peux le faire "à l'ancienne" : tu stock tes données en SQL sous forme de CSV => 1,1,0,1,0,1,0 dans ton exemple (sans les clés mais tu peux les ajouter).
Lors du retour, tu joues avec strpos() et substr() pour découper ton CSV et Array_push() pour recrée ton tableau à l'identique.

Mais pour moi c'est réinventé la roue parce que c'est à ça que sert serialize()/unserialize().

Tu peux aussi jouer avec les méthodes magique __Sleep() et __Wakeup() afin de contrôler ton Array avant le serialize() et après le unserialize().


Pour ce qui est du fond de la question et à mon sens (cela n'engage que moi), stocker un objet complet en DB n'est pas une bonne méthode car il est directement lier au langage et en limite la portabilité.
Une bonne méthode (toujours à mon sens) est de ne stocker que les données en DB et de reconstruire l'objet à partir des données obtenues par requête DB.

Contribution le : 16/03/2016 12:22
Signaler

Wiliwilliam
 0  #3
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 37191
Karma: 17455
@Arsenick je vais peut être t'en demander beaucoup, mais tu pourrais pas me faire un exemple d'aller/retour php->sql sql->php avec un array("1"=>0,"2"=>1) ?
je suis pas sur d'avoir bien compris le __sleep et __wakeup et surtout à quel moment ils interviennent.

(pour le CSV j'avais regardé et je trouvais que ça nécessitait trop de ressources de transformer un array en CSV)

Contribution le : 16/03/2016 12:49
Signaler

Invité
 0  #4
FantômeInvité
Citation :

@Arsenick a écrit:

Pour ce qui est du fond de la question et à mon sens (cela n'engage que moi), stocker un objet complet en DB n'est pas une bonne méthode car il est directement lier au langage et en limite la portabilité.
Une bonne méthode (toujours à mon sens) est de ne stocker que les données en DB et de reconstruire l'objet à partir des données obtenues par requête DB.


+1

T'as quoi comme contraintes ? Les tableaux que tu veux stocker ont toujours la même dimension ? T'auras toujours des couples clé-valeur, ou alors parfois t'as des valeurs nulles ou des valeurs sans clés ? Est-ce que tes clés sont toujours séquentielles (comme ton exemple) ?

Contribution le : 16/03/2016 12:53
Signaler

Fichtre
 1  #5
Je m'installe
Inscrit: 20/11/2014 19:41
Post(s): 144
Oh serieux vous allez chercher loin les gars !!

C'est quoi dans ton array? Dans tous les cas c'est idiot de stocker "array( 1=>..." dans une base de donnée...

Faut que tu prennes les bases du php et que tu penses au plus simple et avec de la logique. explode

<?php

$tonArray = array(); //initialise ton array

if(!empty($_POST)) {
$tonArray = $_POST['tesvaleurssousformdunarray']; //tu recupere tes donnees sous forme de tableau (un select multiple, des checkbox etc.

Edit de @Nyark_Nyark qui m'a refais penser à implode *facepalm*

$tonvarchar = implode (", ",  $tonArray);
$tonvarchar = trim($tonvarchar, ", "); // t'enleve le dernier ", ", au cas ou

$sql = "INSERT INTO `tabase` (tonchamp) VALUES ( '$tonvarchar')"; //t'enregistre dans ta base

}

//tu recupere ton champ dans ta base puis tu split ta chaine en array

$tonArray = explode(', ', $tonchamp);
print_f($tonArray);
?>


Donc en fonction de tes besoins, tu peux split via n'importe quelle chaine de caractère. j'ai choisi ", " mais ca peut etre "|" ou encore "toutetnimportequoi". Tu peux aussi serialize() tes données, mais si tu poses la question de comment faire, autant passer par un petit explode tout con. Tu as ta logique et cette fonction est le plus simple pour ce que tu demandes.

Voila, ça fera un cookie.

Contribution le : 16/03/2016 13:07
Signaler

Arsenick
 0  #6
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
Citation :

@Wiliwilliam_ a écrit:
@Arsenick je vais peut être t'en demander beaucoup, mais tu pourrais pas me faire un exemple d'aller/retour php->sql sql->php avec un array("1"=>0,"2"=>1) ?


serialize() et unserialize()

Tu as des exemples clair dans la section exemple (oui je suis une feignasse :D), normalement ça devrait aller 🙂




Citation :

@Wiliwilliam_ a écrit:
je suis pas sur d'avoir bien compris le __sleep et __wakeup et surtout à quel moment ils interviennent.


En fait au moment où tu fait serialize(), php va comme un grand regarder si l'objet à une fonction __sleep(), si c'est le cas, il l'exécute avant et pareille pour __awake() qui est exécuter juste après unserialize().
Mais c'est utiliser sur les objets maison ou sur un héritage d'un objet php.

Citation :

@Wiliwilliam_ a écrit:
(pour le CSV j'avais regardé et je trouvais que ça nécessitait trop de ressources de transformer un array en CSV)


Logique, un fonction custom prend toujours plus de ressource que la même fonction intégrée au langage/framework


@Fichtre Tiens je connaissais pas explode(), j'irai me coucher moins con 🙂.
Par contre la base de php faut quand même se méfier, il traîne de fameuse casserole et le typage faible est loin d'être une sinécure :lol:

Contribution le : 16/03/2016 13:13
Signaler

Fichtre
 0  #7
Je m'installe
Inscrit: 20/11/2014 19:41
Post(s): 144
Citation :
@Fichtre Tiens je connaissais pas explode(), j'irai me coucher moins con 🙂.


Le soucis de beaucoup de programmeur ! La simplicité est souvent omise pour paraître plus "pro".

Perso je dev des plugins jquery et boss en dev freelance également. Quand je vois le boulot de certain qu'on me fait reprendre, je me dis que dans leur tete, c'est compliqué XD

Contribution le : 16/03/2016 13:27
Signaler

Arsenick
 1  #8
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
@Fichtre Pour ma part c'est surtout une méconnaissance de la base (je suis dev .Net à l'origine puis j'ai fait du VB6, du C, du COBOL, du Java, du Javascript et du PHP) et parfois certaine fonction peu utilisée passe à la trappe, problème de généraliste 😉.

Sinon question simplicité, pour ma part je très KISS(enfin j’essaye 🙂 ).


et parce que je ne pouvais décemment pas ne pas faire la blague à 2€:

Contribution le : 16/03/2016 13:30
Signaler

Invité
 0  #9
FantômeInvité
@Arsenick Je connaissais pas ce "KISS" (juste "KIS" :p)... J'suis plutôt favorable à l'extrême inverse : une complexification telle que tout paraît simple à la fin (conception et réalisation), mais j'embrasse le principe d'écarter la complexité lorsqu'elle est inutile.

Contribution le : 16/03/2016 13:46
Signaler

Nyark_Nyark
 0  #10
Je masterise !
Inscrit: 29/01/2015 14:41
Post(s): 2891
Karma: 1823
@Fichtre
Vu que tu utilises "explode" pour refaire ton array, pourquoi tu n'utilises pas "implode" pour le passer en string (au début) au lieu de ta boucle foreach ?

Sinon, par rapport à la question de départ, vu que les clés ont l'air d'avoir leur importance (on commence à 1 et pas à 0) il me semble que le plus simple et le plus approprié est en effet "serialize" / "unserialize".

Contribution le : 16/03/2016 13:48
Signaler

Arsenick
 0  #11
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
@Kevsler heuuu comment tu peux complexifier les choses au point de les rendre simple? Oo

Tu serais pas ingénieur toi? "Si une chose est simple c'est qu'elle n'a pas encore assez de fonctionnalité!" :lol:

Contribution le : 16/03/2016 13:48
Signaler

Fichtre
 0  #12
Je m'installe
Inscrit: 20/11/2014 19:41
Post(s): 144
@Nyark_Nyark Bah voila, prit a mon propre jeu

@Arsenick Mais tellement pour le KISS ! Et j'approuve la blague, t'inquiete:p #humourdemerde

Contribution le : 16/03/2016 13:51
Signaler

Invité
 0  #13
FantômeInvité
@Arsenick Je privilégie le TDD pour l'évolutif de mon code. Ça m'donne souvent des usines à gaz mais... mais j'en retire une bonne robustesse (j'ai pas encore le niveau pour faire du robuste absolu en TDD) et une sorte de grande lucidité vis-à-vis de mon produit et d'mon code. Ça c'est pour la conception, quand j'en viens à coder dans les couches basses de mon architecture j'essaye de faire le plus simple possible, sans inventer la poudre, comme t'as dis.

Un collègue m'avait filé ça (Object on Rails) et ça a quelque peu changé ma façon de coder.

Bon, après... j'bosse en Ruby... on se demande rarement comment on fait quelque chose, en Ruby, il y a toujours une méthode ou un crypto-opérateur chelou pour faire les choses très simplement:p

EDIT : En gros, ouais, j'essaye de me faire passer pour un ingénieur xD

Contribution le : 16/03/2016 14:03
Signaler

Wiliwilliam
 0  #14
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 37191
Karma: 17455
j'ai jamais parlé de foreach et d'explode, je veux justement ne pas avoir à faire ça.

Contribution le : 16/03/2016 14:04
_________________
Signaler

Arsenick
 0  #15
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
Citation :

@Kevsler a écrit:
@Arsenick Je privilégie le TDD pour l'évolutif de mon code. Ça m'donne souvent des usines à gaz...


Heuu normalement le TDD est prévu pour éviter les usines à gaz :gratte: mais j'avoue n'avoir jamais toucher au Ruby enfin je prévois de me mettre au RoR bientôt ^^.

@Wiliwilliam_ Au risque de paraître désagréable, c'est pas possible: soit tu utilises serialize()/unserialize() soit implode()/explode() soit tu changes de méthode.
Perso je te conseil de changer de méthode et de ne stocker que les valeurs en DB et de construire ton Array sur base d'une requête DB.

Contribution le : 16/03/2016 14:15
Signaler

Invité
 0  #16
FantômeInvité
@Arsenick Quand j'dis usine à gaz, c'est un juste gros gros gros paquet de code.

Et pour RoR : tu fais bien, c'est l'avenir:p Le framework et le langage sont tellement jouissifs ! Tu vas t'éclater ^^

Contribution le : 16/03/2016 14:18
Signaler

Arsenick
 0  #17
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
Citation :

@Kevsler a écrit:
@Arsenick Quand j'dis usine à gaz, c'est un juste gros gros gros paquet de code.


Ha oui dans ce sens la Ok ^^.

Citation :

@Kevsler a écrit:
Et pour RoR : tu fais bien, c'est l'avenir:p Le framework et le langage sont tellement jouissifs ! Tu vas t'éclater ^^


Ho mais tu sais je suis un grand malade, la je suis en train de dev un site PHP en MVC sans aucun framework (que ce soit php ou html) ^^.
parce que comme ça je sais exactement ce qu'il faut faire et le jour où je mets un framework par dessus je maîtriserai mieux le langage de base 🙂

Contribution le : 16/03/2016 14:21
Signaler

Invité
 0  #18
FantômeInvité
@Arsenick En effet... Moi je fuis, dans ces cas-là x)


Contribution le : 16/03/2016 14:22
Signaler

Arsenick
 0  #19
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6445
Karma: 1023
L'apprentissage dans la douleur...ho oui plante encore! 😃

Contribution le : 16/03/2016 14:26
Signaler

Fichtre
 0  #20
Je m'installe
Inscrit: 20/11/2014 19:41
Post(s): 144
Citation :

@Wiliwilliam_ a écrit:
j'ai jamais parlé de foreach et d'explode, je veux justement ne pas avoir à faire ça.


... Pourquoi ? Non sérieusement, le problème de TOUS les gars qui demandent de l'aide. Manque d'infos, de conditions, de contenue, place des extraits de code, je sais pas moi. Mais t'as jamais parlé de foreach et d'explode: J'ai envie de dire, normal? Vu que tu demande de l'aide.
La clairement on capte pas ou est ton soucis du coup. Puis des clés ça se change hein.
Si tu veux faire ça en php (vu que c'est dans le titre) je vois pas ou est le soucis de pas utiliser des fonctions toute faite pour faire exactement ce que tu veux.

Si ta question avait été posé sur stack, t'aurai direct été downvote et ignoré XD


Les framework c'est le mal !

Contribution le : 16/03/2016 15:09
Signaler


 Haut   Précédent   Suivant
(1) 2 3 »






Si vous êtes l'auteur d'un élément de ce site, vous pouvez si vous le souhaitez, le modifier ou le supprimer
Merci de me contacter par mail. Déclaré à la CNIL N°1031721.