Hostgator.com Affiliate Program

Both sides of a quick and simple web service

To clarify the article title, when I say web service, I mean a piece of software that will receive and send out data via the HTTP protocol. Furthermore, this data is usually transmitted in XML format. I will also call this XML RPC occasionally, but there is also a specification called XML-RPC so things can get confusing. Again in summary, this post will describe a very simple way to send and receive method calls and responses using XML and HTTP POST.

Sending your request
This will use the PHP cURL extension, so make sure your PHP is compiled with the correct options. The XML parser later will also use SimpleXML, which needs PHP 5 and the SimpleXML extension.

The following function will submit a query to an arbitrary web server, and also allow you to pass a POST string through to it.

   function cURL($link, $poststring){
        $ch = curl_init();

        curl_setopt ($ch, CURLOPT_URL, $link);
        curl_setopt ($ch, CURLOPT_POST, 1);
        curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
        curl_setopt ($ch, CURLOPT_HEADER, 0);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt ($ch, CURLOPT_TIMEOUT, 15);

        $response = trim(curl_exec ($ch));
        return $response;
   } //cURL

Now, you should decide on a format for your XML requests; we’ll use something very simple here:

   <?xml version='1.0'?>
   <request>
      <user>Mike</user>
      <type>getDate</type>
   </request>

This will ask another server for the current time, and use basic user name authentication.

To send the request:

   $poststring = "request=$xml";
   $response = cURL('http://server.com/xml.php', $poststring);

Receiving the request
On the other side of the connection we write some code to parse the request (i.e. this is in xml.php hosted on server.com).

   $xml = (isset($_POST['request'])) ? $_POST['request'] : false;
   if (!$xml) { return; }

Now the above XML we sent is stored in the $xml variable. To process it, we can use the following code:

   $obj = simplexml_load_string($xml);

   $error = '';

   if ((string)$obj->user == 'Mike') {
      switch ((string)$obj->type) {
         case 'getDate' :
            $response = "<?xml version='1.0'?>
               <response>
                  <date>".date('l, d F Y at H:i:s', time())."</date>
               </response>";
            break;

         default :
            $error = 'Invalid method';
      } //switch
   } else {
      $error = 'Invalid user';
   } //else

   if ($error) {
      print "<?xml version='1.0'?>
         <response>
            <error>$error</error>
         </response>";
   } else {
      print $response;
   } //else

After checking the user name the method name is handled, and if it doesn’t exist on this implementation an error is returned. Printing the XML response is how we pass data back to the server that requested the service - if you look back you’ll see that the cURL function returns whatever content the URL returned, i.e. our printed XML.

That should be everything, this should of course be expanded into a class or structured methods.


Sorting arrays by an arbitary key value in PHP

I often (a couple times a month) have to sort an array of arrays by some arbitrary value located in the internal array. For example, I might want to sort the following structure by name.

   Array[0] {
      Array[0] {
         id => 1
         name => mike
         age => 20
      }

      Array[1] {
         id => 2
         name => bob
         age: 21
      }
   }

I want the same structure returned, but the array containing ‘bob’ in it’s name key must appear first in the array. PHP’s sort() function is insuffficient in this case, it sorts by the first key of each internal array (i.e. ‘id’ in this case).

The solution is to use usort(), which allows for a custom compare function to be used.

   function cmp($x, $y) {
      if ($x[1] == $y[1]) {
         return 0;
      } //if

      return ($x[1] > $y[1]) ? 1 : -1;
      //or return strcmp($x[1], $y[1]);
   } //cmp

   usort($array, 'cmp');

usort() takes the provided function name and uses it as the compare function between two elements. This also allows you to sort by multiple fields, if the first two fields are equal you can drop down to checking another field, and so on.

B2B: Ajax in JQuery with special effects

Today’s article is going to cover using the excellent JQuery library to implement an AJAX username availability checker (along with a bit of eye candy to show the results). The use of visual effects with AJAX can occasionally be quite tricky, depending on what you need to do - fades by definition will take a certain period of time to execute, so you need to stagger your calls correctly to get your data fading out and back in again at the correct time (after the AJAX calls have fired).

Like the previous JQuery introduction - JQuery Pop-up Menu Tutorial - we’ll be using the latest JQuery library, and a seperate external javascript file to contain our behaviours and logic.

I’m going to skip the HTML in the hopes that you’ll actually whip up a test page yourself, and start playing around with JQuery - but obviously you need a quick description of the elements we’ll be using:

  • span with ID usernameLoading, containing an AJAX spinner.
  • a with ID usernameCheck and href of javascript:void(0)
  • span with ID usernameResult

Onto the javascript:

behaviour.js

 1  $(document).ready(function() {
 2    //username availability checker
 3    $('#usernameLoading').hide();
 4
 5    $('#usernameLoading').ajaxStart(function() {
 6      $(this).show();
 7    }).ajaxStop(function() {
 8      $(this).hide();
 9    });
10
11    $('#usernameCheck').click(function() {
12      $.post("/users/check", {
13        username: $('#UserUsername').val()
14      }, function(response){
15        $('#usernameResult').fadeOut();
16        setTimeout("finishAjax('usernameResult', '"+escape(response)+"')", 400);
17      });
18    });
19
20  });

Yep, the bulk of the action occurs in less than 20 lines of javascript (not including one function that we’ll get to now).

Starting with our standard JQuery attach function, we immediately hide the usernameLoading DIV, as this is the DIV that contains our AJAX spinner image. Lines 5 to 9 simply say that whenever an AJAX event starts and stops, the respective code should be run. This obviously only works if there is one AJAX widget on a page, so you’ll have to be clever otherwise.

Line 11 says that when our usernameCheck a element is clicked, we fire off a $.post JQuery AJAX event, to the /users/check URL, with the correct username value from the input element.

You can view other AJAX methods and examples on the library homepage.

Line 14 says that once the call has finished, pass the response through to the anonymous function which fades out the current usernameResult DIV and then calls a setTimeout on another method called finishAjax.

Line 16 could be replaced by the following two lines:

  $('#usernameResult').html(response);
  $('#usernameResult').fadeIn();

If you try the above, you’ll find that the sparkly fading in and out effect is somewhat ruined by random flickering and nonsense (at least in my Firefox) - to get around this, I use setTimeout.

 1  function finishAjax(id, response) {
 2    $('#'+id).html(unescape(response));
 3    $('#'+id).fadeIn();
 4  } //finishAjax

Be careful in passing your response text through; as you can see in line 16 of the initial listing, I escape the text and then unescape it in the finishAjax function. By waiting 400 milliseconds before replacing the inner HTML of the DIV and then fading it back in, we avoid the horrible flickering and such of the special effect.

The rest of the magic occurs at the /users/check URL - the username parameter is passed through and accessed in PHP’s $_POST array. It is then checked against the database, and depending on whether the username already exists or not, two different sets of HTML are passed back to the javascript AJAX handler.

In PHP, it’s as simple as this:

check.php

  if ($userWasInDatabase) {
    print '<strong>Username is taken already!</strong>';
  } else {
    print '<strong>Username available.</strong>';
  } //else

I think this turned out to be more of a HOWTO than a tutorial, but I think I’ll blame JQuery for that, everything just seems to happen without you having to even try hard. I also realise that I’ve skipped a lot of explanations, but I think you really need to pick up the library and play with it yourself to see how easy it is.

B2B: Testing and defining variables in PHP

PHP is a dynamic, weakly-typed language, and as such, beginners to the language will often find their code acting unpredictably because of assumptions they have made.

PHP has a fairly low entry point for new programmers - it’s easy enough to get a couple of small sample scripts up and running, but on the same token, it’s really easy to pick up bad habits and carry them through into larger projects. Since PHP is often the first language used extensively by a new generation of web programmers, and doesn’t have strict typing or error reporting, a lot of people simply never pick up the best practices for system design and implementation.

This tutorial is going to be a quick introduction to variables in PHP, and how to test them effectively for missing or incorrect data.

To define a variable in PHP, you simply refer to it and assign it a value. Notice that you don’t need to place a type before it, e.g. int or string.

  $var1 = 'abc';

One variable is now present in your system, $var1, with the value abc.

If you are planning on using a group of variables in your program, it is generally good practice to declare them near the top of your function or method, or near the top of the file, and assign them sensible default values:

  $counter = 0;
  $name = '';
  $max = 10;

Testing variables

To maintain a predictable system, you need to ensure that you are always testing variables for expected values and sanitising them where necessary. Sanitising refers to cleaning up any data that has come from an untrusted source, i.e. a user submitted form or something similar. Such data must never be used directly without being checked or parsed - a common mistake is to take data a user has submitted and immediately use it in a database query:

  $query = "SELECT * FROM table WHERE name LIKE = {$_POST['name']}";

This is a classic example of an SQL injection flaw. A malicious user could easily craft a request to modify or even drop your entire database.

A better query would look like this:

  $name = mysql_escape_string($_POST[’name’]);
  $query = “SELECT * FROM table WHERE name LIKE = ‘$name’”;

Notice the additional quotes around $name in the query; and the curly braces around the variable are no longer required as it isn’t a value being accessed in an array. Additionally, notice that the $query string is surrounded by double quotes (”) - this means that variables and string literals inside the string will be parsed.

  $name = 'Michael';
  $test1 = 'My name is $name';
  $test2 = "My name is $name";

Try printing the variables above in your own script and see the difference. $test1 will say ‘My name is $name‘ whilst $test2 will say ‘My name is Michael‘.

PHP provides several functions to test variables with, here is a table of the results from a couple of them:

$var is Function PHP returns
(not set) isset false
” (empty string) isset true
123 isset true
null isset false
” (empty string) empty true
123 empty false
(not set) empty true

Above, we use empty to test if a variable has a value, this function will return FALSE if variable has a non-empty and non-zero value. The following are values that PHP treats as false (zero):

  • "" i.e. empty string
  • 0 as an Integer
  • "0" as a String
  • NULL
  • FALSE
  • array()

Also note that empty only tests variables, anything else will result in a parse error. In other words, the following will not work: empty(trim($name)); (From www.php.net/empty).

Once a variable is defined (or set), you can use unset($var) or $var = null to destroy it.

Because PHP is weakly-typed, since PHP 5 (I think, maybe sooner), an additional operator has been included. By extending the standard boolean test operator ‘==’ to 3 equal signs, ‘===’, the variables being tested will also be tested to see if their base types match. In other words:

  (0 == '')

returns true because both are seen as false (0) by PHP, but

  (0 === '')

returns false because 0 is an integer and ” is a string, so their values match, but not their types.

This additional checking can also be used in the negative form, i.e. ‘!==’.

Using everything we’ve discussed above, a sensible way to read from the HTTP POST parameter super-global and set a default value is to use the ternary operator in PHP:

  $name = (isset($_POST['name'])) ? $_POST['name'] : 'none';

A good way to quickly play around with all these different functions, and to test your logic, is to use the PHP interactive shell (PHP 5.1 onwards):

$ php -a

Alternatively use PHP-Shell which has more features than the built-in shell (link below).

Related links

  1. PHP-Shell by Jan Kneschke
  2. http://www.php.net/manual/en/function.isset.php
  3. http://www.php.net/manual/en/function.empty.php
  4. http://www.php.net/manual/en/function.unset.php

B2B: MySQL Joins and Foreign Keys

Welcome to the first of five articles in the Web Expose Back to Basics project. Each article is going to cover a seperate and distinct topic, with the aim of providing worthwhile beginner tutorials to aid in furthering your web development skills.

The topic for today is using the popular MySQL database to logically store and retrieve data stored in several tables, avoiding data duplication. This is commonly referred to as ‘joining tables’ - and the links between two or more tables are often called ‘foreign key links’. This article deals with MySQL because it is the most readily available and popular database for PHP developers at this point in time, but the examples should work with zero to minimum modifications on most other popular relational database systems.

Using a join to link two tables together refers to the fact that by identifying a common column in both tables, you can use this column to join the two tables together and return a combined result set.

Joining tables

In this example picture, the green columns illustrate two sets of data that are common between the two tables. For example, these could be two tables with user email addresses in them; you could then join the tables on that email column. In most cases though, you will hopefully have designed the database to avoid data duplication (called normalisation) and these common fields will usually be integer ID fields. We can now use a join statement to combine the two tables and return a result set that looks like this:

Tables joined

Here, all the columns from table 1 are laid out as normal, then the matching row’s columns from table 2 are appended to each row. This will only happen if you have the correct filter conditions in place though - without a proper WHERE statement, every row in table 1 will be duplicated as many times as there are rows in table 2, providing you with a potentially huge result set.

No join condition

I realise the above might be confusing, so I think it’s time to do some proper examples with SQL. I’m using MySQL 4.1.6 and phpMyAdmin 2.8.04 to control it, but almost any version will do. phpMyAdmin isn’t required, but is a very good web-based interface to the MySQL RDBMS. If you’re accessing MySQL using the command line tool, remember that you never pass the password through on the command line arguments.

  mysql -u username -p -h localhost

MySQL will prompt you for the password; neglecting the -p argument will make MySQL attempt to connect with a blank password.

Using the command line tool, or phpMyAdmin’s query tool, create two test tables to play with:

Creating tables

  CREATE TABLE `b_products` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 100 ) NOT NULL ,
  `category_id` INT NOT NULL
  );

  CREATE TABLE `b_categories` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 100 ) NOT NULL
  );

Populate tables with some data

  INSERT INTO `b_categories`(`name`)
  VALUES ('DVD');

  INSERT INTO `b_products`(`name` , `category_id`)
  VALUES ('Flatline', '2‘);

(Whenever you see data being populated, you should create some of your own as I haven’t listed all the INSERTs here, to keep the text a bit shorter. If you scroll to the bottom of the post, you can download all the tables and data I used in SQL format.)

The 2 in the last line of the INSERT is the relevant category id you want to link the product to. As you can see, the product table has a category_id, which is called a foreign key, as it refers to a table foreign to the current table. This abstraction of data allows us to avoid having to repeat data (i.e. we don’t have to type ‘DVD’ next to each product, we can simply enter the ID of the ‘DVD’ category). If ‘DVD’ ever changes to ‘HD DVD’, all we have to do is update the category table entry, and everything else will update automatically.

Sample query - fetch all products and their matching categories

  SELECT *
  FROM `b_products` p, `b_categories` c
  WHERE p.category_id = c.id;

Placing an identifier after the table name in the FROM statement allows us to assign an alias to the table; we can then refer to fields inside that table specifically by using the alias.columnname syntax. This is an important step when using joins, often tables share columns with the same name, and you have to explicitly state which one you want to match or fetch.

Result

Result 1

Here you can see that category_id and id are outlined in orange and next to each other - the first three columns are from the product table, and the last two columns from the category table - the join effect is apparent here.

On line 3 of the above query, you can see that we’re limiting each row to only return the correct row from the category table - i.e. we only want to fetch data where the product category ID is the same as the category ID in the external table.

Compare the above to the following query without a WHERE clause:

  SELECT *
  FROM `b_products` p, `b_categories` c;

If you run this query, you’ll see that each row of the products table is joined against every single row in the categories table, as described in the beginning of the post.

Fetch all CD products, and only select the 3 relevant columns

  SELECT p.id, p.name, c.name
  FROM `b_products` p, `b_categories` c
  WHERE p.category_id = c.id
  AND c.name LIKE 'CD';

Result

Result 2

Advanced: count the number of products in each category

  SELECT COUNT(p.id) AS count, c.name
  FROM `b_products` p, `b_categories` c
  WHERE c.id = p.category_id
  GROUP BY c.name;

Result

Result 3

Let’s move on to another example, one where the two tables can have multiple links between each other (sometimes called a has-and-belongs-to-many relationship).

Create two additional tables and some data links

  CREATE TABLE `b_owners_products` (
  `owner_id` INT NOT NULL ,
  `product_id` INT NOT NULL
  );

  CREATE TABLE `b_owners` (
  `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  `name` VARCHAR( 100 ) NOT NULL
  );

  INSERT INTO `b_owners_products`(`owner_id` , `product_id`)
  VALUES ('4', '3');

We don’t have to modify the owners table, or the product table - all the link information is stored in a third external table called owners_products (the convention is to put the table names alphabetically, seperated by a ‘_’).

Linking the two tables, using the third as a reference

  SELECT *
  FROM `b_owners` o, `b_products` p, `b_owners_products` op
  WHERE o.id = op.owner_id
  AND p.id = op.product_id;

Result

Result 4

Doing something useful with the link

  SELECT o.name, p.name
  FROM `b_owners` o, `b_products` p, `b_owners_products` op
  WHERE o.id = op.owner_id
  AND p.id = op.product_id
  AND o.name = 'Bob';

Result

Result 5

This fetches all products belonging to ‘Bob’.

More information

  1. Sample tables and data for this article
  2. A detailed explanation of JOINs
  3. Ensuring foreign key integrity
  4. More information on JOINs
is relafen a narcotic medlineplus drug information tretinoin topical aq myonlinemeds biz nasacort tramadol valtrex does constipation from effexor go away phentermine no prescription pharmacy cialis faq an alternative for hydrocodone morning after pill and wellbutrin keppra medication what are hydrocodones marijuana effects brain what percentage of student-athletes use steroids alcohol and herion candida diet lamisil inpatient alcohol rehabilitation baltimore maryland cialis viagra mastercard accepted nicotine dependence disorder ed alcohol drug alcohol abuse ministries orlando florida alcohol anhydrous ointment wool heart disease and chronic ibuprofen use kessler's alcohol manicuring marijuana swollen ankles heroin nicotine withdrawal syndrome abdel salam fluoxetine sertraline soma puzzle origami alcohol austin chemistry burning alcohol ohio alcohol related car accidents zithromax generic name ortho 1 35 s yasmin oral contraception and alzheimers does alcohol and drugs effect sperm elavil symptom withdrawal aricept and namenda seizures ordering prescription xanax online generic prozac color alcohol prevention facts european alcohol age aciphex flomax index php alcohol in ear throbbing banning alcohol at sporting events alcohol related car accidents statistics nicotine blood system alcohol stearyl wolfsheim heroin she said side effects from weaning off diovan urinary tract infection and ciprofloxacin alcohol by volume specific gravity order softtabs medicine cialis london effects of steroids church distance from alcohol washington state marijuana hairloss paxil drug test ranitidine side affects tylenol rapid release gels side effects drug interaction celebrex tramadol aricept mortality vascular dementia cns effects of soma alcohol amine ether ketone aldehyde weaning off of lexapro prednisone oral rats discount paroxetine generic paxil pcp pneumonia xray detailed instructions for synthesizing homemade mdma effects of accupril wellbutrin empty stomache effects of suddenly stopping prednisone can synthroid be taken with actonel discount prednisone pain substance p morphine ritalin options delivery hydrocodone online overnight pharmacy xanax vs valium anxiety lipitor pysician's insert wellbutrin augmentation erection ativan addiction symptoms premarin monogram discount adipex p is lexapro med for thyroid top alcohol fuel set up flexeril overdose treatment tylenol and zocor ibd cats steroids therapeutic dose premarin synthesis ijpc ciprofloxacin flexeril faq about celebrex brain damage alcohol abuse methods for making mdma tamoxifen discontinued polyvinyl alcohol formula what is in claritin simvastatin singulair triamterene hc marijuana affects on the brain lsd effects of forensic alcohol test branch alcohol calories comparison effects of drugs and alcohol alcohol abuse disorder buy imitrex spironolactone and polycystic hydrocodone interaction with flomax 5generic sildenafil depakote and laser hair removal generic cialis pills free sample toprol xl 25 sibutramine phentermine orlistat cholesterol born date signs alcohol phentermine direct no clubs discount cost 10 mg ambien itching from penicillin adipex loss pill weight american career college norco ca penicillin skin rash adipex legal in canada interaction with alcohol medication adderall laughing gas glucophage 500mg drug and alcohol rehab new jersey smoking premarin didrex online cod prednisones neem welcome to soma archive buy hydrocodone online legally methamphetamine t-shirts cialis tadalafil tablets ritalin fibromyalgia attention deficit disorder paroxetine 20mg tab bontril drug information bud light percentage of alcohol marijuana and hypothyroidism patent expire lexapro drinking too much alcohol dead poppy plants with highest opium yield marijuana and semen analysis generic for lorazepam flovent mdi phendimetrazine 180 count paroxetine hcl tab 20mg bupropion hydrochloride marketed as the antidepressant marijuana seeds carmela ortho rehab washington state alcohol party supplies penicillin dosage for horses crack alcohol serzone withdrawal alcohol muscle relaxant medrol pack dosing nizoral side affects azithromycin drug interaction list kenalog inj for treatment of psoriasis 200 proof alcohol 2007 marijuana legal in what state adipex cheap diet pill buy drug generic generic online viagra description of lsd experience alcohol recovery case manager job description celexa off weaning cocaine quality controls marijuana soup alcohol alcoholism effects ghb legal uses pcp lsd amphetamine methamphetamine cocaine buy nicotrol inhaler alcohol drug residential treatment for heart lanoxin alcohol and drug education programs rubbing alcohol poisoning contradictory outcomes on ketamine viagra on dogs flomax and ambien ibuprofen prescription strength detox drug lorcet 20 ecstasy prolactin orlando drug and alcohol facilities on line prilosec marijuana exchange benicar hct drug gtt eyes alphagan singulair legs astrazeneca nexium rebate alcohol brain bubbles byetta with alcohol alcohol chemical compound ritalin dexedrine good news claritin snoring alcohol customs travel ireland disfunci n metoprolol j 5post softtabs zenegra artificial sweeteners speed alcohol into blood dog dose xanax employment laws alcohol mass celebrex vaniqa flonase allegra attorney celecoxib effects side prescribe valium paroxetine sales seroxat metformin miss a dose lose prednisone sarcoidosis weight cost of pcp history zocor description dilantin in blood ravesupply mdma took buspar amitriptyline with xanax cocaine metabolism cytochrome p450 prednisone side xanax 5 muscle mass loe testosterone buy cheap soma online alcohol in morayshire keppra anti-seizure medication liquid serzone australia vicodins no prescription delivery glucophage zenocal albuterol pregnancy fever alternate tylenol ibuprofen augmentin sarcoidosis alcohol disciples of christ celebrex celecoxib south dakota family contract with alcohol issues isopropyl alcohol cas prices for methamphetamine breath analyser alcohol test cephalexin origin ambien buy online zyrtec wellbutrin macrobid nasacort imitrex bar xanax gerolsteiner water used on marijuana viagra perscription prednisone dose pack alcohol tobacco and firearms bureau 6 best price for propecia federal alcohol law detroit marijuana epidemic oxycontin addiction and side effects celebrex manufacturer boards chongqed hgh steroids low prices alcohol on air planes cheap evista pills one last call for alcohol lyrics marijuana and natural detox ibuprofen and drowsiness effects of cocaine usage christian alcohol treatment texas cocaine lyrics fioricet fioracet alcohol purchase in stores elavil cream gemfibrozil 60 mg actonel bad for teeth remeron organon micromedex metformin hillcrest meridia tramadol mexico online pharmacy celexa and zoloft interaction yerba mate have cocaine in it cheap phentermine without prescription phentermine cheapest zithromax crush most powerful alcohol soma drug detection alcohol facet point injections diazepam during pregnancy dot drug alcohol training ranitidine no prescription comparing tramadol to lortab olympics and steroids colorado alcohol rehabilitation indication for lipitor acetaminophen cod 3 tablettev clopidogrel credo timing 15 hrs drinking alcohol lower back pain effects of phenergan iv push deficiency symptom testosterone drug equivalents of lipitor skin spots alcohol buy vicodin now cocaine sellers interactions of neurotin hydrocodone attack heart lawsuit vioxx seroquel dangers by carisoprodol online diazepam ip los jovenes y el alcohol tobacco nicotine content variety alcohol uae dubai methamphetamines treatment prednisone psoriatic arthritis alcohol counseling st louis missouri help with withdrawal symptons from marijuana continuous use of ortho tricyclene low clinical pharmacology xanax generic viagra soft tab soma the strokes lyrics it's monday tylenol florida acetic acid isopropyl alcohol limiting reagent bupropion diet pills phentermine and heart lsd marijuana mix razadyne seroquel not take together prevacid antacid treating low labido with bupropion loratadine for hyprtension oxycodone pain gain weight zyrtec multiple myeloma methylprednisolone atsa alcohol 96 puro de cana buying generic viagra nicotine cigarettes dj youri fuck on cocaine lapacho and coumadin xenical non prescription valium joint pain zyprexa 2b anxiety depakote uses alcohol and common cold micro oily retin skin delivery guaranteed overnight soma alcohol dependence health psychological marijuana effects discount tamiflu can dogs take anipryl with cephalexin cost prilosec atomized alcohol concerta wellbutrin hydrocodone 10 650 phentermine viagra delivered overnight can i take lipitor with lunesta dur 8 elite ureteroscope ritalin recommended adult dosage alcohol bomb chlorine best way to grow marijuana indoors advair 25051 puff beginners guide outdor marijuana growing flexeril xanax urine ambien anaphalyxis interaction between prednisone and tramadol dxm xanax sertraline hcl info fexofenadine manufacturer opium body men buy advair from canada alcohol poisoning hand sanitizer and small baby with cocaine and marijuana heroin back in hollywood 25 mg norvasc discount purchase fluconazole pharmacy marijuana garden pictures los actos administrativos lipitor bilirubin free maine nicotine patch accepted cod tramadol alcohol health risks for men topical steroids for eczema eating marijuana effects buy viagra online a href ritalin and headache workplace alcohol history of cocaine baby clomid posted side suzs ranitidine warts difference between orlistat and allie online pharmacies for propecia finasteride r isomer of naproxen agent antifungal fluconazole deals on ecstasy alcohol effect on siezures medication online phentermine hydrocodine vicodin loratab sammy sosa steroids remeron usage abscess cipro norco aluminum floor jack has ritalin proven to be useful advair inhalers yellow speed amphetamines orange foods to increase male testosterone foetal alcohol genital abnormalities order tadalafil from u s phentermine online cheap diet pills court hearings on adderall alcohol assessments done in anoka county diovan glaucoma diy marijuana detox lorazepam diazepam half-life chart uk brand name for enalapril suicides related to oxycodone effexor depression anxiety research women richmond prempro lawsuit attorney generic soma carisoprodol alcohol ads on television hearing loss and oxycontin crystal methamphetamine hydrochloride recepie oxycontin death statistics from ativan withdrawal help metformin hc about high on medical marijuana school cheapest in uk viagra marijuana laws for calvert county maryland claritin coupon albuterol inhalation aerosol 17g dosage side effects of toprolxl and zocor soma watter cocaine naisal damage enalapril canine side effects seroquel syncope hypotension pcp lung scar tissue xalatan order agent alcohol based effectiveness hand washing b loss phentermine vitamin weight xisico b50 pcp alcohol s major effects on judgment safe alcohol limits valium and kids 1 onz of marijuana wedding premade punch with alcohol alcohol consuption in colleges in texas benefits alcohol arnold schwarzenegger smoking marijuana natural ecstasy generic versions of phentermine effects of alcohol article names of alcohol shots mcmahon medical marijuana canada marijuana shop 2444 levitra 10mg 3521 is fortical equivalent to miacalcin alcohol shop lisinopril 20mg photos otc amoxicillin herbal alternative viagra levitra herb prempro first prescribed prednisone canines calcium levels alcohol addiction resources tramadol tramadol hci online cheap pharmacy order phentermine without calling my doctor speakers on alcohol abuse risperdal and shivering xalatan medication robin williams alcohol father bob phendimetrazine lose weight loss diet pills avodart clomid diflucan dostinex glucophage c six am the heroin diaries minocycline acne vitamin c side effects metoprolol epinephrine 2028 20tablets yasmin ortho appendectomy alcohol effects in its life buspar compared to generics phentermine p over night delivery biohazard steroids buy cialis site generic drug for norvasc fioricet with codine what enhances the effects of adderall nicotine and its addicting ways 10mg 3.54 valium does cipro treat alpha-hemolytic strep curacao alcohol base isopropyl alcohol on face ultram purchase pepare tramadol for injection ciprofloxacin hydrochloride ophthalmic early history of cocaine heroin water pipes drug and alcohol counselor salary range phentermine while pregnant effects of alcohol on the kidneys medical marijuana san francisco general hospital ambien sliding doors autoignition temperature of butyl alcohol ecstasy baby drugs and facts about steroids hydrocodone mexico dui alcohol level ii classes picture zoloft compare prices for xenical take a look at trazodone antidepressant info miralax ativan ritalin lortab without prescription vicodin muscles in eye alcohol poisoning oxycodone serotonin syndrome merck lisinopril patient information zyprexa causing intolerance of alcohol ortho gardening book peter allegra esq nexium and rebate alcohol media player when the the opium war occur cheap price softtabs ecstasy effects on humans pcp sqq89 vicodin lortab online recommendations legal alcohol limit in michigan generic for neurontin contents in marijuana opium addict story valium pill identification false pcp readings caused by otc acid folic prenatal ecstasy deaths in canada cheapest phentermine official store adderall and alcohol interaction infomation on cocaine body effect of nicotine nicknames of steroids bone thugs ecstasy mp3 skelaxin 400mg legalize medical marijuana richardson presidential prescription marijuana pill marijuana vaporizers alcohol and drug treatment programs phentermine free shipping no prescription needed environmental hazards in cocaine didrex without prescription diuretics synthroid delivery florida online pharmacy phentermine elidel cancer warnings no prescription needed true phentermine tretinoin cream emollient .025 ativan for sedation for mri $50.00 phentermine different strains of marijuana pure indica lsd owlsley canadian paxil pharmacy buy offshore medications adderall phentermine prescription drug difference between hydrocodone and naproxen oklahoma drug and alcohol treatment psychological treatments for alcohol abuse estradiol dosage injection muscle testosterone xanax show up on drug tests nicknames for methamphetamine buy valium online uk alcohol abuse in alaska ritalin long term use paul cheney klonopin fibromyalgia oxycodone and acetaminophen harvesting outdoor marijuana pictures folic acid and conceiving twins ranitidine during pregnancy meridia 5 mg cocaine diarrhea side effects of lorcet pcp fungal prednisone thermoregulation cats and valium is marijuana an addictive substance going off effexor what nascar driver has viagra average cost of steroids history timeline of alcohol p450 enzymes tolerance alcohol viagra at a young age mixing prescription drug with alcohol xanax vs buspar alcohol consumption daily indication keflex pending ortho lawsuits oral ketamine alcohol christmas gift ideas bonds steroids photos coumadin vs warfarin wean off wellbutrin alcohol aldehydes ketones oxidation tojo ionamin loss weight information online information hemmingway alcohol texas revenge marijuana gov legal limits of alcohol folic acid 1000mcg tablet alcohol mint drink called mohana detrol oxycontin urinalysis results alcohol stil oxycontin deafness codeine cough promethazine syrup ecstasy warning signs marijuana matthew hashish massachusetts pregnancy using clomid fuel tank synthroid products otc vicodin detox health education marijuana lesson plan games afghanistan cultivation opium first agoraphobic nosebleed pcp torrent stamp out marijuana opium kathmandu ridalin mixed with alcohol alcohol response times zyban canada order anabolic steroids treating osteoporosis too much testosterone women is phentermine safe lorazepam adult dosage effexor xr panic disorder ultram and robaxin atorvastatin lipitor 134523038 safety data pregn overdose of zestril clinical psychologist evaluations for alcohol abuse marijuana detox clean green tea hashish produzione hydrocodone pill description cirrhosis alcohol diovan 160 25 hct wbr vioxx lawyer health care staffing adipex diet pill on line pharmacy vicodin dutch marijuana law skin test amoxycillin allergy coming down on cocaine attorney celebrex texas vioxx crack cocaine production phentermine used for gas alcohol 25mg morphine patches lamisil sore throat grow blueberry marijuana soma arts san francisco flonase panic attacks 5th of alcohol sideffects of cocaine tramadol er dosages vicodin no presciption no consultation fast facts about cocaine lisinopril identify tablet will phentermine cause positive results crack cocaine user profile ketamine clinical trials for depression medicine protonix adipex results b6 b12 and folic acid tylenol wikipedia tazorac benzoyl peroxide information of ortho evra soma club houston tx talking back to prozac closes thing to triphasil history of opium penicillin and bread mold websites for ambien ultravate cream diflucan outdated l tyrosine with wellbutrin auto dur 108 knox college galesburg marijuana kentucky statistics on methamphetamine use buy xanax with online consultation infant fetal alcohol wellbutrin and serotonin dogs using prednisone side effects of extra strength tylenol marijuana menu g 13 online pharmacy no prescription needed lasix what does propoxyphene do paul mccartney lsd ranitidine how long before it works albuterol ipratropium alcohol black out drug and alcohol abuse prevention safe injectable testosterone tylenol college scholarships prescription information vicodin yasmin rios shemale ortho tri cylcen lo spotting color buy consultation doctor hydrocodone no online 37 effects phentermine side drugs tobacco and alcohol no prescription needed for cheap adipex side effects from stopping adderall xr alcohol center christian treatment soma bright eyes show drug online prescription vicodin colesterol lsd types od steroids marijuana addiction progression marijuana not a drug types of rubbing alcohol zyban nicotine patch xanax and memory jagjit singh alcohol celexa for kids national clearing house alcohol and drug list of words for marijuana patanol eye alcohol treatment and california sibutramine urine drug tests singulair and dangers and pregnancy flomax bph buy vicodin no prescription doctor cod generic cetirizine zoloft discontinuing alcohol injections for treatment morton's neuroma blacks and testosterone ceftin drug information pill benicar fetal alcohol syndrome at birth passing alcohol urinalysis test yasmin headache tylenol simply sleep review clonazepam patient advice including side effects 300 mg wellbutrin with 20mg lexapro brains on cocaine sildenafil vs vardenafil furosemide without prescription overnight delivery glipizide how to administer tylenol 100 mg prednisone and wound healing low testosterone and immunity ritalin sr side effects atorvastatin cva treatment cialis generic tadalafil best price compare psilocybin therapy aromastat vs exercise propecia alcohol essay fetal syndrome 2005 cialis followup november post viagra fluconazole polymorphic esterification of alcohols clomid drug interaction codiene and hydrocodone drug interaction problems soma massage therapy ottawa online prescription renova tramadol zithromax depakote and lexapro sertraline mixed with fluoxetine anaprox naprosyn naproxen fentanol versus oxycodone cocaine hotline what is cetyl stearyl alcohol alabama vioxx lawyer hydrocodone overdose alcohol withdrawal phases sleepiness fosamax danger plavix reimbursed by medicare cost a ounce of cocaine 5mg finasteride alcohol and toxicology oxycodone used decay depakote tooth yasmin boland moon marijuana rolling tips cheap cialis find cleaning a marijuana glass pipe alcohol and substance abuse treatment cincinnati side effects of prednisone drug phenergan and pregnancy test addiction and wellbutrin miralax generic growing marijuana in wisconsin 15 mg valium preganacy and cocaine use robb celeb christina ricci prozac nation hypertension acetaminophen what does cephalexin capsol look like reasons not to use steroids buy generic fioricet quit marijuana tips uk cialis risperdal withdrawal symptom bupropion and hydroxycut heroin abuse recovery agencies co dovan and plendil mircette tablet cialis vardenafil alcohol drug abuse organization albuterol sulfate drug zoloft equivalent crimes drug alcohol alcohol addiction boards detox oxycontin medication cocaine engineer best morphine let's take a trip effects og marijuana alcohol law bartenders dartmouth symposium on drugs and alcohol celebrex and canker sores synthroid cytomel weight loss relapse and heroin and environment dms-iv alcohol dependence case sample alcohol treatment centers adolescents ohio positive steroids loratadine and black licorice weight gain advair singulair on line prescriptions cialis pills mike ditka levitra valium and vicodin addiction alcohol mare super weston clonazepam drug information medication taking amoxic clav with tylenol generic online zyrtec synthroid wellbutrin pravachol actos aricept india phentermine no prescription 2007 buy cheap pharmacy phentermine usa does tamoxifen cause liver cancer pregancy alcohol march for dimes alcohol 58 alcohol effects to the body prednisone and hair loss umaxppc yasmin amy hasan directions for taking viagra what kind of drug is cocaine penicillin pk picture of ativan tablet dr rehm alcohol on iv morphine to morphine sr conversion biaxin use in cats morphine generation jugend vintage crew burnout k dur dosage best price for lexapro meridia cost glyburide drug interactions vaniqa cost liquid morphine doseage dosages valium macrobid 100 mg rate of recovery for marijuana alcohol drink desert storm nicotine patchs success rate facts vs fiction on marijuana symptoms of paxil doxazosin mesylate synthroid and pain killers hydrocodone strenght alcohol and nerve damage official site of yasmin davidds buy online renova energy from lortab 12-session alcohol and drug program education touching cocaine urine can you drink alcohol on acyclovir negative effects of marijuana smoking baycol settlement secrets methamphetamine manufacture recent ecstasy deaths causes of alcohol different penicillin producing mushrooms alcohol absorption inhibitor heroin and circulatory problems heparin coumadin what makes anabolic steroids different contraindications of flexeril taking aciphex and always feeling hungry ortho innovations alcohol proof for various drinks oxazepam 600 mg ziac alcohol smoking kids esomeprazole drugs phenergan syrup codeine beer kegs alcohol content diazepam online usa pharmacy lysergic acid diethylamide actos plendil ranitidine long term impotence altace lorazepam pharmacology what is $80 of marijuana called cocaine and peripheral neuropathy drug interactions diazepam acetaminophen dog steroid affect of alcohol on a fetus omeprazole magnesium 100 n propoxyphene cialis singular interaction is cephalexin a canine antibiotic naproxen 500 mg side effects morphine er nicotine patch and pregnancy ovulatio using clomid alcohol handbook isopropyl costs of morphine maine marijuana boric acid buy cheap effects marijuana prevacid versus nexium imitrex vs generic brand preferred effects of androgel on levitra ritalin cocaine prescription drug to reduce alcohol cravings pregnant and tylenol pm prilosec dose for gerd seborrheic dermatitis and sprays containing alcohol azithromycin to treat gonnorhea naltrexone and ms marijuana legalization and the black market phentermine 40mg metrogel mole walgreens prescription for 100 mcg synthroid is ultracet a narcotic drug no alcohol good nights sleep synergism between alcohol and steroids tylenol televishon comercial heal my propecia side effects phentermine kosmix topic page when did cipro go generic asthma and ibuprofen sildenafil citrate and zocor oral testosterone zyban for sale drinking alcohol and nosebleeds side effects for xanax did cayce drink alcohol zyprexa hair loss wieght gain acetaminophen codeine 3 does zyrtec make a generic cocaine test remedies good effects and causes of alcohol access to alcohol cheap phentermine c o d marijuana tools loratadine online pharmacy alcohol high blood sugar sibutramine merida cheap domain phentermine p4p nsk ru ordering hydrocodone with no prescription ads on alcohol or tobacco make a alcohol still cyanocobalamin brand name neurontin multiple sclerosis similar pills yasmin ortho evra colorado louviers medical use marijuana legal symptons of withdrawel from cocaine clomid serophere clomiphene interesting facts ic paroxetine decatur alabama vioxx lawyer take ecstasy with sertraline metformin in cirrhosis ortho carolina huntersville marijuana plant fungus and disease teen alcohol abuse stories effects fenofibrate side tablet tricor cyclobenzaprine supplier adipex and prozac effects of ibuprofen and marijuana can ritalin be altered at home graph of teens using marijuana mircale gro tomato plant food marijuana naproxen apap paxil cr paroxetine ativan antianxiety drug ortho's isotox naltrexone odor low cost xenical phentermine 15mg fed ex overnight conseco jose steroids heat from water and isopropyl alcohol donating blood marijuana marijuana being used cialis viagra levitra tramadol clomiphene citrate first available cialis on line erectile dysfunction pill 19 vaniqa coupons anabolic steroids from thailand clarityne loratadine tramadol chlorhydrate supply price fluconazole lipitor interaction is there tylenol in oxycontin marijuana cabo hydrocodone 5-50 what does generic soma look like cheap online aciphex apg minocycline side effects fun fact about alcohol xanax time released alcohol drink receipt overnight prednisone delivery medroxyprogesterone and pregnancy planning flexaril valium social anxiety and ritalin order cheap bontril morphine pump trial michigan alcohol and tobacco commission alcohol and drug addiction jobs va hi gain alcohol program does wellbutrin change your metabolism pantoprazole 40 mg generic ciales tadalafil claritin prescription penicillin dosage kidney infection marijuana anal sex diabetes type 2 sugar alcohol alcohol houston treatment pictures of marijuana pounds free inpatient alcohol phoenix marijuana colonial celexa and 22central sleep apnea 22 glutamine and alcohol lsd spiral program marijuana used for adhd tramadol scheduling crack cocaine additions does klonopin cause vivid dreams ciprofloxacin side effects in dogs zocor and weight gain decriminalize marijuana canada arthritis pain reliever tylenol cocaine in blood stream by touching portland university drug alcohol studies alcohol and kidney damage oxycontin treatment withdrawal folic acid overdose during pregnancy clarinex doseage azithromycin and ear pain can pravachol lower blood pressure cle drug and alcohol seminar canine loratadine dosage medical reasons alcohol and native american intravitreal kenalog injections cocaine porn zyban xanax zyrtec tablet overuse albuterol inhaler analgesia morphine drug seroquel mixing alcohol and marijuana effects relationships klonopin subconscious vardenafil hcl 20mg 0.1mg clonidine effects elavil medication side sertraline oline myspace layout and alcohol actos information urinalysis blood alcohol purchase 30 mg phentermine no prescription nasonex for infants difference between paxil or lexapro mention types of alcohol ld 50 blood alcohol level alcohol is my anti drug over-the-counter amphetamines marijuana in afganistan injectable amoxicillin in canada lisinopril sildenafil paxil lawsuit vicodin foreign no prescription pharmacy after effexor loss weight picture of alcohol ads methylphenidate and d2 receptors actos phentermine imitrex marijuana grow gides arizona alcohol commission coumadin lab tests adderall drug test how long effects of heroin on babies nicotine gum health risk zyrtec gifts nizoral cream without a perscrition graphs on alcohol effects society for alcohol research no nicotine cigaretts winston dose of tetracycline for rat families dealing with alcohol article cocaine south america data trend women alcohol quantitiy pcp and lsd treatments after childbirth effects alcohol effexor xr buy oxycodone cod brand cialis name accupril lisinopril quinapril hcl klonopin withdrawal side effects buy in phentermine uk hctz 12.5 lisinopril 20mg compare crestor to lipitor information on alesse ngoc pham heroin pellets ibuprofen vs naproxen sodium oxford health care fioricet