Page 1 of 3 123 LastLast
Results 1 to 25 of 73
  1. #1
    Join Date
    May 2003
    Location
    United States
    Posts
    63

    How To : Improve Your PHP Programming

    Hello everyone,

    I've decided that I would make a thread here describing the different things that I do to improve other people's PHP scripts.

    Hope you enjoy it and learn a thing or two.

    1 - Your PHP Tags
    I know some of you prefer to use the short tags when writing PHP scripts <? ?> but this is not always the best way of doing it.
    The standard tags <?php ?> are much better as they will work on every server that you write your PHP code on. You may move to a server some day that doesn't allow the short tags or the ASP-style tags and you will have to sit for an hour and update your PHP scripts.

    2 - Debugging Your PHP Code
    Some of us may run into a problem when programming a PHP script and don't know what's wrong with it. The error_reporting() function in PHP helps you out by telling every error you have on your page. To show all of the errors on the page that you're editing, put this on the second line :
    PHP Code:
    error_reporting(E_ALL); 
    3 - Debugging Your PHP Code (again)
    When you finish editing your 1200-line PHP script, click onto it in your Internet browser, you see an error that says that is on line 561. Don't hit the panic-attack button quite yet, because there is an easy way to find out what line 561 is. Follow these easy steps :
    - Open up Microsoft Notepad
    - Paste your PHP script into it
    - Go to 'Edit' >> 'Go To...' (or Control+G)
    - Type in line #561 and hit the enter key
    - Your cursor is taken to line #561.
    - Look above and below line #561 to see if there is any kind of trouble.
    - Fix the error, re-upload the script to your website, and most likely it will work. If there is another error, repeat the above steps.

    4 - Using Comments
    If you have a 1200-line PHP script, it may be quite hard to figure out what's going on all through-out it. The solution to figure out what you're doing is to add PHP-comments.
    PHP-comments are different than the <!-- HTML Comments --> as they are not outputted to the user's page (meaning that they are not even going to see it in the source code).
    There are three ways to make comments in PHP :
    PHP Code:
    <?php
    // The double-backslash is my personal favorite.  I add another set after my code so that it looks even, though it is not necessary. //
    # The hash-style comment is another way of making a comment.
    /* And, this is the final way of making PHP-comments.  You can use
    multiple
    lines
    at a time by using this style. */
    ?>
    You can decorate it however you like, you are the only one who may use them.

    5 - Indenting Your PHP Codes
    I don't personally like to indent my PHP codes, but it helps when reading it. When I do have to, I use the tab key to accomplish this. Example :
    PHP Code:
    <?php
    // Settings //
        
    $var1 "This";

    // Showing Variables //
        
    if($var1 == "This"){
            echo
    "You said This";
        }else{
            echo
    "You said That";
        }
    ?>
    6 - Improving your PHP-File Includes
    I'm sure that most of us on here include a PHP file or two for our layouts. Well, what if your layout file was missing ? Wouldn't that look pretty unprofessional to the people on your website ?
    In every PHP-script that I write, I make sure that the file exists before it is even included. Here's an example :
    PHP Code:
    <?php
    if(!file_exists("layout.inc.php")){exit("Error :  LayOut File Missing");}else{include_once("layout.inc.php");}
    ?>
    I'm sure that a small error message will seem better than half a page that is all messed-up looking.

    7 - Your MySQL Queries
    Sometimes when you're writing a PHP script that includes connections to your MySQL database, you may run into a few problems. Most everyone that had MySQL problems ran a command like this one :
    PHP Code:
    <?php
    mysql_query
    ("INSERT INTO tableName ('id','name') VALUES('1','Mike')");
    ?>
    ..and they figure out that it's not inserting into their database. Here's the solution to this :
    PHP Code:
    <?php
    mysql_query
    ("INSERT INTO tableName ('id','name') VALUES('1','Mike')") or exit("MySQL Error :  " mysql_error());
    ?>
    8 - Combining Alike If-Then Statements
    You may have a register page, and want to make sure that everything has been filled-in. You may use many if-then statements like so :
    PHP Code:
    <?php
    if(!$_POST[name]){exit("Sorry, but you did not fill-in all of the requested fields.");}
    if(!
    $_POST[email]){exit("Sorry, but you did not fill-in all of the requested fields.");}
    ?>
    You can combine these two lines into one by joining their if-then statements together :
    PHP Code:
    <?php
    if((!$_POST[name]) || (!$_POST[email])){exit("Sorry, but you did not fill-in all of the requested fields.");}
    ?>
    Simply, || is the same thing as OR and && is the same as AND.

    9 - Using echo or print ?
    Most of you may say 'echo is the same thing as print', in which I agree with you all. The echo command is much faster than the print command, and is one less character to type. The echo command came later than the print command (I believe), so you make the judement on which to use.

    10 - Printing out a Huge Chunk of HTML at a Time
    Well, I'm sure that many of us found a way to get around this, but I'd like to share with you a few of the ways you can do it.

    1 - Break off your PHP-code, print the HTML, and start your PHP-code up again. (I don't prefer doing this as it looks pretty unprofessional to me).
    2 - Adding backslashes to each HTML tag. (It works, but takes forever to do).
    3 - Using the echo/print command, but without having to do much work. (I recommend) :
    PHP Code:
    <?php
    // Showing a huge chunk of HTML at a time //
    echo<<<END
    <font face="Verdana" color="Orange" size="3">Large, Orange Text in Font Size 3</font>
    <br><br>
    More HTML down here..
    <br><br>
    <div align="Center">Centered text</div>
    END;
    ?>
    Well, I have many other things to tell about sprucing up your PHP-code, but I don't want to bore you.

    I hope I've helped.

    Best Regards,
    - Mike.
    Last edited by giropets; 07-21-2004 at 01:40 AM.
      0 Not allowed!

  2. #2
    Very nice How To , and its not boring at all..your writing style is very interesting and i hope to have more ideas from your mind in the future. Thanx for sharing these tips.
    MaJiD SaeeD Khan
    Software Engineer - Bahriasoft
    http://www.Bahriasoft.com
      0 Not allowed!

  3. #3
    Ild just like to point out something on the echo and print argument. You say "The echo command is much faster than the print command". I'ld like to point out why.

    Print has a return value, echo does not.


    Consider:


    PHP Code:
    <?php

    if (print('foo')) { print('foo printed'); } // Will be true

    if (echo('foo')) { echo('foo printed'); } // Will be false

    ?>
    Evidently print will always return logical true (1), unless there is a serious error with PHP and the string does not print. Obviously PHP uses C prototypes but I will convert them into PHP so we can see what is going on.

    PHP Code:
    <?php

    function print($stringToPrint) {
      
    system.out($stringToPrint);
      return 
    1;
    }

    function echo (
    $stringToPrint) {
      
    system.out($stringToPrint);
    }

    ?>
    Hope that helps clear that up.

    - Kar
      0 Not allowed!

  4. #4
    Join Date
    Jul 2004
    Location
    Ann Arbor, MI
    Posts
    17
    The only things I would point out are:

    1. Use variable names that make sense.

    a) $string is a string, and $string_array is an array for example. $flag is a flag...

    2. Put your code into functions as much as possible, and write your functions so they can be used in multiple projects - try not to write code that is proprietary to the project at hand.

    a) save your functions in library files that you can use the 'include' command to call them up again in your projects.
    -------------------------------------------
    http://www.jmrtechnet.com
      0 Not allowed!

  5. #5
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    Hello again everyone,

    Since all of you thought it was not boring, I've decided that I would add a few more to my list.

    11 - Multiple Items in the If-Then Statement
    As said in #8, you can combine alike if-then statements into one. This also works...
    PHP Code:
    if($this == "that" && $that == "this"){echo"This and that match";} 
    But from experience, it is best to assign seperate brackets () around them as it does not confuse the code...
    PHP Code:
    if(($this == "that") && ($that == "this")){echo"This and that match";} 
    12 - Saving Time with Varibles
    When using functions, and you want to include a load of settings, you need to include every single of them at a time, as so...
    PHP Code:
    <?php
    $time 
    date("Y-m-d:H.i.s");
    $name "Mike";
    $comment "Just a simple comment";
    function 
    show(){
    global 
    $time,$name,$comment;
    echo
    "$time - $name - $comment";
    }
    show();
    ?>
    ..But you can save your time by including only one variable instead of three, as so...
    PHP Code:
    <?php
    $_SETTINGS
    [time] = date("Y-m-d:H.i.s");
    $_SETTINGS[name] = "Mike";
    $_SETTINGS[comment] = "Just a simple comment";
    function 
    show(){
    global 
    $_SETTINGS;
    echo
    "$_SETTINGS[time] - $_SETTINGS[name] - $_SETTINGS[comment]";
    }
    show();
    ?>
    ..Even though you'll spend a little more time by typing $_SETTINGS[] or just by copying and pasting it.

    13 - Shortening exit(); and die(); Functions
    If you want to stop the page load, you can use the exit(); or die(); functions. But, if this is all you want to do, then you can shorten it...
    PHP Code:
    exit();
    exit;

    die();
    die; 
    14 - More Usage of exit; and die;
    If you want to stop the page load and show text, you can do this..
    PHP Code:
    echo"You did not finish all of the required fields.";
    exit; 
    ...Or...
    PHP Code:
    exit("You did not finish all of the required fields."); 
    15 - Using arrays to Store Data
    Arrays are used to store temporary data in a PHP code. Here's an example...
    PHP Code:
    <?php
    $names 
    = array("Mike","Charlie","Amanda","Caroline");
    echo 
    $names[0]; // Outputs 'Mike'
    echo $names[1]; // Outputs 'Charlie'
    echo $names[2]; // Outputs 'Amanda'
    echo $names[3]; // Outputs 'Caroline'
    ?>
    That's all I can really suggest for now, some methods of doing things may work better than others, but you're the one to decide what works best.

    Best of luck,
    - Mike.
    Last edited by giropets; 07-28-2004 at 10:48 PM.
      0 Not allowed!

  6. #6
    Join Date
    Jun 2004
    Location
    USA, Ohio
    Posts
    96
    Very nicely done giropets.. *cheers*
      0 Not allowed!

  7. #7
    Join Date
    Aug 2004
    Location
    Canada
    Posts
    3,785
    That's very nice and informative for anyone specially beginners

    Some other stuff to keep your code more clean and manageble would be to keep HTML and PHP completly seperate for the most part seperate files for them. So useing functions to call the html keep it much cleaner or a template system. Obviously functions like jasonr33 said specially for database stuff make it much easier.

    Heck I've had the same functions for quite a while the same mysql, template and functions files you'd be surprised how much time is saved when all your php scripts use the same set of functions.
      0 Not allowed!

  8. #8

    Re: How To : Improve Your PHP Programming

    Originally posted by giropets


    3 - Debugging Your PHP Code (again)
    When you finish editing your 1200-line PHP script, click onto it in your Internet browser, you see an error that says that is on line 561. Don't hit the panic-attack button quite yet, because there is an easy way to find out what line 561 is. Follow these easy steps :
    - Open up Microsoft Notepad
    - Paste your PHP script into it
    - Go to 'Edit' >> 'Go To...' (or Control+G)
    - Type in line #561 and hit the enter key
    - Your cursor is taken to line #561.
    - Look above and below line #561 to see if there is any kind of trouble.
    - Fix the error, re-upload the script to your website, and most likely it will work. If there is another error, repeat the above steps.

    Best Regards,
    - Mike.
    Well Mike not a bad how-to, but this part IMHO is very wrong.
    I strongly suggest that instead of using plain notepad/wordpad or ms-word to code your scripts you get a proper PHP editor such as PHPcoder or the one by Zend. (which is great, I love it. )

    it has a ton of time saving advantages such as syntax highlighting and line numbering, 'etc.


    Eugene
    IWDN - Really smart web developers... and me!
    More than any time in history mankind faces a crossroads.
    One path leads to despair and utter hopelessness, the other to total extinction.
    Let us pray that we have the wisdom to choose correctly.
      0 Not allowed!

  9. #9
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    I think I've figured it out the hard way, but thanks for letting me know as I take interest in it.
      0 Not allowed!

  10. #10
    I have recently begun to comment all my closing tags and that is really helping a lot. Like I did in the last two lines of this dummy code below. If there is a lot of stuff contains in the if tags where the opening and closing tags are far apart it helps to know where one starts and ends, as well as telling if your number of brackets match up.

    PHP Code:
    if ($something == "this") {
      for(
    $i=0$i<10$i++) {
        echo 
    $i;
        
    $double[$i] = $i*2;
      } 
    // for
    // if 
      0 Not allowed!

  11. #11
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    That's actually not a bad idea, I should try using that from now on.
      0 Not allowed!

  12. #12
    Join Date
    Aug 2004
    Posts
    41
    Yes. For clarity you can even do this for nested statements like
    Code:
    for($i = 0; $i < 10; $i++) {
    for( ; ; ) {
    break;
    } // inner for
    } // outer for
      0 Not allowed!

  13. #13
    Join Date
    May 2003
    Posts
    44
    <?php
    if(!file_exists("layout.inc.php")){exit("Error : LayOut File Missing");}else{include_once("layout.inc.php");}
    ?>
    I prefer to use a function to do this, for example...

    Code:
    function includeme ($addr) 
    {
    	//Check that file exists
    	if (! file_exists($addr)) 
    	{
    		exit("Error :  '$addr' File Missing");		
    	}
    	
    	//Include File
    	include($addr);
    }
    This would go into your functions file which you include, the only down-side is you cant use the function for including your functions file :p
      0 Not allowed!

  14. #14
    PHP Code:
    <?php
    mysql_query
    ("INSERT INTO tableName ('id','name') VALUES('1','Mike')") or exit("MySQL Error :  " mysql_error());
    ?>
    One step furter is:

    PHP Code:
    <?php
    $sql 
    "SELECT value FROM table";
    $query mysql_query($sql
    or die(
    "You got the error: " mysql_error() . "with the query: $sql");
    ?>



    You should never make a variable like $_SETTINGS. The _ is there to show that it is a system (php-specific) variable like $_POST, $_GET and $_SERVER. Rather do $settings then!

    PHP Code:
    <?php
    $_SETTINGS
    [time] = date("Y-m-d:H.i.s");
    $_SETTINGS[name] = "Mike";
    $_SETTINGS[comment] = "Just a simple comment";
    function 
    show(){
    global 
    $_SETTINGS;
    echo
    "$_SETTINGS[time] - $_SETTINGS[name] - $_SETTINGS[comment]";
    }
    show();
    ?>
      0 Not allowed!

  15. #15
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    Thanks for pointing those out, scuba. I should try using the SQL lines you done in my code to help debug even better.
      0 Not allowed!

  16. #16
    Just a quick comment:
    '&&' and 'AND' aren't exactly the same, they have different precedence. For example:

    Code:
    <PRE>
    <?php
      $a = "hello\n";
      $b = "goodbye\n";
    
      print "First trial\n";
      if (print $a && print $b) {
        print "Bad\n";
      }
    
      print "\nSecond trial\n";
      if (print $a and print $b) {
        print "Good\n";
      }
    ?>
    </PRE>
    Returns the following:
    First trial
    goodbye
    1Bad

    Second trial
    hello
    goodbye
    Good
    Same with OR and ||
      0 Not allowed!

  17. #17

    Advantage of PHP?

    May i know what PHP can be used for?
    How powerful is this language?
    Thanks!
      0 Not allowed!

  18. #18
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    Well, PHP can be used for a lot of things on the internet.

    I programmed a whole entire site with my friend that was a web game with PHP back-end programming.

    It is very powerful - just depending on how you want to use it.
      0 Not allowed!

  19. #19
    Wouldn't it be better and easier to make a web game using Flash instead of PHP? If not, what advantages does PHP have over Flash?
      0 Not allowed!

  20. #20
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    GiroPets.net is the web game that I made. It includes a few Flash games as well. I recently sold the site (I should get myself a new screen name for WHT)...
      0 Not allowed!

  21. #21
    Join Date
    Jun 2002
    Location
    Minnesota
    Posts
    9
    thanks for this post
      0 Not allowed!

  22. #22
    Thanks to everyone that posted ideas and how-to's on this board.

    I have succesffully created a few php programs - but my coding was sloppy and hard to change.

    On my next few programs I plan on changing that and this post will definitly help me keep my code clean and concise.

    Billy
      0 Not allowed!

  23. #23
    Join Date
    May 2003
    Location
    United States
    Posts
    63
    Originally posted by billy79
    Thanks to everyone that posted ideas and how-to's on this board.

    I have succesffully created a few php programs - but my coding was sloppy and hard to change.

    On my next few programs I plan on changing that and this post will definitly help me keep my code clean and concise.

    Billy
    I can totally relate to that. I code sloppily too and it's hard for me to tab over...I will have to try starting that habbit too.
      0 Not allowed!

  24. #24
    Also, read the Open Web Application Security Project guide:
    http://www.owasp.org/documentation/g...ide_about.html
      0 Not allowed!

  25. #25
    Join Date
    Jun 2004
    Posts
    112
    Just a little something to add:

    * switch/case is faster than an if condition
    * Type cast any foreach arguments to avoid error messages
    PHP Code:
    <?php
        
    //Assume $someArray is the return value of a function
        //and it will only be an array if the function
        //was successful
        
    $someArray = (array) $someArray;
        foreach(
    $someArray as $eachElement)
        {
            echo 
    $eachElement '<hr />';
        }
    ?>
    * Commas are apaprently faster than periods when it comes to concatenation
    * To view the contents of a variable, you can use print_r() which will print the variable out in a human readable format.
    * You can use var_dump() or var_export() to view the values and types of a variable. The latter will show the values in a format that can be used within a PHP script directly (i.e. it wont cause any parse errors)
    * When using comparison operators, you can either use == or === The latter will check for the type as well as the value and it is faster.
    PHP Code:
    <?php
        $boolTrue 
    TRUE;
        
    $boolFalse FALSE;
        
    $intOne 1;
        
    $intZero 0;
        
    $intOther 5;

        
    //This evaulates to true
        
    if($intOne == $boolTrue)
        {
            echo 
    'Loose checking';
        }

        
    //This is false because one is an
        //integer, while the other is a boolean
        
    if($intOne === $boolTrue)
        {
            echo 
    'Strict checking';
        }
    ?>
    * To iterate through an associative array (eg.: $_GET, $_POST, etc.), you can do this:
    PHP Code:
    <?php
    //This snippet will strip any tags off all GET arguments
    foreach($_GET as $myKey => $myValue)
    {
        
    $_GET[$myKey] = strip_tags($myValue);
    }
    ?>
    * If you prepend a function with an AT sign (@), it will not spit out any errors. The same applies to user defined functions.
    PHP Code:
    <?php
        
    //This will output an error if the password is wrong
        
    mysql_connect('localhost''username''wrongPassword');

        
    //This will not display any error messages
        
    @mysql_connect('localhost''username''wrongPassword');

        
    //Assuming the method myMethod has an error in it,
        //it wont spit out any warnings because of the @ prepend
        
    @$myObj->myMethod($myArgument);
    ?>
      0 Not allowed!

Page 1 of 3 123 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •