Μεταφορά αντικειμένου με post

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Μεταφορά αντικειμένου με post

Δημοσίευση από nikirtsi » 04 Σεπ 2007 14:09

Υπάρχει κάποιος τρόπος να μπορέσω να γράψω κάτι τέτοιο

Κώδικας: Επιλογή όλων

class cClass 
&#123;var a; function alert&#40;&#41; &#123;echo "a = ".$this->a."<br/>";&#125;&#125;

$Obj = new cClass;
$Obj->a = "kalimera";

echo "<form action='second.php' method='post'>";
echo "<input type='hidden' name='pObj' value='$Obj' />
echo "<input type='submit'/>";

echo "</form>";

και στήν Second.php

Κώδικας: Επιλογή όλων

echo $_POST&#91;"pObj"&#93;->alert&#40;&#41;;

Ίσως να μήν γίνετε για τόν λόγο ότι τό Αντικείμενο pObj κατά τήν μεταφορά τού
σέ *pObj χάνει την αναφορικότητα του μιάς και πού καί τό αντικείμνο pObj αλλά καί
η κλάση τού αντικειμένου pObj καταστρέφονται.

π.χ μπορώ να γράψω $_POST["obj"] = new cClass ,αλλά δέν εννοώ αυτό
εννοώ μήπως υπάρχει κάποιος τρόπος να γίνει τό assosiations του $_POST["obj"]
με τό αντικείμενο $_POST["pobj"] όταν τό πρώτο έχει καταστραφεί.

Γιά όσους δέν κατάλαβαναν... πώς θα μπορούσα να μετέφερα όχι μιά τιμή, αλλά ένα αντικείμενο μέ τήν μέθοδο post;

Π.χ. Στήν c μπορείς να δηλώσης έναν πίνακα όπου αντί για δεδομένα , μέσα τού
να έχει κλήσεις συναρτήσεων καί νά μπορείς να τής εκτελείς μέσω τού πίνακος...
Κάτι τέτοιο υποψιάζομαι πώς δέν μπορεί να γίνει στήν PHP κυρίως λόγο τής φύσεως του web programming.

Ξέρεις κανείς μήπως κάποιον τρόπο για νά γίνετε κάτι τέτοιο?
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
dik_
Δημοσιεύσεις: 476
Εγγραφή: 07 Ιουν 2007 11:28

Μεταφορά αντικειμένου με post

Δημοσίευση από dik_ » 04 Σεπ 2007 18:00

Στη θέση σου ή θα έστελνα τα διάφορα επιμέρους στοιχεία του αντικειμένου με POST και στην άλλη σελίδα θα το ξαναέκανα construct με αυτά, ή θα έσωζα το αντικείμενο σε session.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Μεταφορά αντικειμένου με post

Δημοσίευση από soteres2002 » 05 Σεπ 2007 02:38

boreis na metafereis ena PHP object metaksi mias POST etisis me seiriakopoiisi. i idea einai oti dimiourgeitai ena "anastrepsimo apotipoma" tis klasis opos einai arxikopoiimeni kai tin metafereis autousia se mia alli katastasi. to pleonektima einai oti boreis na kaneis perissotera apo ta sessions, mias kai me tin seiriakopoisi boreis na to apothikeuseis se mia database kai na to anaktiseis. :-) Eno to session xanetai...

sou dino kai ena snippet:

Κώδικας: Επιλογή όλων

--------------- transmitter.php ------------------
<?php
class MyClass &#123;
     public $fieldA;

     public function __construct&#40;&#41; &#123;
             $this->fieldA = microtime&#40;&#41; * 10000;
     &#125;
&#125;

$instance = new MyClass&#40;&#41;;
/* output serialized instance of class */
print&#40;serialize&#40;$instance&#41;&#41;;
?>

Κώδικας: Επιλογή όλων

-------------- receiver_proc.php ---------------
<?php
$ser = $_RESPONSE&#91;"somefield"&#93;;
$obj = unserialize&#40;$set&#41;;
print&#40;"Field value " . $obj->fieldA&#41;;
?>

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Μεταφορά αντικειμένου με post

Δημοσίευση από cherouvim » 05 Σεπ 2007 09:42

Ο server αποδίδει τη σελίδα με την post φόρμα.
Ο server δέχεται το post http request από τη φόρμα.

Στη περίπτωση που αυτοί οι 2 servers είναι το ίδιο με την ίδια εφαρμογή, αρκεί να στείλεις ένα unique id του αντικειμένου (δεδομένου οτι βρίσκεται στη βάση), ή να το βάλεις όλο μέσα στο http session.

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Μεταφορά αντικειμένου με post

Δημοσίευση από nikirtsi » 05 Σεπ 2007 10:29

soteres2002
Πανέμορφο...

dik_, cherouvim
Ρίξτε μιά ματιά σέ ένα παραδειγματισμό χρήσεως τής λογικής τού soteres2002...


class.php

Κώδικας: Επιλογή όλων

<?php
class cClass 
&#123;//class cClass 
function alert&#40;&#41; &#123;echo "a = ".$this->a."<br/>";&#125;
var $a;
&#125;//class cClass 
?>



index.php

Κώδικας: Επιλογή όλων

<html><head></head><body>
<?php 
require_once&#40;"class.php"&#41;;

$o = new cClass;
$o->a = "kalimera";

echo "<form action= 'Second.php' method='post'>";
echo "<input type='hidden' name='SerializezObj' value='".serialize&#40;$o&#41;."'  />";
echo "<input type='submit' />";
echo "</form>";

?>
</body></html>

Second.php

Κώδικας: Επιλογή όλων

<html><head></head><body>
<?php 
require_once&#40;"class.php"&#41;;

$o = unserialize&#40;stripslashes&#40;$_POST&#91;"SerializezObj"&#93;&#41;&#41;;

$o->alert&#40;&#41;;
?>
</body></html>
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Μεταφορά αντικειμένου με post

Δημοσίευση από cpulse » 07 Σεπ 2007 15:20

Κάτι που είπε ο Σωτήρης και δεν είναι σωστό.. στο session δεν χάνεται τίποτα, απλά πρέπει να βάλεις τον κώδικα του object (σε αυτή την περίπτωση το require_once("class.php"); ) πριν το session_start() .

Νίκο μερικές αλλαγές στον κώδικα σου:

index.php -- βάλε και htmlspecialchars()

Κώδικας: Επιλογή όλων

<html><head></head><body>
<?php 
require_once&#40;"class.php"&#41;;

$o = new cClass;
$o->a = "kalimera";

echo "<form action= 'Second.php' method='post'>";
echo "<input type='hidden' name='SerializezObj' value='".htmlspecialchars&#40;serialize&#40;$o&#41;&#41;."'  />";
echo "<input type='submit' />";
echo "</form>";

?>
</body></html>

Second.php -- Το stripslashes() εδώ χρειάζεται μόνο στην περίπτωση που έχεις τα magic quotes ενεργά, διαφορετικά μπορεί να προκαλέσει πρόβλημα.

Κώδικας: Επιλογή όλων

<html><head></head><body>
<?php 
require_once&#40;"class.php"&#41;;

$o = unserialize&#40;stripslashes&#40;$_POST&#91;"SerializezObj"&#93;&#41;&#41;;

$o->alert&#40;&#41;;
?>
</body></html>
[/quote]

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Μεταφορά αντικειμένου με post

Δημοσίευση από soteres2002 » 07 Σεπ 2007 17:53

cpulse έγραψε: στο session δεν χάνεται τίποτα, απλά πρέπει να βάλεις τον κώδικα του object (σε αυτή την περίπτωση το require_once("class.php"); ) πριν το session_start() .
signomi, den eksigisa akribos. grafontas xanetai (kai mi eksigontas to pliros), ennoo pos xanontai oi plirofories otan katastrafei to session. Gia auto proteina tin siriakopoiisi, mias kai einai boliko me tis baseis dedomenon alla kai borei na sindiastei kai me tis texnikes sto HTTP protocol, kai akoma pio simantika otan 2 ksehoristes efarmoges epikoinonoune eksoterika (px me metafora seiriakopoiimenon antikeimenon apo web services, kai p trexoune se diaforetikous hosts!). I lisi tis seiriakopoisis borei na "paizei" kai me perissoterous xristes se ena sistima, eno i prosegisi me sessions tairiazei perissotero me per-user diadikasies. An omos thelei kaneis na epeksergastei ena object p dimiourgeitai apo enan xristi, i seiriakopoiisi einai (pistebo) kaliteri lisi, mias kai exei megaliteri genikotita sti xrisi ap oti ta sessions, kai epitrepei eukoloteri anaktisi gia metepeita epeksergasia meso baseon dedomenon (esto kai gia per-user diadikasies meta apo ena login-logout-login).
Τελευταία επεξεργασία από το μέλος soteres2002 την 07 Σεπ 2007 18:05, έχει επεξεργασθεί 2 φορές συνολικά.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Μεταφορά αντικειμένου με post

Δημοσίευση από cpulse » 07 Σεπ 2007 18:02

Κάθε λύση έχει τα υπέρ της και τα κατά της. Αρα σεβαστά όλα όσα λες.

Πάντως αν κάποιος βάλει ένα object σε session
πχ. $_SESSION['obj'] = new Object();

Κι αυτό θα σωθεί ως serialized. Απλά για να γίνει unserialized κατά την διάρκεια του session_start() πρέπει ήδη να υπάρχει κάπου η δομή του.

Όμως κι εγώ προτιμάω αυτά που λες Σωτήρη.. τα serializations καλύτερα να είναι μακριά από sessions.

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Μεταφορά αντικειμένου με post

Δημοσίευση από cpulse » 07 Σεπ 2007 18:05

Κάποιες φορές που χρειάστηκα τέτοια πράγματα, προτίμησα να το κάνω έτσι:

Κώδικας: Επιλογή όλων

$obj = new Object&#40;&#41;;
$_SESSION&#91;'obj'&#93; = serialize&#40;$obj&#41;;
Και κάτι ακόμα!!! Προσοχή με τα serializations, σε κάποιες παλιές εκδόσεις υπήρχε bug με τα stings.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Μεταφορά αντικειμένου με post

Δημοσίευση από soteres2002 » 07 Σεπ 2007 18:18

:-) nice. elpizo o nikirtsi (kai opoiosdipote allos) na exei parei perissoteres idees kai hints gia to pos na antimetopisei auto to problima.

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Μεταφορά αντικειμένου με post

Δημοσίευση από nikirtsi » 07 Σεπ 2007 22:01

Ο Cpulse ανέφερε...
Το stripslashes() εδώ χρειάζεται μόνο στην περίπτωση που έχεις τα magic quotes ενεργά, διαφορετικά μπορεί να προκαλέσει πρόβλημα
Καί αφού τό θέμα αποκτά μιά ακαδημαική χροιά, νά ένας τρόπος για νά
ελέγχουμέ το configuration τού magic quotes

get_magic_quotes_gpc()
Επιστρέφει Μηδέν(0) άν είναι off ή αντιθέτως ένα(1).
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Μεταφορά αντικειμένου με post

Δημοσίευση από soteres2002 » 07 Σεπ 2007 22:52

nikirtsi έγραψε: ...
Καί αφού τό θέμα αποκτά μιά ακαδημαική χροιά....
....
:lol: :lol: :lol: elate na goustaroume!! nikirtsi, edo einai i magia kat eme.... :hammer: :hammer: :hammer:
nikirtsi, pantos doulepse auto pou itheles peran tou akadimaikou endiaferontos tis sizitisis?

Άβαταρ μέλους
nikirtsi
Δημοσιεύσεις: 169
Εγγραφή: 02 Ιουν 2006 16:35

Μεταφορά αντικειμένου με post

Δημοσίευση από nikirtsi » 08 Σεπ 2007 15:51

Soteres2002

Τά πειράματά τα πέρασε με επιτυχία...
Αλλά που να μέ πάρη δέν έχω χρόνο για νά υλοποιήσω...
Μού έχει φάει τά μυαλά μιά μπεμπέκα γιατρός
(δές στιγμή που βρήκε να μέ πονέση τό δοντάκι μου, είναι καί οδοντίατρος και καταλαβένεις - πονά πιό πολλή)

Εγώ τό φιλοσόφησα ... ή θα παντρευτώ προγραμματιστρία να βρώ τήν υγειά μου ή θα παρατήσω τόν προγραμματισμό (πάντα σε vs θά είναι oi γυναίκες και ο προγραμματισμός)

Αφού για να φανταστείς όταν πρωτοάκουσα για τό freestuff, νόμιζα ότι ήταν site
με δωρεάν γυναίκες :) (FreeStuff κανονικά)
Μετά έφαγα τό ξενέρωμα...
Ακόμα και ο ήλιος, στό αριστερό μελίγγι μου ανατέλλει καί στό ζερβό δύει.

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

Μεταφορά αντικειμένου με post

Δημοσίευση από soteres2002 » 08 Σεπ 2007 20:04

File ton programmatismo min ton paratiseis. Aplos mathe na ton diaxorizeis apo to ipoloipo kommati tis zois sou. Episis mathe na min exeis sinexeia ton programmatismo sto mialo sou. Oloi oi programmatistes kseroun...

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Μεταφορά αντικειμένου με post

Δημοσίευση από Alice_Cooper » 09 Σεπ 2007 18:39

soteres2002 έγραψε:...
Aplos mathe na ton diaxorizeis apo to ipoloipo kommati tis zois sou. Episis mathe na min exeis sinexeia ton programmatismo sto mialo sou
...
sofo ... + tou oti poles fores skaei h lysh otan den skeftese kati
(isos yposinidita to kaneis :p)
pantos ontos einai prob.... gynekes kai programming den
syniparxoun efkola ... h lish einai na programatizeis mono makria tous ;)
otan einai ston idio xoro kane kati allo ...

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες