marcus Posted February 18, 2008 Share Posted February 18, 2008 I'm trying to make a session-based "scratch card" type thing. I'm allowing 6 out of 9 slots to be scratched, and when the scratch amount reaches 6 no more links should appear. My problem is when there actually is six scratched the other three are shown as links, and they should be shown as text. http://img406.imageshack.us/img406/2688/scre94389lz6.jpg code <?php session_start(); $prizes = array('10000', '5000', '2500', '1000', 'blank', 'item', 'blank', '500', 'blank', 'blank'); if (!$_SESSION['clicked']) { $_SESSION['clicked'] = array('1', '2', '3', '4', '5', '6', '7', '8', '9'); $_SESSION['prizes'] = array(); foreach ($_SESSION['clicked'] as $clicked) { $_SESSION['prizes'][] = array_rand($prizes); } } $clickz = $_GET['click']; if ($clickz) { if (in_array($clickz, range(1, 9))) { $_SESSION['clicked'][$clickz - 1] = "clicked_" . $_SESSION['prizes'][$clickz - 1]; header("Location: card.php"); } } $go = $_GET['go']; if ($go) { session_destroy(); header("Location: card.php"); } echo "<table border=\"1\" cellpadding=\"3\" cellpadding=\"3\" width=\"20%\">\n"; echo "<tr>\n"; $x = 1; $_SESSION['y'] = 0; foreach ($_SESSION['clicked'] as $click) { $ex = explode("_", $click); if (count($ex) > 1) { $echo = $prizes[$ex[1]]; $_SESSION['y']++; } else { if ($_SESSION['y'] >= 6) { $echo = $_SESSION['prizes'][$click - 1]; } else { $echo = "<a href=\"card.php?click=" . $click . "\">" . $_SESSION['prizes'][$click - 1] . "</a>"; } } echo "<td align=\"center\" valign=\"middle\">" . $echo . "</td>\n"; if ($x == 3) { echo "</tr><tr>\n"; $x = 0; } $x++; } echo "</tr>\n"; if ($_SESSION['y'] >= 6) { echo "<tr><td colspan=\"3\" align=\"center\">You have finished scratching!<br><a href=\"card.php?go=1\">Another?</a></td></tr>\n"; } echo "</table>\n"; echo "<pre>\n"; print_r($_SESSION); ?> Quote Link to comment Share on other sites More sharing options...
marcus Posted February 19, 2008 Author Share Posted February 19, 2008 yay for 5 hours Quote Link to comment Share on other sites More sharing options...
uniflare Posted February 19, 2008 Share Posted February 19, 2008 sorry for delay, you have a logic error while checking the y session variable: there is no easy way to order an array by part of its value, so session['y'] is not reaching 6 before it gets to an unmarked variable. like so: loop1 = 1 (clicked_1) prize loop2 = 2 (clicked_2) prize loop3 = 2 (3) unmarked variable, will return with link as Y is still only "2" loop4 = 3 (clicked_3) prize loop5 = 4 (clicked_4) prize loop6 = 4 (6) unmarked variable, will return with link as Y is still only "4" loop7 = 5 (clicked_5) prize loop8 = 6 (clicked_6) prize loop9 = 6 (9) unmarked variable, will NOT return link as Y == "6". do you understand? you need to add another session variable to count the clicks as the user "clicks" and carry that number per page. ex: <?php session_start(); $prizes = array('10000', '5000', '2500', '1000', 'blank', 'item', 'blank', '500', 'blank', 'blank'); if (!@$_SESSION['clicked']) { // added @ symbol to suppress E_NOTICE (undefined index, variable does not exist) $_SESSION['clicked'] = array('1', '2', '3', '4', '5', '6', '7', '8', '9'); $_SESSION['prizes'] = array(); foreach ($_SESSION['clicked'] as $clicked) { $_SESSION['prizes'][] = array_rand($prizes); } } $clickz = @$_GET['click']; if ($clickz && $_SESSION['tclicks'] < 6) { // prevent user adding click request manually if (in_array($clickz, range(1, 9))) { $_SESSION['clicked'][$clickz - 1] = "clicked_" . $_SESSION['prizes'][$clickz - 1]; $_SESSION['tclicks']++; // tclicks added to bypass logic error header("Location: card.php"); } } $go = @$_GET['go']; // added @ symbol to suppress E_NOTICE (undefined index, variable does not exist) if ($go) { session_destroy(); header("Location: card.php"); } echo "<table border=\"1\" cellpadding=\"3\" cellpadding=\"3\" width=\"20%\">\n"; echo "<tr>\n"; $x = 1; $_SESSION['y'] = 0; foreach ($_SESSION['clicked'] as $click) { $ex = explode("_", $click); if (count($ex) > 1) { $echo = $prizes[$ex[1]]; } else { if (@$_SESSION['tclicks'] >= 6) { // tclicks added to bypass logic error $echo = $_SESSION['prizes'][$click - 1]; } else { $echo = "<a href=\"card.php?click=" . $click . "\">" . $_SESSION['prizes'][$click - 1] . "</a>"; } } echo "<td align=\"center\" valign=\"middle\">" . $echo . "</td>\n"; if ($x == 3) { echo "</tr><tr>\n"; $x = 0; } $x++; } echo "</tr>\n"; if (@$_SESSION['tclicks'] >= 6) { // tclicks added to bypass logic error echo "<tr><td colspan=\"3\" align=\"center\">You have finished scratching!<br><a href=\"card.php?go=1\">Another?</a></td></tr>\n"; } echo "</table>\n"; echo "<pre>\n"; print_r($_SESSION); ?> hope this helps. Quote Link to comment 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.