Referencer un objet dans un GET

Petit nouveau ! | 3 Messages

27 août 2010, 16:15

Bonjour à tous,

Sous php 5 j'ai fais une classe pour afficher des tableaux en HTML venant de requêtes SQL.
Ces requêtes sont triées grâce à la directive ...ORDER BY champ DESC/ASC.
Jusque là ....ça baigne !
Je veux pouvoir changer l'ordre de tri de mes tableaux en cliquant sur le titre de la col à trier.
j'ai donc mis un lien sur les titres de col qui renvoi la page en passant en GET le nom de cette col.
...myself.php?tri=champ1&table=1
La où je bloque c'est que quand je récupère les données du GET je ne sais pas retrouver
à quel objet il appartient (Quand il y a plusieurs tableaux d'affichés).
$_GET['tri']       <-- je recupere le champ a trier
$_GET['table']   <-- je recupere la table sur laquelle trier

a$=new HTMLTable() <-- Je dois faire mon tri ici
b$=new HTMLTable() <-- ou ici ???
Google ne fut point mon ami pour trouver solution à ce problème que j'ai déjà bien du mal à exprimer !
J'ai bien regardé du coté de serialize mais je ne crois pas que ce soit la solution.

Merci pour toute piste ou +

CedSha

Eléphant du PHP | 86 Messages

27 août 2010, 16:27

Salut,

Pas terrible d'afficher le nom de ta table dans l'url...
Tu te prends la tête sur un problème simple : tes liens doivent simplement servir à modifier la requête sql à l'origine du tableau.
Il te suffit de passer un argument supplémentaire pour savoir dans quel ordre trier si tu souhaites conserver cette logique.
Cependant, ce genre de tri se fait plus habituellement en Javascript (moins contraignant pour le serveur et plus rapide pour le client).

Petit nouveau ! | 3 Messages

27 août 2010, 17:01

Merci pour la réponse Skikit !
Pas terrible d'afficher le nom de ta table dans l'url...
Non non, regarde bien c'est un numéro associé à la table que je passe (table=1) pas le nom :D !!!
Tu te prends la tête sur un problème simple : tes liens doivent simplement servir à modifier la requête sql à l'origine du tableau.
Il te suffit de passer un argument supplémentaire pour savoir dans quel ordre trier si tu souhaites conserver cette logique.
:evil: justement ca ne fonctionne que si tu as une seule table. Dés que tu en as plusieurs (issus d'objets, évidemment) il faut savoir de quel objet elle sont originaire pour router l'argument de tri vers le bon objet. C'etait la tout l'objet du post.
Cependant, ce genre de tri se fait plus habituellement en Javascript (moins contraignant pour le serveur et plus rapide pour le client).
Oui :D ça c'est LA solution sur laquelle je vais devoir me rabattre, mais j'ai encore quelques poste client qui n'ont pas le javascript activé.

J'aurais quand même bien aimé savoir si quelqu'un avait une soluce en php
car ce type de problème doit forcement bien arriver de temps à autre.

Plus généralement il s'agit d'avoir une référence dans une chaîne de caractère à l'un des objets d'une classe.
Dans mon cas c'est sur l'URL j 'imagine que ça aurait pu être dans un COOKIE ou autre....

CedSha

Petit nouveau ! | 3 Messages

28 août 2010, 09:08

Voila la solution est trouvée...pour ceux que ça intéresse...

Il m'a 'suffit' de créer une numérotation des objets de ma classe.
Donc dans le constructeur j'ai ajouté :
public function __construct()
{
    global $tableref;
    (isset($tableref)) ? $tableref+=1 : $tableref=0;
    $this->myref=$tableref;
}
j'ai donc $this->myref qui est le numéro d'ordre de création de mes objets.
$a= new HTMLTable
$b = new HTMLTable
$a->myref  >> =0 premier objet créé
$b->myref  >> =1 second objet créé
Ensuite quand je construit mon URL j'y indique ce numéro
...myself.php?srt[0]=champ1&srt[1]=champ2
(notez au passage la notation srt[], que je viens de découvrir..! et qui permet de créer un tableau dans la variable GET retournée)
Enfin quand je récupère la variable GET au renvoi de la page je renvoi le tableau srt (dans l'exemple $getarr) retourné
dans une fonction de la classe qui vérifie simplement la correspondance des numéros
    public function setsort($getarr)

 {

    if (isset($getarr[$this->myref]))

        { --> ici il y a bien un tri à faire sur le tableau de cet objet
J'ai donc bien réalisé une relation logique entre un objet n issu d'une classe et une chaine
de caractère anonyme.
Cela ne fonctionne bien sur que si l'ordre de construction des objets de la page initiale est
le même que celui de la page renvoyé par le lien de tri.

Merci à tous ceux qui se sont donnée la peine de lire et/ou répondre à mon post
Bon Week-End à tout les codeurs 8-)
CedSha