PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Χειρίζοντας φόρμες (Form)> <Η πρώτη σας PHP-ικανή σελίδα
Last updated: Sun, 25 Nov 2007

view this page in

Κάτι χρήσιμο

Ας κάνουμε κάτι λίγο πιο χρήσιμο τώρα. Θα ελέγξετε τι είδους browser χρησιμοποιεί το άτομο που βλέπει τη σελίδα. Για να το κάνουμε αυτό, ελέγχουμε το user agent string που στέλνει ο browser σαν μέρος του HTTP request (αιτήματος). Αυτή η πληροφορία αποθηκεύεται σε μια μεταβλητή. Οι μεταβλητές πάντα αρχίζουν με ένα σύμβολο δολλαρίου στην PHP. Η μεταβλητή που μας ενδιαφέρει τώρα είναι $_SERVER["HTTP_USER_AGENT"].

Note: Σημείωση για τις PHP Autoglobals Η $_SERVER είναι μια ειδική δεσμευμένη μεταβλητή της PHP η οποία περιέχει όλες τις πληροφορίες του web server. Είναι γνωστή ως μια Autoglobal (ή Superglobal). Δείτε την σχετική σελίδα του manual για τις Autoglobals για περισσότερες πληροφορίες. Αυτές οοι ειδικές μεταβλητές εισηγήθηκαν στην PHP » 4.1.0. Πριν από χρησιμοποιούσαμε αντί αυτού τον παλαιότερο array $HTTP_*_VARS, όπως η $HTTP_SERVER_VARS. Αν και ξεπερασμένες, αυτές οι παλαιότερες μεταβλητές ακόμη υπάρχουν. (Δείτε επίσης την σημείωση στον παλιό κώδικα.)

Για να εμφανίσουμε αυτή την μεταβλητή, μπορούμε απλά να κάνουμε:

Example#1 Εκτυπώνοντας μια μεταβλητή (Στοιχείο array)

<?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

Ένα παράδειγμα εξόδου αυτού του script θα μπορούσε να είναι:

Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
     

Υπάρχουν πολλά είδη τύπων μεταβλητών στην PHP. Στο παραπάνω παράδειγμα εκτυπώσαμε ένα στοιχείο ενός Array (πίνακα). Τα arrays είναι πολύ χρήσιμοι τύποι μεταβλητών.

Η $_SERVER είναι ακόμη μια μεταβλητή που γίνεται αυτόματα διαθέσιμη σε σας από την PHP. Μπορείτε να δείτε μια λίστα στην ενότητα Δεσμευμένες μεταβλητές του manual ή μπορείτε να πάρετε μια πλήρη λίστα αυτών, δημιουργώντας ένα αρχείο που είναι κάπως έτσι:

Example#2 Εμφάνιση όλων των προκαθορισμένων μεταβλητών με την phpinfo()

<?php phpinfo(); ?>

Αν φορτώσετε αυτό το αρχείο στον browser σας θα δείτε μια σελίδα γεμάτη με πληροφορίες για την PHP μαζί με μια λίστα όλων των μεταβλητών που είναι διαθέσιμες σε σας.

Μπορείτε να τοποθετήσετε πολλαπλές προτάσεις PHP σε ένα tag της PHP και να δημιουργήσετε μικρά μπλοκ κώδικα που κάνουν περισσότερα από μια απλή echo. Για παράδειγμα, αν θέλαμε να ελέγξουμε για την χρήση του Internet Explorer θα μπορούσαμε να κάνουμε κάτι σαν και αυτό:

Example#3 Παράδειγμα: Δομές ελέγχου (control structures) και Συναρτήσεις

<?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
    echo 
"You are using Internet Explorer<br />";
}
?>

Ένα παράδειγμα εξόδου αυτού του script μπορεί να είναι:

You are using Internet Explorer<br />

Εδώ εισάγουμε μερικές καινούριες έννοιες. Έχουμε μια πρόταση if. Αν είστε γνώριμοι με την βασική σύνταξη που χρησιμοποιείται από την γλώσσα προγραμματισμού C, τότε αυτό θα σας φανεί λογικό. Αν δεν ξέρετε αρκετή C ή κάποια άλλη γλώσσα προγραμματισμού που χρησιμοποιείται η παραπάνω σύνταξη, ίσως χρειαστείτε να διαλέξετε ένα εισαγωγικό βιβλίο PHP και να διαβάσετε τα πρώτα κεφάλαια, ή να διαβάσετε το κομμάτι Αναφορά στην Γλώσσα αυτού του manual. Μπορείτε να βρείτε μια λίστα βιβλίων για PHP στο » http://www.php.net/books.php.

Η δεύτερη έννοια που εισάγεται είναι η κλήση της συνάρτησης strstr(). Η strstr() είναι μια συνάρτηση ενσωματωμένη μέσα στην PHP που ψάχνει ένα string για να βρεί μέσα του ένα άλλο string. Σε αυτή την περίπτωση ψάχνουμε για το "MSIE" μέσα στο $_SERVER["HTTP_USER_AGENT"]. Αν το string βρεθεί, η συνάρτηση επιστρέφει TRUE και αν δεν βρεθεί, επιστρέφει FALSE. Αν επιστρέψει TRUE, η πρόταση if γίνεται και αυτή TRUE και ο κώδικας μέσα στα {άγκιστρα} εκτελείται. Αλλιώς, δεν εκτελείται. Δημιουργήστε και εσείς παρόμοια παραδείγματα με if , else και άλλες συναρτήσεις όπως τις strtoupper() και strlen(). Κάθε σχετιζόμενη σελίδα του manual περιέχει παραδείγματα επίσης.

Μπορούμε να προχωρήσουμε ένα βήμα παραπέρα και να δείξουμε πως μπορούμε να μπαίνουμε και να βγαίνουμε από την PHP-λειτουργία (PHP-mode) ακόμη και στη μέση ενός PHP μπλοκ:

Example#4 Ανακατεύοντας και HTML και PHP λειτουργίες

<?php
if (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE")) {
?>
<h3>strstr must have returned true</h3>
<center><b>You are using Internet Explorer</b></center>
<?php
} else {
?>
<h3>strstr must have returned false</h3>
<center><b>You are not using Internet Explorer</b></center>
<?php
}
?>

Ένα παράδειγμα εξόδου αυτού του script μπορεί να είναι:

<h3>strstr must have returned true</h3>
<center><b>You are using Internet Explorer</b></center>

Αντί να χρησιμοποιούμε μια PHP echo πρόταση για να εξάγουμε κάτι, βγήκαμε από την PHP λειτουργία PHP λειτουργία και στείλαμε απλή HTML. Το σημαντικό και δυνατό στοιχείο που πρέπει να προσέξουμε εδώ είναι ότι η λογική ροή του script παραμένει ανέπαφη. Μόνο ένα από τα παραπάνω HTML μπλοκ θα σταλεί στον θεατή, ανάλογα με το αν η strstr() επέστρεψε TRUE ή FALSE. Με άλλα λόγια, αν το string MSIE έχει βρεθεί ή όχι.



add a note add a note User Contributed Notes
Κάτι χρήσιμο
gz at example dot com
16-May-2008 05:33
tomcraig:
If the search string is in the first position (i.e. position[0]), then your coditional will resolve to false.

anonymous:
"The function should return TRUE on any non-zero value." The strpos() function never returns true. It returns, as daniel says, either false or an integer. That includes 0, which evaluates to false if using "==". Also note that the manual text (as you yourself quote it) says that, in the case of an unsuccessful search, the if expression evaluates to true, not that the strpos() function returns true (which, again, it never does).

Mark:
"Try it with == TRUE.  It works fine..." Sure it does, as long as the search string is not in the first position.

The manual and daniel are correct.
Mark
15-May-2008 07:11
No, "double negative" is indeed correct.  Just as in C and C++, False evaluates to 0 and True is defined as "Not False". 

Try it with == TRUE.  It works fine, and is easier to understand.
Anonymous
14-May-2008 11:37
Daniel, you are incorrect:

From the text of the tutorial above:

.....If it does not return FALSE, the if expression evaluates to TRUE .....

So the poster of the double-negative comment is absolutely correct. The function should return TRUE on any non-zero value.
daniel
10-May-2008 08:52
In response to the "Double Negative" post.

I think you missed the line where it says that the function does not return 'true' it returns a position. So you cannot evaluate == true you must evaluate !== false because strpos() only returns a number or false.
tomcraig_fmu at yahoo dot com
09-May-2008 06:25
As an instructor of computer languages, I think your use of a double negative is a poor choice and bad example.  Here is how I would code your example:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') == TRUE)
{
    echo
'You are using Internet Explorer.<br />';
}
?>

Now instead of saying something "if something is not FALSE", you are saying if "something is TRUE".  Having programmed for over 30 years, I have found this much easier to code, debug and pass on to future programmers.
sako
22-Apr-2008 02:36
I don't think there is a bad time to start separating logic from presentation. It is actually a good idea to start doing this from the get-go so it becomes a habit. This is a great habit.. Everything now a days is going away from mixing logic and presentation for simplicity sake among other things (look at html and css). I think a good thing to read up on is smarty. It can do wonders separating your logic from presentation.
ducky
03-Apr-2008 03:54
To the above poster:

That's probably too much to think about when you're starting out... You should probably at first just concentrate on getting the stuff running and learning syntax before you consider best practices and the like.
rfantin at coralwood dot com
20-Dec-2006 10:00
While it's easy to get carried away mixing your logic and presentation together since it's so easy to do, your better off using PHP within HTML only to fill in values, or include other source files.

Keep your actual processing in separate libraries that are called before you send any headers to the page. Try to avoid calling a script that retrieves or sets information, or manipulates it in the middle of your HTML. You'll find it's much easier to maintain.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites