WebDev Zone.GR
Debugging σε PHP
Όλοι σχεδόν οι προγραμματιστές αντιμετωπίζουν προβλήματα στον κώδικα τους και ορισμένες φορές κολλάνε για ώρες στο ίδιο σημείο. Δεν μιλάμε για δέκα γραμμές κώδικα αλλά φανταστείτε να έχετε να ελέγξετε τρεις και τέσσερεις χιλιάδες γραμμές! Ένας πρακτικός τρόπος είναι η χρήση του debugging σε τακτά χρονικά διαστήματα έτσι ώστε να βλέπετε αν όλα πάνε καλά.
Η PHP δυστυχώς δεν έχει παρουσιάσει κάποιον πολύ καλό PHP IDE (integrated development environment) με δυνατότητες debugging (σε αντίθεση με την Microsoft και το Visual Studio που παρέχουν πολύ δυνατούς debuggers και IDEs) οπότε αυτό πρέπει να γίνει από μεριά προγραμματιστή.
Μην σας τρομάζει όμως το γεγονός. Παρακάτω ακολουθούν μερικές μέθοδοι debugging
Echo
Μια τόσο απλή εντολή, που απλά τυπώνει ότι τις δώσουμε σαν είσοδο, είναι το εργαλείο μας για το debugging. Μέσω μερικών παραδειγμάτων θα προσπαθήσουμε να καλύψουμε τις βασικές περιπτώσεις που μπορεί να προκύψουν σφάλματα.
Μετάβαση τιμών
Πολλές φορές θέλουμε να περάσουμε τιμές από μια σελίδα σε μια άλλη. Πηγαίνουν οι μεταβλητές; Κάνουμε σωστή ανάγνωση τιμών;
Έστω ότι από την selida1.php στέλνουμε την τιμή $name="WmP" στην selida2.php?name=WmP όπου αν το δώσαμε σωστά τυπώνει το ανάλογο μήνυμα
<? php
if (($_GET['name']=="Wm"))
echo "Γεια σου WmP... Είσαι ο διαχειριστής!";
else
echo "Γεια σου επισκέπτη!";
?>
(Επίτηδες βάλαμε Wm)
Ενώ είμαστε σίγουροι ότι το γράψαμε σωστά, δεν θα τρέχει... Τι κάνουμε;
Ελέγχουμε αν μετέβη η μεταβλητή μας στην ιστοσελίδα! Προσθέτουμε ένα echo για να δούμε αν όντως η τιμή μας ταξίδεψε.
<? php
echo $_GET['name']';
if (($_GET['name']="Wm"))
echo "Γεια σου WmP... Είσαι ο διαχειριστής!";
else
echo "Γεια σου επισκέπτη!";
?>
Το παραπάνω θα μας εκτυπώσει:
Wm
Γεια σου επισκέπτη!
Άρα συμπεραίνουμε ότι η μεταβλητή μας μετεφέρθη και έχουμε πρόβλημα στην selida2.php στην συνθήκη. Οπότε διορθώνουμε την συνθήκη σε ="WmP" και λειτουργεί κανονικά
Ερωτήματα (SQL)
Πολλές φορές θέλουμε να τρέξουμε ένα ερώτημα και βλέπουμε ότι αναπαράγει λάθος αποτελέσματα. Πχ:
<? php
$user=$_GET['username'];
$qGetUser="SELECT onoma FROM members WHERE username='$user4'";
$rsGetUser=mysql_query($qGetUser);
$rsRow=mysql_fetch_row($rsGetUser);
echo "Γεια σου ".$rsRow['onoma'];
?>
Πάλι περιμένουμε το πρόγραμμα μας να λειτουργήσει αλλά δεν εμφανίζει το όνομα του χρήστη. Οπότε ξεκινάμε να δούμε αν παίρνει από το QueryString (GET) τον χρήστη.
<? php
$user=$_GET['username'];
echo $user
$qGetUser="SELECT onoma FROM members WHERE username='$user4'";
$rsGetUser=mysql_query($qGetUser);
$rsRow=mysql_fetch_row($rsGetUser);
echo "Γεια σου ".$rsRow['onoma'];
?>
και βλέπουμε ότι όντως μεταφέρεται σωστά. Οπότε κάτι παίζει με το ερώτημα μας.
Χρησιμοποιούμε την echo για να δούμε το ερώτημα μας.
<? php
$user=$_GET['username'];
echo $user;
$qGetUser="SELECT onoma FROM members WHERE username='$user4'";
$rsGetUser=mysql_query($qGetUser);
echo $qGetUser;
$rsRow=mysql_fetch_row($rsGetUser);
echo "Γεια σου ".$rsRow['onoma'];
?>
απ' το οποίο θα λάβουμε το SELECT onoma FROM members WHERE username=''
Οπότε διαπιστώνουμε το ερώτημα μας είναι λάθος και το διορθώνουμε!
Υ.Γ: Αν θέλουμε να εντοπίσουμε προβλήματα στον κώδικα και όχι λογικά, μπορούμε να χρησιμοποιήσουμε την "or die" που αναφέρθη σε προηγούμενο βοήθημα με την βάση mySQL
Συνδιαστικές
Πολλές φορές μας προκύπτουν λάθη από φόρμες που ο χρήστης στέλνει διάφορα στοιχεία και εκτελούντε ερωτήματα στην SQL. Για το καλύτερο debugging εκτελούνται πρώτα τις μεταβλητές από τα $_POST, $_GET και μετά τα ερωτήματα και τα αποτελέσματα τους
Καλό debugging!Εκτυπώθηκε από: http://www.webdevzone.gr
Κατηγορία: PHP
Ημερομηνία: Τρίτη, 25 Μαΐου 2010
Συγγραφέας: Seldimi