δίνοντας ίδια τιμή σε πολλές μεταβλητές

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

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

Απάντηση
Serghio
Δημοσιεύσεις: 451
Εγγραφή: 08 Φεβ 2011 19:20
Τοποθεσία: Περιστέρι

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Serghio » 31 Ιαν 2012 21:43

Θα ήθελα να μου πείτε αν ο παρακάτω κώδικας είναι σωστός:

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

if ((!isset($_REQUEST["monthcol"]))||(!isset($_REQUEST["month"])))
 
        {$_REQUEST["month"]=$_REQUEST["monthcol"] = date("n");} 
Προσπαθώ δηλαδή να περάσω την τιμή του date σε 2 superglobal variables γράφοντας μία γραμμή κώδικα.

Εϊναι σωστό το παραπάνω? Γιατί σε εμένα δεν "παίζει".

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 31 Ιαν 2012 22:50

Δεν είναι καλή πρακτική να αλλάζεις τα superglobals _GET, _POST, _REQUEST. Ειδικά το _REQUEST καλό είναι να μην το χρησιμοποιείς. Βάλε τα data που σε ενδιαφέρουν σε κάποιο array ή σε ξεχωριστές μεταβλητές και παίξε με αυτές.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 01 Φεβ 2012 09:25

gvre έγραψε: Ειδικά το _REQUEST καλό είναι να μην το χρησιμοποιείς.
Τεκμηρίωσε σε παρακαλώ

Άβαταρ μέλους
Khronos
Δημοσιεύσεις: 754
Εγγραφή: 11 Δεκ 2006 14:43
Τοποθεσία: Ηράκλειο

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Khronos » 01 Φεβ 2012 10:17

Υποθέτω οτι ο gvre εννοεί οτι είναι καλό να ξέρουμε απο που έρχονται τα δεδομένα, γι'αυτό να γίνεται χρήση $_GET ή $_POST.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 10:26

Καλό μήνα :)

Για να μην τα ξαναγράφω, διάβασε αυτό
http://devlog.info/2010/02/04/why-php-r ... dangerous/

Το _REQUEST είναι για αυτούς που βαριούνται να γράψουν 2-3 συναρτήσεις/methods για να διαβάζουν τα data από το σωστό superglobal.

Προσωπικά, προτιμώ να διαβάζω τα data από εκεί που τα περιμένω και όχι από όπου μου έρθουν.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 01 Φεβ 2012 10:35

Όταν φιλτράρεις όλο το $_REQUEST έχεις τον ίδιο κίνδυνο που έχεις και από το φιλτράρισμα του $_POST ή $_GET

Προσωπικά το θεωρώ μια καραμέλα στη γλώσσα των developers
Και εκτός αυτού όπως λέει και το άρθρο μπορείς πάντα να κάνεις merge τις δύο superglobals από όπου περιμένεις δεδομένα.
Υπάρχει περίπτωση κατά περίπτωση να περιμένεις τα δεδομένα ή από το ένα ή από το άλλο.
πχ η post from μιας φόρμας αναζήτησης και τα get requests του pagination των συγκεριμένων αποτελεσμάτων.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Apostolis_38 » 01 Φεβ 2012 10:38

@gvre

Κι όμως, δεν είναι μόνο για αυτούς το $_REQUEST :D
Πρόσφατα μου έτυχε ένα περίεργο μπλέξιμο όπου διάφορες μεταβλητές στέλνονταν με $_POST.
Κάποιες από αυτές όμως έπρεπε να περάσουν με $_GET για να δουλεύει το pagination. :o
Οπότε; Σε συγκεκριμένα σημεία μπήκαν $_REQUEST και μπορείς να παίρνεις τις τιμές και από τις POST και από τις GET.



Γιατί έγινε αυτό το μπλέξιμο μη ρωτήσεις :D



Edit Ωπ! Με πρόλαβε ο korgr.
Αυτό ακριβώς που περιγράφει με τη φόρμα έπαθα κι εγώ.

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 10:47

Μόνο που το _REQUEST δεν περιέχει μόνο τα _GET και _POST αλλά και το _COOKIE, το οποίο έχει προτεραιότητα όταν το variables_order που υπάρχει στο php.ini έχει την τιμή GPCS (συνήθως υπάρχει αυτή η ρύθμιση).

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 10:52

@Apostolis_38 Τι σε εμποδίζει να φτιάξεις μια συνάρτηση/method που να διαβάζει την τιμή μόνο από το _POST ή _GET (από οποιοδήποτε από τα 2); Το _REQUEST περιλαμβάνει και το _COOKIE όπως έγραψα και παραπάνω.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 01 Φεβ 2012 10:59

gvre έγραψε:Μόνο που το _REQUEST δεν περιέχει μόνο τα _GET και _POST αλλά και το _COOKIE, το οποίο έχει προτεραιότητα όταν το variables_order που υπάρχει στο php.ini έχει την τιμή GPCS (συνήθως υπάρχει αυτή η ρύθμιση).
Όταν μιλώ για τεκμηρίωση αυτό εννοώ με όλο τον σεβασμό.
ok έχει και cookies.
Πες μου τι ζημιά θα πάθεις από οποιοδήποτε cookie αν δεν το χρησιμοποιείς στον κώδικά σου. Κάτι απτό!

Εγώ σου αντιπαραθέτω ένα απλό παράδειγμα:
Περιμένω τις $a, $b από post ή get
Παίρνω το $_REQUEST που περιέχει την μάνα του και τον πατέρα του (μεταξύ των οποίων και το evil cookie $c) και αφού το φιλτράρω με:

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

$variables->getSafeVars(array_keys($_REQUEST));
τις χρησιμοποιώ ως

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

echo $a, $b;
τι μου κάνει το evil cookie?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Apostolis_38 » 01 Φεβ 2012 11:05

Το οτι θέλω να φτιάξω μία σελίδα για pagination και μια σελίδα για φόρμα που στέλνει δεδομένα για να χρησιμοποιούνται από όλο το site. Κι όχι από κάποιες συγκεκριμένες σελίδες. Και αν χρειαστεί να προσθέσω άλλες 5 σελίδες να μην πρέπει να κάνω ειδική μέριμνα γι αυτές.
Αλλιώς θα πρέπει να αλλάξει η όλη "φιλοσοφία" του οπότε γιατί να μην φτιάξω καμμιά 20ριά pagination και καμμιά 100ή φόρμες.

Το αν έχει cookies ή όχι δεν με ενδιαφέρει.
Τσεκάρω συγκεκριμένες μεταβλητές.
Απλώς η ίδια μεταβλητή (π.χ. $product) την μία είναι _POST και την άλλη _GET.
Αντί να γράψω καμμιά εκατοστή

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

if(isset($_POST["product"] = $product) ) else $_GET["product"] = $product
βάζω μια _REQUEST και νετάρω :D

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 11:24

Apostolis_38 έγραψε:Το οτι θέλω να φτιάξω μία σελίδα για pagination και μια σελίδα για φόρμα που στέλνει δεδομένα για να χρησιμοποιούνται από όλο το site. Κι όχι από κάποιες συγκεκριμένες σελίδες. Και αν χρειαστεί να προσθέσω άλλες 5 σελίδες να μην πρέπει να κάνω ειδική μέριμνα γι αυτές.
Αλλιώς θα πρέπει να αλλάξει η όλη "φιλοσοφία" του οπότε γιατί να μην φτιάξω καμμιά 20ριά pagination και καμμιά 100ή φόρμες.

Το αν έχει cookies ή όχι δεν με ενδιαφέρει.
Τσεκάρω συγκεκριμένες μεταβλητές.
Απλώς η ίδια μεταβλητή (π.χ. $product) την μία είναι _POST και την άλλη _GET.
Αντί να γράψω καμμιά εκατοστή

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

if(isset($_POST["product"] = $product) ) else $_GET["product"] = $product
βάζω μια _REQUEST και νετάρω :D
Μπορείς πολύ απλά να χρησιμοποιήσεις κάτι σαν το παρακάτω

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

function GetVar($var)
{
        return isset($_POST[$var]) ? $_POST[$var] : (isset($_GET[$var]) ? $_GET[$var] : null);
}

$product = GetVar("product");
Μήπως αντί

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

if (isset($_POST["product"] = $product) ) else $_GET["product"] = $product
ήθελες να γράψεις

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

if(isset($_POST["product"]))
    $product = $_POST["product"];
else if (isset($_GET["product"]))
    $product = $_GET["product"];

gvre
Δημοσιεύσεις: 990
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από gvre » 01 Φεβ 2012 11:28

korgr έγραψε: τι μου κάνει το evil cookie?
Χαλάει τη γεύση ρε φίλε :)
Θα σου απαντήσω το βράδυ που θα έχω περισσότερο χρόνο να γράψω κάτι τεκμηριωμένο.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από Apostolis_38 » 01 Φεβ 2012 11:45

Ναι. Απλώς δεν έχω τώρα τη δυνατότητα να κάτσω να γράψω όλο το κατεβατό.
Πάντως μπήκες στο νόημα :wink:


Οσο για την function, βεβαίως και θα κάνει δουλειά. Οπως και άλλοι τρόποι.
Το θέμα είναι γιατί να παιδευτείς να γράψεις πολλές τέτοιες functions.
Κι αν προστεθούν κι άλλες σελίδες;
Ξανά πάλι τα ίδια;

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

δίνοντας ίδια τιμή σε πολλές μεταβλητές

Δημοσίευση από korgr » 01 Φεβ 2012 12:25

gvre έγραψε: Χαλάει τη γεύση ρε φίλε :)
Θα σου απαντήσω το βράδυ που θα έχω περισσότερο χρόνο να γράψω κάτι τεκμηριωμένο.
Χαίρομαι μπας και μάθουμε κάτι νέο και ξεστραβωθούμε και οι αυτοδίδακτοι :)

Απάντηση

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

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

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