PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-01-2013 08:09:56

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Problème pour afficher les valeurs sérialisées

Bien le bonjour à tout le monde, voilà je suis assez débutant en php, sql mais j'essaies de progresser........

voilà mon problème, si quelqu'un pouvait m'aider, je stocke en bdd le contenu d'un tableau, en l'occurence le retour de confirmation de payapl avec toutes les infos de la commande donc, et je serialise tout ça en bdd.
après j'utilise html2pdf pour fabriquer ma facture en pdf, jusque là tout va bien, sauf que quand je veux afficher mes données désérializeés, je ne sais pas si la commande contient plusieurs "produits", je connais le nom de la variable des produits fournie par paypal, [item_name1], [item_name2], etc, masi quand moi je veux afficher, j'affiche au moins [item_name1], et la qte, le prix correspondants.
Donc ma question oui j'y arrive, y a t-il un espèce de "joker" comme le % de sql opur pouvoir afficher un nom de variable sans connaitre exactement son nom entier, par exemple <?php echo $final['quantity%']; ?>.

Voilà, j'ai fini ma question, j'espère que j'ai été assez clair, et merci d'avance de votre aide.
@ bientôt.

Hors ligne

#2 20-01-2013 11:32:35

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

Saluton,
Je n'ai pas tout compris, mais je crois que la structure itérative foreach($tableau as $cle=>$valeur) devrait te permettre de parcourir ton tableau désérialisé, non ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 20-01-2013 12:38:06

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

bien le bonjour et merci de m'avoir répondu.
Donc effectivement mon soucis n'est pas d'afficher mes données serializées, j'y arrive bien.
Je vais essayer de re expliquer:
dans ma base j'ai par exemple dans mon champs datas, mes données sérializées, je fais une boucle pour afficher mes données en les désérializant au passage, mais je ne voudrais pas tout afficher, donc je selectionne mes données de variables, par exemple ['nom'], ['prenom'], ['produit']......mais ça c'est quand je connais le nom exemple de la variable, comment faire pour afficher par exemple toutes les données de variables qui commencent par exemple par prodtuit, pour pouvoir afficher ['produit1'], ['produit2'], ['produit3']......

car dans certains variables sérialisée, elle peut contenir une variable ['produit'], soit plusieurs et ça je n'en sais rien à l'avance, car ces données dépendent de chaque commande, si l'acheteur a acheté un seul produit, ou plusieurs.

J'espère avoir été un peu plus clair, et merci encore.

Hors ligne

#4 20-01-2013 12:52:19

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

Si je comprends bien, c'est la sérialisation qui n'est pas au point.
Le tableau Paypal initial n'est pas en formes normales (données itératives), après, pas étonnant que tu te retrouves, en aval, confronté à ce type de problème.
Mon diagnostic, défaut d'analyse=> défaut de conception => problème d'exploitation.
Ce que je préconise : refaire la démarche d'analyse et de conception.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 20-01-2013 13:37:33

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

je comprends bien ta réponse.
mais je prends ce que me retourne paypal, car je veux stocker en bdd la commande après être sur d'avoir été payé.
je prends la chose différement, on oublie paypal, je suis un client lambda, j'achète 1 produit sur le site, je stocke donc cette commande en bdd, je refais une commande avec 2 produits, je stocke donc une donnée supplémentaire, quand je veux afficher le contenu de mes 2 commandes, comment faire pour afficher, dans la 1ere un seul article avec son prix quantité, et dans ma seconde commande afficher les 2 produits avec leur prix et quantités? sans parler de paypal et sérialisation?

Hors ligne

#6 20-01-2013 14:00:31

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

Tu confonds deux niveaux d'entités, le niveau commande avec le niveau ligne de commande. Deux entités => deux tables.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 20-01-2013 15:41:13

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

re
je mets un exemple de ce que j'enregistre en bdd:
une première commande avec l'achat d'un produit
Array
(

    [address_street] => Av. de la Pelouse, 87648672 Mayet
    [payment_date] => 12:02:03 Dec 15, 2012 PST
    [payment_status] => Completed
    [address_zip] => 75002
    [first_name] => sibuno
    [address_country] => France
    [num_cart_items] => 1
    [item_name1] => telephone
    [item_number1] => 45
   
)
une deuxieme commande avec l'achat de 2 produits:
Array
(

    [address_street] => Av. de la Pelouse, 87648672 Mayet
    [payment_date] => 12:02:03 Dec 15, 2012 PST
    [payment_status] => Completed
    [address_zip] => 75002
    [first_name] => sibuno
    [address_country] => France
    [num_cart_items] => 1
    [item_name1] => telephone
    [item_number1] => 45
    [item_name2] => telephone
    [item_number2] => 45
)

voilà, sachant que je ne veux pas faire une simple boucle et afficher tout car il y a des infos qui ne sont pas utililes.

Hors ligne

#8 20-01-2013 16:59:30

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

Ton exemple ne fait que confirmer ce que je t'ai dit, la partie [item_nameX][item_numberX] qui peut être présente à plusieurs reprises représente les entités lignes de commandes de la commande.
Elle devrait être dans des sous-tableaux :

Array
(

    [address_street] => Av. de la Pelouse, 87648672 Mayet
    [payment_date] => 12:02:03 Dec 15, 2012 PST
    [payment_status] => Completed
    [address_zip] => 75002
    [first_name] => sibuno
    [address_country] => France
    [num_cart_items] => 1
    [item_name][1] => telephone
    [item_number][1] => 45
)
   
Array
(

    [address_street] => Av. de la Pelouse, 87648672 Mayet
    [payment_date] => 12:02:03 Dec 15, 2012 PST
    [payment_status] => Completed
    [address_zip] => 75002
    [first_name] => sibuno
    [address_country] => France
    [num_cart_items] => 1
    [item_name][1] => telephone
    [item_number][1] => 45
    [item_name][2] => telephone
    [item_number][2] => 45
)


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 20-01-2013 17:14:05

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

merci pour ta patience et ta réponse, je n'ai pas en fait compris ce que tu veux dire.

Hors ligne

#10 20-01-2013 18:12:35

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

C'est parce que je suis allé un peu vite en besogne.
En fait voilà ce que je voulais écrire

Array
(
    [address_street] => Av. de la Pelouse, 87648672 Mayet
    [payment_date] => 12:02:03 Dec 15, 2012 PST
    [payment_status] => Completed
    [address_zip] => 75002
    [first_name] => sibuno
    [address_country] => France
    [num_cart_items] => 1
    [items] => Array
        (
            [0] => Array
                (
                    [name] => telephone
                    [number] => 45
                )

            [1] => Array
                (
                    [name] => telephone
                    [number] => 45
                )

        )

que j'ai construit avec ce petit bout de code :

<?php
$Paypal=array('address_street' => 'Av. de la Pelouse, 87648672 Mayet',
              'payment_date' => '12:02:03 Dec 15, 2012 PST',
              'payment_status' => 'Completed',
              'address_zip' => '75002',
              'first_name' => 'sibuno',
              'address_country' => 'France',
              'num_cart_items' => 1,
              'items'=>array(array('name' => 'telephone',
                                   'number' => 45),
                             array('name' => 'telephone',
                                   'number'=> 45)
                             )
               );
?>
<pre>
<?php
print_r($Paypal);
?>
</pre>

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#11 20-01-2013 18:43:14

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

merci beaucoup pour ton script.
si j'ai bien tout compris, tu parles de mettre en base sous cette forme pour pouvoir par la suite extraire ce que je veux?
le hic là c'est que ce tableau je le récupère tel quel de paypal, donc ta solution serait plutôt que je rentre moi ces informations à partir de mon site et non à partir de la réponse de paypal?

merci encore, c'est super sympa de m'aider.

Hors ligne

#12 20-01-2013 19:01:07

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

La structure choisie par Paypal n'est pas très élaborée, c'est donc à toi de l'améliorer.
Tu peux conserver l'idée de stocker le tableau sérialisé, mais en le modifiant au préalable pour lui conférer une structure proche de celle que je t'ai indiquée.
Toutefois, puisque tu mets cela dans une BDD, autant créer deux tables et mettre les choses directement en relationnel.
Par la suite, une requête SQL en jointure sur les deux tables et tu récupèreras l'information correctement structurée.
Tu as juste à gérer les identifiants, celui de la table commandes migrera, en tant que clé étrangère, dans la table lignes_de_commande ou le numéro de la ligne, en association avec celui de la commande constituera l'identifiant.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#13 20-01-2013 19:14:15

sibuno
Membre
Inscription : 20-01-2013
Messages : 7

Re : Problème pour afficher les valeurs sérialisées

oui pas de problème, en fait je voulais juste utiliser ce que paypal me renvoie, masi j'ai bien compris grâce à toi qu'il faut que je le fasse moi, donc je pense avoir tout compris, un grand merci à toi de ton aide, c'est super gentil.

Hors ligne

#14 21-01-2013 08:03:42

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Problème pour afficher les valeurs sérialisées

Nedankinde,
Et surtout, bon courage.
N'hésite pas à revenir si tu as besoin de précisions complémentaires.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#15 21-01-2013 14:55:23

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Problème pour afficher les valeurs sérialisées

Bonjour,

Je vais reprendre les propos de MK quand il parle de problème de conception, car c'est en effet le cœur du problème.
Le plus gros du travail consiste en effet à enregistrer le retour de confirmation de paypal dans un schéma de base de données normalisé et par conséquent de ne pas utiliser ici la base de données comme un simple lieu de stockage de la persistance (pas de stockage de données sérialisées). Ainsi tout besoin d'information s'obtiendra par la suite à travers une simple requête ou vue SQL.

Ensuite, vu que paypal n'envoie pas indéfiniment des retours de confirmation de paiement, si vous avez stocké des données sérialisées dans le but de les loguer pour ne pas perdre l'information, sachez qu'une table de log n'est pas non plus synonyme de table dénormalisée, bien au contraire.

Pour finir, comme l'a justement dit MK, n'hésite pas à revenir si tu as besoin d'info complémentaires.

Dernière modification par Jc (21-01-2013 14:55:58)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

Pied de page des forums