turpentyne Posted May 30, 2012 Share Posted May 30, 2012 I have no idea how to fix this problem. because I'm not even sure where the problem's coming from. The user completes a multi-page form. When they get to register2.php, they enter a discount code. register3.php takes that code, checks the database to see if it exists, and/or is active. But for some reason, when they enter a non-existent discount code, "BREAK" it doesn't work. There are a couple of other nonexistent codes that cause the same problem. What's happening is that the Grand_total and Final_total are zeroing out which makes the user get kicked to register4free.php because it thinks they've registered for a $0.00 /free class. If they enter no discount, or an existing discount, the dollar amount does what it's supposed to. ANd Here's the page: <?php /* start the session */ session_start(); // connect to database include("dbconnect.php"); $discount = mysql_escape_string($_POST['discount']); // this is the part causing problems. $donation = mysql_escape_string($_POST['donation']); //just a donation. irrelevant. $total = mysql_escape_string($_POST['total']); // the total cost of the class from previous page. discount is subtracted below /* start insert of math */ $discount_code = mysql_escape_string($_POST['discount']); //The discount code, if entered. //$selected_classes = array(217 => 1, 215 => 2); // i.e. How many of each class was selected. class_id => quantity $selected_classes = $_SESSION['s_filtered']; $grand_total = ""; // Built an array with information about each class, and what discount it can get. $classes = array(); foreach ($selected_classes as $class => $quantity) { $testquery = "SELECT * FROM `active_discounts` LEFT JOIN tbl_discount ON active_discounts.disc_id = tbl_discount.discount_id WHERE `code` = '{$discount_code}' AND `class_id` = '{$class}'"; $result = mysql_query($testquery); if (mysql_num_rows($result) > 0) { $discount_row = mysql_fetch_assoc($result); $discount_type = $discount_row['discount_type']; $discount_value = $discount_row['discount_amount']; $discount_name = $discount_row['discount_name']; $active_inactive = $discount_row['active_inactive']; $result = mysql_query("SELECT * FROM `tbl_workshops` WHERE `workshop_id` = '{$class}'"); $class_row = mysql_fetch_assoc($result); $class_name = $class_row['workshop_title']; $class_cost = $class_row['workshop_price']; $classes[$class]['workshop_title'] = $class_name; $classes[$class]['workshop_price'] = $class_cost; $classes[$class]['active_inactive'] = $active_inactive; $classes[$class]['discount_name'] = $discount_name; $classes[$class]['discount_type'] = $discount_type; $classes[$class]['discount_value'] = $discount_value; $classes[$class]['quantity'] = $quantity; } // The section below was supposed to be for when there was no discount. (nothing found in the active_discounts table) may be what's not working? else { $discount_value = "0"; $result = mysql_query("SELECT * FROM tbl_workshops WHERE workshop_id = '{$class}'"); if (mysql_num_rows($result) > 0){ $row = mysql_fetch_assoc($result); $grand_total += $row['workshop_price'] * $quantity; } else { // The class doesnt exist } } } // setting some constants to make the code more readible. define("OFF_TOTAL", 1); define("OFF_INDIVIDUAL", 2); define("PERC_TOTAL", 3); define("PERC_INDIVIDUAL", 4); define("OFF_FRIEND", 5); define("PERC_FRIEND", 6); // Now looping through each class to take off any valid discounts foreach ($classes as &$class) { if ($class['discount_type'] == OFF_INDIVIDUAL) { $total = $class_cost * $class['quantity']; $discount = $class['quantity'] * $class['discount_value']; $total = $total - $discount; $grand_total += $total; } if ($class['discount_type'] == PERC_INDIVIDUAL) { $total = $class_cost * $class['quantity']; // did say $total = $class['cost'] * $class['quantity']; $discount = ($class['discount_value'] / 100) * $class_cost; $total = $total - $discount; $grand_total += $total; } if ($class['discount_type'] == OFF_FRIEND) { $firstclass = $class_cost-$class['discount_value']; $total = $class_cost * $class['quantity'] - $class['discount_value']; $grand_total += $total; } if ($class['discount_type'] == PERC_FRIEND) { $discount = ($class['discount_value'] / 100) * $class_cost; $total = $class_cost * $class['quantity'] - $discount; $grand_total += $total; } } if($discount_type == PERC_TOTAL) { $total = mysql_escape_string($_POST['total']); $discount = ($class['discount_value'] / 100) * $total; $grand_total = $total - $discount; } if ($class['discount_type'] == OFF_TOTAL) { $discount_value = $class['discount_value']; $grand_total = ($class_cost * $class['quantity'])-$discount_value; } $_SESSION['s_total_price'] = $grand_total; // here's where it's kicking them to another page because the total is zero. if ($_SESSION['s_total_price'] == 0) { $_SESSION['$pay_or_not'] = "1"; header("Location: register4free.php"); echo $grand_total; } /* end insert of new math */ ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!--[if !IE]><!--> <link rel="stylesheet" type="text/css" href="css/master3.css"/> <!--<![endif]--> <!--[if IE 6]> <link rel="stylesheet" type="text/css" href="css/master3_ie9.css"/><![endif]--> <!--[if IE 7]> <link rel="stylesheet" type="text/css" href="css/master3_ie9.css"/><![endif]--> <!--[if IE 8]> <link rel="stylesheet" type="text/css" href="css/master3_ie9.css"/> <![endif]--> <!--[if IE 9]> <link rel="stylesheet" type="text/css" href="css/master3_ie9.css"/> <![endif]--> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="description" content="Description" /> <meta name="keywords" content="Keywords" /> <meta name="author" content="workshopsaz.org" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>Workshops for Youth and Families - Building character. Inspiring confidence.</title> <script type="text/javascript"> function showMe(id){ document.getElementById(id).style.visibility='visible' } timer=null function hideMe(){ clearTimeout(timer) timer=setTimeout("document.getElementById('div_name').style.visibility='hidden'",500) } </script> <script type="text/javascript">function randRange(data) { var newTime = data[Math.floor(data.length * Math.random())]; return newTime; } function toggleSomething() { var timeArray = new Array(200, 300, 150, 250, 2000, 3000, 1000, 1500); // do stuff $("#orho1").toggleClass("visible"); // end stuff clearInterval(timer); timer = setInterval(toggleSomething, randRange(timeArray)); } var timer = setInterval(toggleSomething, 1000); // 1000 = Initial timer when the page is first loaded</script> </script> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript"> // initialise variable to save cc input string var ccnumber_saved = ""; function checkLuhn(input) { var sum = 0; var numdigits = input.length; var parity = numdigits % 2; for(var i=0; i < numdigits; i++) { var digit = parseInt(input.charAt(i)) if(i % 2 == parity) digit *= 2; if(digit > 9) digit -= 9; sum += digit; } return (sum % 10) == 0; } </script> </head> <div id="containermain"> <? include("header.php"); ?> <div id="div_name" style="visibility:hidden;solid #aaa; z-index:5000;height:0px;position:relative;top:-96px;left:-55px;"><div style="background-color:#ffffff;width:100px;z-index:5001;padding:9px;-moz-border-radius: 17px; -webkit-border-radius: 17;border-radius: 17px;"> Hi! I'm ORHO! <br>Find out more about me here...</div> </div> <p><!-- start central content area --> <img src="images/head/head_reg4.gif" style="position:relative;left:-43px;top:5px;"/><br> <font face="georgia" size=5em><b>Step 4 - Credit Card Info</b></font><br><br> <form method="post" class="registration_form" action="register4.php" onsubmit="return myForm()"><br> <table border="0"> <?php $final_total = ($final_total + $donation); $_SESSION['s_total'] = $final_total; $reg_id = $_POST['reg_id']; $fname = mysql_escape_string($_POST['fname']); $lname = mysql_escape_string($_POST['lname']); $address = mysql_escape_string($_POST['address']); $address2 = mysql_escape_string($_POST['address2']); $city = mysql_escape_string($_POST['city']); $state = mysql_escape_string($_POST['state']); $zip = mysql_escape_string($_POST['zip']); $phone = mysql_escape_string($_POST['phone']); $fax = mysql_escape_string($_POST['fax']); $email = mysql_escape_string($_POST['email']); $hear = mysql_escape_string($_POST['hear']); $how1 = mysql_escape_string($_POST['how1']); $how2 = mysql_escape_string($_POST['how2']); $how3 = mysql_escape_string($_POST['how3']); $how4 = mysql_escape_string($_POST['how4']); $discount_name = mysql_escape_string($_POST['discount']); $how = $how1 . $how2 . $how3 . $how4; $query_insertItem = "UPDATE tbl_registration set reg_total_price = '$final_total', discount_used = '$discount_name' where reg_id=$reg_id"; $dberror = ""; $ret = mysql_query($query_insertItem); ?> <tr><td><?php if(!empty($_POST['discount'])){ if($discount_type == 4 || $discount_type == 3 || $discount_type == 6){echo "%";} else{echo "$";} echo " Discount: ";} ?> </td><td><?php if($active_inactive == 1){echo $discount_value;} elseif($discount_code !="") {echo "<font color='#990000'>inactive/invalid discount code</font>";} ?></td></tr> <tr><td><?php if(!empty($_POST['donation'])){ echo "Donation:";}?> </td><td> <?= $donation ?></td></tr> <tr><td>Total: </td><td>$<?= grand_total ?></td></tr> <tr><td>Credit Card: </td><td> </td></tr> <!-- save input string and strip out non-numbers --> <!-- restore saved string --> <tr><td> Credit Card #:</td><td><input type="text" name="ccnumber" id="ccnumber" size="46" onblur="ccnumber_saved = this.value; this.value = this.value.replace(/[^\d]/g, ''); if(!checkLuhn(this.value)) { alert('Sorry, that is not a valid number - please try again!'); this.value = ''; }this.className='reg_off';" onfocus=" if(this.value != ccnumber_saved) this.value = ccnumber_saved;this.className='reg_live'; "> </td></tr> <tr><td>Expiration:</td><td> </td></tr> <tr><td>Card Verification:</td><td><input type="text" name="cc_code" id="cc_code" size="4" onfocus="this.className='reg_live';" onblur="this.className='reg_off';" ><font size=2> (the 3 digits on back of card)</font></td></tr> <tr><td>Name on Card:</td><td><input type="text" name="cc_name" id="cc_name" size="46" onfocus="this.className='reg_live';" onblur="this.className='reg_off';" ></td></tr> </table><br /><br /> <!-- end central content area --> </div> </p></div> </div> <div class="clearfooter"></div> </div><!—End Container—> <div id="footer"><? include("footer.html"); ?></div> Quote Link to comment https://forums.phpfreaks.com/topic/263365-discount-issue-ive-lost-my-mind/ Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.