pbp Δημοσ. 30 Νοεμβρίου 2011 Δημοσ. 30 Νοεμβρίου 2011 Γεια σας, Έχω μία αρκετά απλή απορία σε php. Φτιάχνω μία πολύ απλή εργασία σε php απλά για να κατανοήσω την έννοια του $_GET. Έχω λοιπόν φτιάξει 1 form σε html που περιέχει 3 input ><form name="operations" method="get" action=""> // o kwdikas php vrisketai sto idio arxeio. a <input type="text" name="a" value="0" /> oper <input type="text" name="oper" value="operator" /> b <input type="text" name="b" value="0" /> <input type="submit" name="button" value="button" /> </form> και έχω αντίστοιχα και 3 μεταβλητές, την $oper , την $a και $β στις οποίες εκχωρώ αυτό που πληκτρολογείται σε κάθε input αντίστοιχα. Η λογική είναι να δίνω τιμές πχ στο α και στο β και μία εντολή στο oper (πχ add) και να μου εμφανίζεται το αποτέλεσμα. Πριν λοιπόν φτιάξω πχ την function add($a,$ ορίζω αυτές τις τρεις μεταβλητές στον κώδικα php που έχω κάνει με εξής τρόπο. >$a = $_GET['a']; $b = $_GET['b']; $oper = $_GET['oper']; Θέλω λοιπόν, να μου πείτε τι ακριβώς είναι η $_GET και τι κάνει στις μεταβλητές μου...(το google δεν με βοήθησε και πολύ ...) Το ρωτάω αυτό γιατί όλα μου λειτουργούν καλά με αυτές τις απλές λειτουργίες όπως η add() κλπ... αλλά άμα θελω πχ να κάνω μία εντολή στην οποία η input a να δέχεται τα στοιχεία ενός πίνακα και να εμφανίζει το άθροισμά τους το χάνω φτιάχνω πχ μία function >function sum($a) { $m = str_split($a); return array_sum($m); } και λειτουργεί αυτό που θέλω αλλά μου βγάζει κάποια WARNINGs για τις συναρτήσεις και επίσης για τις μεταβλητές που έχω ορίσει παραπάνω (του τύπου: Undefined index)... Πιστεύω λοιπόν ότι κάτι δεν έχω κάνει καλά με την $_GET έτσι όπως την χρησιμοποίησα.. Μπορείτε να μου δώσετε να καταλάβω? :/ Ευχαριστώ.
chrism4111 Δημοσ. 30 Νοεμβρίου 2011 Δημοσ. 30 Νοεμβρίου 2011 Η $_GET δεν κάνει τιποτα παραπάνω από το να διαβάζει τα query string που έχει το URL δηλαδή αν έχουμε αυτο: www.insomnia.gr/index.php?a=2&b=12&c=5 με την get $a = $_GET['a']; $b = $_GET['b']; $c = $_GET['c']; 'Αρα $a = 2 $b = 12 και $c = 5 Αυτό νομίζω οτι κάνει η get........
varemarious Δημοσ. 30 Νοεμβρίου 2011 Δημοσ. 30 Νοεμβρίου 2011 για την $_GET μπορείς να διαβάσεις εδώ http://php.net/manual/en/reserved.variables.get.php εφόσον θέλεις το action να γίνετε στην ίδια φόρμα τότε πρέπει να προσθέσεις στο action το κώδικα <?php echo $_SERVER['PHP_SELF'];?>
defacer Δημοσ. 30 Νοεμβρίου 2011 Δημοσ. 30 Νοεμβρίου 2011 Ο πίνακας $_GET περιέχει κάθε φορά τις τιμές των μεταβλητών που προκύπτουν από του query string του URL με το οποίο κλήθηκε το script σου. Π.χ. αν το URL ήταν example.php?foo=bar&answer=42&blank= φαντάσου ότι πριν από το δικό σου κώδικα κάποιος έχει γράψει >$_GET = array( 'foo' => 'bar', 'answer' => '42', 'blank' => '', ); Προσοχή στο ότι όλα τα στοιχεία του $_GET θα είναι strings (συνήθως δεν παίζει ρόλο αλλά το αναφέρω). Απο κει και πέρα o $_GET είναι σαν οποιοδήποτε άλλο πίνακα, με μόνη διαφορά ότι είναι superglobal και άρα διαθέσιμος παντού χωρίς να χρειάζεται να γράψεις global $_GET;. Τα διάφορα notices που λες οφείλονται στο ότι πιθανότατα πας να διαβάσεις από στοιχεία του $_GET που δεν υπάρχουν. Π.χ. με το παραπάνω URL που έδωσα, αν έγραφες >$invalid = $_GET['invalid']; θα έπαιρνες notice γιατί δεν υπάρχει στον πίνακα στοιχείο με key "invalid". Αυτό ισχύει ακριβώς το ίδιο για όλους τους πίνακες και όχι ειδικά για τον $_GET. Το κλειδί εδώ είναι ότι έχεις τον κώδικα που εμφανίζει τη φόρμα και αυτόν που δέχεται είσοδο από τη φόρμα στο ίδιο αρχείο. Αυτό σημαίνει ότι θα τρέξει ο ίδιος κώδικας για καθένα από τα 2 παρακάτω URL: example.php example.php?a=1&oper=+&b=1 (το δεύτερο URL δεν θα είναι έτσι ποτέ για τεχνικούς λόγους αλλά το έγραψα λάθος για ευκολία -- αντιπροσωπεύει την πράξη 1+1). Αν λοιπόν γράψεις >$a = $_GET['a']; τότε στη δεύτερη περίπτωση (μετά την υποβολή της φόρμας) όλα καλά, ενώ στην πρώτη θα φας notice (αφού δεν υπαρχει τέτοιο στοιχείο στον $_GET). Αυτό είναι εντελώς συνηθισμένη περίπτωση, και για να αποφύγεις το notice πρέπει να κάνεις ένα τεστ πρώτα με empty() ή isset() -- οι διαφορές είναι εκτός του scope της απάντησής μου αλλά εδώ επειδή μπορεί να έχεις σαν είσοδο τον αριθμό μηδέν το σωστό είναι με isset. Π.χ.: >if(isset($_GET['a'])) { $a = $_GET['a']; } else { $a = null; // θα μπορούσες να μην δώσεις καν τιμή, αλλά τότε θα έτρωγες notice αν πήγαινες παρακάτω να χρησιμοποιήσεις την $a, οπότε δώρον άδωρον } Αυτό λοιπόν επειδή είναι δύσχρηστο το γράφεις συντομότερα έτσι: >$a = isset($_GET['a']) ? $_GET['a'] : null; Και για να μην πρήζεσαι, το βάζεις σε function: > function getvar($name, $default = null) { return isset($_GET[$name]) ? $_GET[$name] : $default; } $a = getvar('a'); // δεν πρόκειται ποτέ να δώσει notice πλέον Κάτι παρόμοιο (αν και φυσικά όχι τόσο απλοϊκό) θα βρεις σε οποιοδήποτε πρόγραμμα PHP έγραψε κάποιος που ξέρει 5 πράγματα για τη γλώσσα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα