Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2975 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/Mysql] enregistrer tableau dans bdd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/Mysql] enregistrer tableau dans bdd

n°601765
BaDaBoOm
Posté le 04-01-2004 à 01:49:33  profilanswer
 

bonjour je souhaiterais enregistrer le contenu d'un tableau à 4 dimensions dans une case d'une base de données comme si l'on enregistrait une variable quelconque en fait.
 
merci d'avance


Message édité par BaDaBoOm le 04-01-2004 à 01:49:51
mood
Publicité
Posté le 04-01-2004 à 01:49:33  profilanswer
 

n°601766
naceroth
Posté le 04-01-2004 à 01:59:28  profilanswer
 

serializer le tableau puis l'insérer dans la bd suffit pas ?

n°601767
BaDaBoOm
Posté le 04-01-2004 à 02:07:07  profilanswer
 

g fait un print_r($tab,true); mais ya pas plus propre ?
 
et comment je le récupère ?

n°601768
naceroth
Posté le 04-01-2004 à 02:13:02  profilanswer
 

Non, je pensais plutôt à un
 

Code :
  1. $sqlTab = serialize($tab);


 
C'est d'ailleurs la méthode donnée en exemple dans la doc :)
 
//edit :
 
et ça se récupère avec unserialize :)


Message édité par naceroth le 04-01-2004 à 02:13:34
n°601875
BaDaBoOm
Posté le 04-01-2004 à 13:47:51  profilanswer
 

ok merci je vais faire comme ca

n°607333
BaDaBoOm
Posté le 10-01-2004 à 19:43:28  profilanswer
 

bon en fait ca marche pas il me répond :  
Notice: unserialize(): Argument is not an string in c:\compta\data_devis.inc.php on line 24
 
 
 
 

n°607395
naceroth
Posté le 10-01-2004 à 20:34:22  profilanswer
 

BaDaBoOm a écrit :

bon en fait ca marche pas il me répond :  
Notice: unserialize(): Argument is not an string in c:\compta\data_devis.inc.php on line 24


 
Vu le message d'erreur, j'ai la très nette impression que lire la doc de l'instruction unserialize n'a pas été la première chose que tu as fait avant le "bon, en fait ça marche pas", je me trompe ? :D
 
Serialize s'utilise pour linéariser ton tableau en une chaine de caractères que tu pourras insérer dans la db.
Unserialize c'est l'inverse, c'est la chaine insérée dans la db que tu vas reconvertir en tableau

n°607600
BaDaBoOm
Posté le 11-01-2004 à 01:12:11  profilanswer
 

j'ai bien compris mais en fait je serialize mon tableau multidimensionnelle et en suite je l'insère dans la bdd.
 
pour le sortir je reprend mon tableau et je unserialize
 
par ex : $tab=unserialize($da['tab']);
 
ensuite j'ai ce message d'erreur

n°607603
BaDaBoOm
Posté le 11-01-2004 à 01:18:08  profilanswer
 

a mon avis serialize doit pas etre la bonne commande puisqu'il me met dans ma bdd : a:1:{i:1;a:1:{i:10;a:1:{s:0:"";s:0:"";}}}
 
alors qu'avec mon 1er bidouillage :

Code :
  1. print_r($tab,true);

il me met bien ce que je veux c'est à dire un truc du style :

Code :
  1. Array
  2. (
  3.     [2] => Array
  4.         (
  5.             [10] => Array
  6.                 (
  7.                     [] =>
  8.                 )
  9.         )
  10. )


Message édité par BaDaBoOm le 11-01-2004 à 01:19:33
n°607624
naceroth
Posté le 11-01-2004 à 02:35:17  profilanswer
 

BaDaBoOm a écrit :

a mon avis serialize doit pas etre la bonne commande puisqu'il me met dans ma bdd : a:1:{i:1;a:1:{i:10;a:1:{s:0:"";s:0:"";}}}


 
c'est ce qu'on appelle linéariser :D
 
indice : le a est l'abréviation de array, le s de string, le i de integer, les chiffres indiquant soit la longueur soit la valeur.
 
Bref, comme je sent que tu es un grand septique, qu'il ne sert à rien que je te dise que tout le monde s'en sert depuis longtemps sans problème, je t'ai même pondu un code pour te le prouver :

Code :
  1. $data = array(2 => array(10 => array()));
  2. //Insertion dans la db
  3. mysql_connect('localhost','...','...');
  4. mysql_select_db('...');
  5. mysql_query("insert into ... values('".serialize($data)."')" );
  6. //Destruction de la variable $data
  7. unset($data);
  8. //Lecture du contenu de la db
  9. $res = mysql_query('select serial from ...');
  10. $element = mysql_fetch_array($res);
  11. $data = unserialize($element['serial']);
  12. //Affichage du résultat
  13. print_r($data);


 
comme tu le vois, je crée une variable telle que celle que tu me donnes, je l'insère dans une db, je détruis la variable (on est jamais assez sûr :D), je la récupère et l'affiche. Je te laisse vérifier que le contenu de $data à la fin est bien le même qu'au début.
 
Une petite remarque quand même, on sait jamais : la fonction serialize renvoit une chaine de caractère, donc pense à la protéger avant de l'envoyer dans un mysql_query si elle comprend des caractères à risque

mood
Publicité
Posté le 11-01-2004 à 02:35:17  profilanswer
 

n°607951
BaDaBoOm
Posté le 11-01-2004 à 12:32:51  profilanswer
 

lol désolé pour le dérangement en fait ca marche parfaitement, c'est juste qu'il ne regardait pas a la bonne case du tableau.
 
Il me reste donc tjrs un prob :  
pour avoir la dernière valeur autoincrement du tableau je faisais ca :
 
$iddevis=mysql_insert_id()
 
il me renvoi tjrs 0
 
le dernier enregistrement est effectué sur la page precedente


Message édité par BaDaBoOm le 11-01-2004 à 12:33:58
n°607956
BaDaBoOm
Posté le 11-01-2004 à 12:43:24  profilanswer
 

voici le code ke j'utilise :

Code :
  1. include("connect.inc.php" );
  2. $iddevis=mysql_insert_id();
  3. mysql_close();

n°608098
Mara's dad
Yes I can !
Posté le 11-01-2004 à 16:20:51  profilanswer
 

Citation :

mysql_insert_id() retourne le dernier identifiant généré par un champ de type AUTO_INCREMENT, sur la connexion MySQL courante, ou bien sûr la connexion spécifiée par link_identifier. Si link_identifier est omis, la dernière connexion ouverte est utilisée.


 
! ! ! Il faut utiliser la même connexion que celle utilisée pour l'insert ! ! !


Message édité par Mara's dad le 11-01-2004 à 16:21:50

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°608115
Evolvox
Toujours y croire, toujours...
Posté le 11-01-2004 à 17:00:11  profilanswer
 

Dire que je me suis fais ch... à construire à la main une fonction équivalente à serialize, car je ne savais pas qu'elle existait... Elle est mal foutue la doc aussi  :o , j'ai cherché du côté des fonctions traitant des tableaux, et aucun lien pointant vers serialize.


Message édité par Evolvox le 11-01-2004 à 17:00:32

---------------
gaymer's est la personne la plus formidable jamais rencontrée dans toute ma vie, je lui achèterais un makato et au moins les 4 news pourries quotidiennes qui vont avec
n°611390
Mara's dad
Yes I can !
Posté le 14-01-2004 à 09:50:57  profilanswer
 

Evolvox a écrit :

Dire que je me suis fais ch... à construire à la main une fonction équivalente à serialize, car je ne savais pas qu'elle existait... Elle est mal foutue la doc aussi  :o , j'ai cherché du côté des fonctions traitant des tableaux, et aucun lien pointant vers serialize.


1- Y fait quoi içi ton post ? Heu, j'ai rien dit :whistle:  
2- Serialize n'est pas limité aux tableaux. Ca marche aussi avec les dates, les instances d'objets, bref tout :D


Message édité par Mara's dad le 14-01-2004 à 09:51:26

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°614388
BaDaBoOm
Posté le 17-01-2004 à 15:52:54  profilanswer
 

ok je savais pas qu'il fallait utiliser la même connection, ya t'il une autre méthode(ou fonction) pour récupérer le dernier increment d'une table sans utiliser forcement la meme connection ?

n°614394
Mara's dad
Yes I can !
Posté le 17-01-2004 à 16:01:23  profilanswer
 

select max(id) from...
 
Mais tu ne pouras jamais être certain que c'est bien TON enreg et pas celui d'un autre arrivé juste arpès le tiens.
 
Ce qu'il faut faire, c'est récupérer l'ID juste après l'insertion et le transmettre à ce qui en a besoin.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°614395
BaDaBoOm
Posté le 17-01-2004 à 16:04:03  profilanswer
 

ok merci pour le truc, tu as raison je vais plutot le stocker dans une $var de session, qui, si elle existe sera alors utilisée.
 
encore merci pour ton aide rapide  
a+

n°614443
naceroth
Posté le 17-01-2004 à 16:51:03  profilanswer
 

mara's dad a écrit :

select max(id) from...


 
Jamais cette solution là, elle ne fonctionne que parce que mysql incrémente bien les id, mais quid du jour où il les gèrera n'importe comment (à la manière d'access par exemple :D).
 
Il y a une solution plus simple :
 
La fonction propre à php : mysql_insert_id qui te retourne l'auto incrément du dernier insert effectué par la connexion courante
Elle se sert de la fonction propre à mysql (oui ça existe aussi :)) last_insert_id() et est propre à chaque connexion (pas modifiable par un autre client donc)

n°614465
Mara's dad
Yes I can !
Posté le 17-01-2004 à 18:26:13  profilanswer
 

naceroth : Déjà dit tout çà...
Mais last_insert_id() ne fonctionne pas dans son cas :D


Message édité par Mara's dad le 17-01-2004 à 18:26:56

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°614476
naceroth
Posté le 17-01-2004 à 18:55:18  profilanswer
 

La tienne non plus hein, tu expliques même pourquoi :D

n°614628
Mara's dad
Yes I can !
Posté le 18-01-2004 à 01:36:22  profilanswer
 

naceroth a écrit :

La tienne non plus hein, tu expliques même pourquoi :D


Hein ?
C'est quoi çà :

Citation :

Mais tu ne pouras jamais être certain que c'est bien TON enreg et pas celui d'un autre arrivé juste après le tiens.


 
Et cette solution fonctionne. C'est même quasiement la seule utilisable dans par une suite de traitements Batch à condition d'être certain d'être le seul utilisateur. Ce qui est le cas en général quand on lance des batchs.
 
Rmp : AUTO_INCREMENT, çà veux dire quoi à ton avis ?
Tu pense vraiement qu'un jour un fou va décider que çà veux dire aléatoire !
Y'a que chez Kro$oft qu'on voit des trucs pareil :lol:
 
Bon, de toute façon, BaDaBoOm à trouvé la solution.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°614653
naceroth
Posté le 18-01-2004 à 02:46:29  profilanswer
 

Ca me scie ça, tu dis toi même qu'il ne peut être certain que ce soit bien son enregistrement, et tu vois toujours pas pourquoi le max() est pas sûr ?
 
remarque à ta remarque : imaginons un sgbd plus poussé que mysql qui se dit un beau matin qu'il pourrait être intelligent de ne pas avoir un passage d'un id de 1 à 3 parce qu'on a supprimé le 2...Donc, j'ajoute un enregistrement, et hop id=2 pour combler le trou. Utopique, folie ou krosofterie ? Oui peut être mais par définition toute probabilité non nulle arrivera un jour :)
 
//j'édite juste pour signaler que certains sgbd n'ont pas d'auto incrément, le système est un peu caduque :D (voir interbase et oracle si ma mémoire est bonne)


Message édité par naceroth le 18-01-2004 à 02:48:20
n°654398
jaimetonso​urire
Posté le 25-02-2004 à 11:52:01  profilanswer
 

Bonjour,
Je n'arrive pas a faire marcher AUTO_INCREMENT sur interbase et je crois avoir la bonne syntaxe, quelqu'un pourrait m'éclairer sur ce point svp?

n°655045
naceroth
Posté le 25-02-2004 à 19:27:13  profilanswer
 

Y a pas d'auto incrément sous interbase pour autant (au temps|OTAN) que je m'en souvienne :)

n°656973
naceroth
Posté le 26-02-2004 à 22:38:41  profilanswer
 

Oui, donc, après vérif (à moins que sur les nouvelles versions, mais j'y crois pas), il n'y a pas de type autoincrément, identifiant automatique ou autre pour interbase.
 
Il faut passer par des generator et les triggers :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP/Mysql] enregistrer tableau dans bdd

 

Sujets relatifs
[PHP] multipages pour les résulats d'une reqûete sql[PHP] Verification de n° de carte de credit
[PHP/Mysql] Lier deux formulaires ...help tableau en html
[PHP] Variable 'fixe' sous php ...Problème de tableau
[PHP] Pourquoi ca marche pas ? [résolu](en effet c'était tout bete)[PHP] un petit compteur de visites ?
Selection dans un tableau... 
Plus de sujets relatifs à : [PHP/Mysql] enregistrer tableau dans bdd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR