Solved

Posted on 2006-05-09
180 Views
Hello,

I have create a website for a car rental company in which the client can select from a form the pick up date-time and drop off date-time in order to send an enquiry to the company asking for a specific car. The pick up date and drop off date is selected from a pop up calendar that displays the values to the two texfields pickupdate and dropoffdate. The pickup time and drop off time are selected from a list menu.

The whole idea is after the user select the dates and times for renting a car, a list of all the cars appears together with the price for every car depending the season he select.

There are three seasons:
Low:      01/04 -15/06
01/10 – 31/10
Middle: 16/06 – 15/07
01/09- 30/09
High:     16/07 – 31/08

The total price of a car is been calculated taking into account the discount for the number of dates, the insurance, the season and which category is the car. I have create a function in php that is doing the calculation. The code is the following:

function calculate(\$x1,\$z2,\$y3,\$category) {

\$discount_low[0]=0;
\$discount_low[1]=0.30;
\$discount_low[2]=0.40;

\$discount_middle[0]=0;
\$discount_middle[1]=0.25;
\$discount_middle[3]=0.35;

\$discount_high[0]=0;
\$discount_high[1]=0.10;
\$discount_high[2]=0.15;

\$type_low[0]=25;
\$type_low[1]=30;
\$type_low[2]=45;
\$type_low[3]=50;

\$type_middle[0]=30;
\$type_middle[1]=35;
\$type_middle[2]=55;
\$type_middle[3]=60;

\$type_high[0]=46;
\$type_high[1]=53;
\$type_high[2]=75;
\$type_high[3]=80;

\$insurance[0]=5;
\$insurance[1]=5;
\$insurance[2]=5;
\$insurance[3]=10;
\$insurance[4]=10;

\$total_price=0;
\$discount=0;
\$total_days=0;
\$c=0;
\$b=0;
\$a=0;

\$total_days=(ceil(\$x1+\$z2+\$y3));

\$a=\$total_days-(floor(\$z2+\$y3));
\$b=\$total_days-\$a-(floor(\$y3));
\$c=\$total_days-\$a-\$b;

if ((3 <= \$total_days )&& (\$total_days <= 6)) //if the days are between 3 and 6
{\$discount=1; }//25% or 35%
if(\$total_days > 6)
{\$discount=2;} //15% or 35%
if (\$a>0) {
\$total_price=(floor(\$total_price+ \$a*\$type_low[\$category]*(1-\$discount_low[\$discount])+ (\$total_days*\$insurance[\$category]))*100)/100;
}

if (\$b>0){
\$total_price=(floor(\$total_price+ \$b*\$type_middle[\$category]*(1-\$discount_middle[\$discount])+ (\$total_days*\$insurance[\$category]))*100)/100;
}

if (\$c>0){
\$total_price=(floor(\$total_price+ \$c*\$type_high[\$category]*(1-\$discount_high[\$discount])+ (\$total_days*\$insurance[\$category]))*100)/100;

//(floor(total_price*100))/100;
}

return \$total_price;
//return discount;
}

Having creating the function that calculates the price, I wrote the code that will take the correct period and will assign the correct  arguments to the calculate function.

<form action="price_cars.php" method="post" name="form1" id="form1" onsubmit="return check(this);">
<input name="pickupdate" type="text" size="18" id ="pickupdate" value="pick up date" class="body"/>
<a href="javascript:showCal('Calendar3')"><img src="emver images/datebutton.jpg" alt="dates" border="0" /></a>

<select name="pickuphours" class="body">
<option selected value="pickuphour"> Pick up hour</option>
<option value="08:00">08:00</option>
<option value="09:00">09:00</option>
<option value="10:00">10:00</option>
<option value="11:00">11:00</option>
<option value="12:00">12:00</option>
<option value="13:00">13:00</option>
<option value="14:00">14:00</option>
<option value="15:00">15:00</option>
<option value="16:00">16:00</option>
<option value="17:00">17:00</option>
<option value="18:00">18:00</option>
<option value="19:00">19:00</option>
<option value="20:00">20:00</option>
</select>
<input name="dropoffdate" type="text" size="18" value="drop off date" class="body" id="dropoffdate"/>
<input name="date" type="text" size="4" value="days" class="body" id="date" style="position:absolute; left: 25px; top: 353px;"/>

<a href="javascript:showCal('Calendar4')"><img src="emver images/datebutton.jpg" alt="dates" border="0" /></a>

<select name="dropoffhours" class="body" >
<option selected value="dropoffhour"> Drop off hour</option>
<option value="08:00">08:00</option>
<option value="09:00">09:00</option>
<option value="10:00">10:00</option>
<option value="11:00">11:00</option>
<option value="12:00">12:00</option>
<option value="13:00">13:00</option>
<option value="14:00">14:00</option>
<option value="15:00">15:00</option>
<option value="16:00">16:00</option>
<option value="17:00">17:00</option>
<option value="18:00">18:00</option>
<option value="19:00">19:00</option>
<option value="20:00">20:00</option>
</select>
<input name="button"  type="image" id="button" src="emver images/quotemebutt.jpg" style="position:absolute; left: 146px; top: 354px;" />
</form>

<?

\$period[1][1]=mktime(0,0,0,4,01,2006);
\$period[1][2]=mktime(0,0,0,6,15,2006);
\$period[2][1]=mktime(0,0,0,6,16,2006);
\$period[2][2]=mktime(0,0,0,7,15,2006);
\$period[3][1]=mktime(0,0,0,7,16,2006);
\$period[3][2]=mktime(0,0,0,8,31,2006);
\$period[4][1]=mktime(0,0,0,9,01,2006);
\$period[4][2]=mktime(0,0,0,9,30,2006);
\$period[5][1]=mktime(0,0,0,10,01,2006);
\$period[5][2]=mktime(0,0,0,10,31,2006);

\$pickupperiod=0;
\$dropoffperiod=0;

\$days[1]=0;
\$days[2]=0;
\$days[3]=0;
\$days[4]=0;
\$days[5]=0;

\$a[0]=0;
\$b[0]=0;
\$c[0]=0;

//\$period_time="00:00:00";

\$pickupdate= \$_POST["pickupdate"];
echo "\n pick up user: " .\$pickupdate;
\$pd = explode('/', \$pickupdate);
\$pickuphour= \$_POST["pickuphours"];
\$ph = explode(':', \$pickuphour);
\$newpickupdate = mktime(\$ph[0], \$ph[1], 0, \$pd[1], \$pd[0], \$pd[2]);

\$dropoffdate= \$_POST["dropoffdate"];
echo "\n drop off user: " .\$dropoffdate;
\$dd = explode('/', \$dropoffdate);
\$dropoffhour= \$_POST["dropoffhours"];
\$dh = explode(':', \$dropoffhour);
\$newdropoffdate = mktime(\$dh[0], \$dh[1], 0, \$dd[1], \$dd[0], \$dd[2]);

echo "newdropoffdate: " .\$newdropoffdate;
echo "\n newpickupdate: " .\$newpickupdate;

if ((\$period[1][1] < \$newpickupdate) && (\$newpickupdate < \$period[1][2]))
{
\$pickupperiod=1;
echo "mpike period 1 \n";
//echo "\n period: ". \$period[1][1];
//echo "\n newpickupdate: ". \$newpickupdate;
//echo "\n period2: ". \$period[1][2];
}

if ((\$period[2][1] < \$newpickupdate) && (\$newpickupdate < \$period[2][2]))
{
\$pickupperiod=2;
echo "mpike period 2";
}

if ((\$period[3][1] < \$newpickupdate) && (\$newpickupdate < \$period[3][2]))
{
\$pickupperiod=3;
echo "mpike period 3";
}

if ((\$period[4][1] < \$newpickupdate) && (\$newpickupdate < \$period[4][2]))
{
\$pickupperiod=4;
echo "mpike period 4";
//echo "period: ". \$period[4][1];
//echo "newpickupdate: ". \$newpickupdate;
//echo "period2: \n". \$period[4][2];
}

if ((\$period[5][1] < \$newpickupdate) && (\$newpickupdate < \$period[5][2]))
{
\$pickupperiod=5;
echo "mpike period 5";
}

if ((\$period[1][1] < \$newdropoffdate) && (\$newdropoffdate < \$period[1][2]))
{
\$dropoffperiod=1;
echo "mpike drop off period 1";
}

if ((\$period[2][1] < \$newdropoffdate) && (\$newdropoffdate < \$period[2][2]))
{
\$dropoffperiod=2;
echo "mpike drop off period 2";
}

if ((\$period[3][1] < \$newdropoffdate) && (\$newdropoffdate < \$period[3][2]))
{
\$dropoffperiod=3;
echo "mpike drop off period 3";
}

if ((\$period[4][1] < \$newdropoffdate) && (\$newdropoffdate < \$period[4][2]))
{
\$dropoffperiod=4;
echo "mpike drop off period 4";
}

if ((\$period[5][1] < \$newdropoffdate) && (\$newdropoffdate < \$period[5][2]))
{
\$dropoffperiod=5;
echo "mpike drop off period 5";
}

if (\$pickupperiod-\$dropoffperiod==0) {

\$days[\$pickupperiod]=(   (\$newdropoffdate-\$newpickupdate)/3600  )/24;
//\$days[\$pickupperiod]= datediff(d, \$newdropoffdate, \$newpickupdate, \$dropoffhour, \$pickuphour );
//echo "days[\$pickupperiod]= ". \$days[\$pickupperiod];
//echo "newpickupdate:  ". \$newpickupdate;
//echo "dropoffdate:  ". \$newdropoffdate;
}

if (\$dropoffperiod-\$pickupperiod==1) {

\$days[\$pickupperiod]=( (\$period[\$pickupperiod][2] - \$newpickupdate)/3600 ) /24;
//\$days[\$pickupperiod]= datediff(d,\$period[\$pickupperiod][2], \$newpickupdate, \$period_time,\$pickuphour);
\$days[\$dropoffperiod]=( (\$newdropoffdate-\$period[\$newdropoffdate][1])/3600 ) /24;
//\$days[\$dropoffperiod]=datediff(d,\$newdropoffdate, \$period[\$newdropoffdate][1], \$dropoffhour,\$period_time);
//echo " \n". \$days[\$pickupperiod];
//echo "\n ". \$days[\$dropoffperiod];
}

if (\$dropoffperiod-\$pickupperiod==2) {

\$days[\$pickupperiod]=( (\$period[\$pickupperiod][2] - \$newpickupdate)/3600 )/24;
\$days[\$dropoffperiod]=( (\$newdropoffdate-\$period[\$newdropoffdate][1])/3600 )/24;
\$days[\$pickupdate+1]=( (\$period[\$newpickupdate+1][2] - \$period[\$newpickupdate+1][1])/3600 )/24;

//echo "days[\$pickupperiod]= ". \$days[\$pickupperiod];
//echo "days[\$dropoffperiod]= ". \$days[\$dropoffperiod];

}

\$a[0]=\$days[1]+\$days[5];
\$b[0]=\$days[2]+\$days[4];
\$c[0]=\$days[3];

echo "a: " . \$a[0];
echo "\n b: ". \$b[0];
echo "\n c: ". \$c[0];
echo "\n pickupperiod: " . \$pickupperiod;
echo "\n dropoffperiod: ". \$dropoffperiod;

?>

Most of the code is working but the problem I get is that sometimes when the user select specific dates it displays wrong price and some times 0 price.

An example is when the user select as pick up date 25/05/2006 and drop off date: 30/06/2006 it displayed for the first category total price of   £ 533685 which is wrong.

Another example is when the user select as pick up date 28/07/2006 and drop off date 31/08/2006 it displayed for the all the categories total price of   £0 which is wrong.

I am searching so many days what might going wrong and I can’t find anything. I would appreciate If somebody could help me and provide any suggestion or ideas.

Xenia

0
Question by:xenoula

LVL 1

Expert Comment

mySql db uses. yy/mm/dd date format (ie. 2006/05/09) .  take care of date format

0

Author Comment

I am not using a database
0

Author Comment

I manage to find where was the error and not it is working.
I had put wrong variables in the dates[];
0

Accepted Solution

PAQed with points refunded (500)

CetusMOD
Community Support Moderator
0

## Featured Post

### Suggested Solutions

Introduction Many web sites contain image galleries; a common design for these galleries includes a page with a collection of thumbnail images.  You can click on each of the thumbnail images to see the larger version of the image.  This is easily i…
Deprecated and Headed for the Dustbin By now, you have probably heard that some PHP features, while convenient, can also cause PHP security problems.  This article discusses one of those, called register_globals.  It is a thing you do not want.  …
Learn how to match and substitute tagged data using PHP regular expressions. Demonstrated on Windows 7, but also applies to other operating systems. Demonstrated technique applies to PHP (all versions) and Firefox, but very similar techniques will w…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.