farahZ Posted May 29, 2013 Share Posted May 29, 2013 hey,i dont know if my work is correct or no ! I am trying to create several session arrays, and fill them with user inputs the common between the session arrays will be the counter ($c) then using the counter, with the help of a for loop, i want to print the arrays !! here is the code.. please have a look, any mistake or notice please inform me <?php if (isset($_POST['add'])) { // check if an option has been selected if (empty($_POST['foodType'])) { echo 'You need to select some food!'; } else { if (!isset($_SESSION['foodTypes']) || !isset($_SESSION['Quantity']) || !isset($_SESSION['Calories']) || !isset($_SESSION['Unit'])) { // if the session is not yet created, create it now $_SESSION['foodTypes'] = array(); $_SESSION['Quantity']= array (); $_SESSION['Calories']=array(); $_SESSION['Unit']=array(); $c=0; } // check to see if the newly added food type is not already in the array if (in_array($_POST['foodType'], $_SESSION['foodTypes']) === false) { // The selected food item is not in the array // add the selected food item to total food array $_SESSION['foodTypes'][$c] = $_POST['foodType']; $_SESSION['Quantity'][$c]= $_POST['fooDquantity']; $_SESSION['Unit'][$c]=$_POST['quantityValue']; echo $c; $c++; //$foodQuan = $_POST['fooDquantity']; // $foodVal=$_POST['quantityValue']; // $_SESSION['Quantity'][$c]= $foodQuan ." ". $foodVal; } } } function print_array(){ if(!empty($_SESSION['foodTypes'])){ echo '<br>'. '<br>'. "Food Added:" . '<br>'; // display the current food list for ($i =0; $i <=$c; $i++) { $fcal=getCalories($_SESSION['foodTypes'][i], $_SESSION['Quantity'][i], $_SESSION['Unit'][i]); echo $_SESSION['foodTypes'][i] . ' ' . $fcal . ' calories' .'<br>'; $calories= $calories + $fcal; } /* $_SESSION['Calories']=$fcal; foreach ($_SESSION['foodTypes'] as $food) { $fcal=getCalories($food, $foodQuan, $foodVal); echo $food . ' ' . $fcal . ' calories' .'<br>'; $calories= $calories + $fcal; //$calories= calculate($_SESSION['foodTypes']); } */ echo 'The amount of Calories is now: ' . $calories, "\n"; createDropdown($_SESSION['foodTypes']); } ?> } Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/ Share on other sites More sharing options...
Jessica Posted May 29, 2013 Share Posted May 29, 2013 On 5/29/2013 at 7:12 PM, farahZ said: hey,i dont know if my work is correct or no ! Does it work? Are you really asking us to help with code and you don't even know if there's a problem? Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433034 Share on other sites More sharing options...
farahZ Posted May 29, 2013 Author Share Posted May 29, 2013 Hey Its not working and I have no clue why Problem with the counter cz I tried echoing it.. no value nothing Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433037 Share on other sites More sharing options...
requinix Posted May 29, 2013 Share Posted May 29, 2013 You aren't saving the value of $c and your for loop at the bottom is missing some $s. At least. Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433038 Share on other sites More sharing options...
farahZ Posted May 29, 2013 Author Share Posted May 29, 2013 Saving the value of $c?? What do u mean? Any quick example Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433039 Share on other sites More sharing options...
requinix Posted May 29, 2013 Share Posted May 29, 2013 You do stuff with $c but it never comes from the session or gets saved into the session. It starts at 0 every time. You don't even need it though if you moved your data around to something a little better. Try a structure like $_SESSION[food] = array( array( [type] => [quantity] => [calories] => [unit] => ), array( [type] => [quantity] => [calories] => [unit] => ), array( [type] => [quantity] => [calories] => [unit] => ), ... )If the food type is a string you can use it as array keys too so it's easier to tell if one has been... "used", or whatever... yet. Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433056 Share on other sites More sharing options...
farahZ Posted May 30, 2013 Author Share Posted May 30, 2013 i think i got your idea but how will be able to call them afterwards for printing? because each foodtype has its own type, quantity and unit.. thats the neat code.. i really dont know if i'm able to make myself clear if (isset($_POST['add'])) { // check if an option has been selected if (empty($_POST['foodType'])) { echo 'You need to select some food!'; } else { if (!isset($_SESSION['foodTypes']) || !isset($_SESSION['Quantity']) || !isset($_SESSION['Unit'])) { // if the session is not yet created, create it now $_SESSION['foodTypes'] = array(); $_SESSION['Quantity']= array (); $_SESSION['Unit']=array(); $c=0; } // check to see if the newly added food type is not already in the array if (in_array($_POST['foodType'], $_SESSION['foodTypes']) === false) { // The selected food item is not in the array // add the selected food item to total food array $_SESSION['foodTypes'][$c] = $_POST['foodType']; $_SESSION['Quantity'][$c]= $_POST['fooDquantity']; $_SESSION['Unit'][$c]=$_POST['quantityValue']; $c++; } } } if (isset($_POST['submit'])) { // check if the session exists, or if its empty if (!isset($_SESSION['foodTypes']) || empty($_SESSION['foodTypes'])) { echo 'No food in the list to submit!'; } else { $con=mysqli_connect("localhost","root","","inshapewebsite"); if (mysqli_connect_errno($con)) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $date=date("Y-m-d"); for ($i =0; $i <=$c; $i++) { $cal=getCalories($_SESSION['foodTypes'][i], $_SESSION['Quantity'][i], $_SESSION['Unit'][i]); $sql=""; $clid=$_SESSION['views'][0]; $q= $_SESSION['Quantity'][i]. ' ' . $_SESSION['Unit'][i]; $food=$_SESSION['foodTypes'][i]; $sql = "INSERT INTO fooddiary (ID, Date, DayTime, Food, Quantity, Calories) VALUES ('$clid', '$date', 'Lunch', '$food', '$q', $cal)"; var_dump($sql); $result = mysqli_query($con, $sql) or die(mysqli_error()); } $total= calculate($_SESSION['foodTypes'], $_SESSION['Quantity'], $_SESSION['Unit']); echo 'The total calories submitted is ' . $total, "\n"; unset($_SESSION['foodTypes']); mysqli_close($con); } function calculate($foodTypes, $Quantity, $Unit){ $calories = 0; for ($i =0; $i <=$c; $i++) { $fcal=getCalories($_SESSION['foodTypes'][i], $_SESSION['Quantity'][i], $_SESSION['Unit'][i]); $calories= $calories + $fcal; } return $calories; } function getCalories($food, $foodQuan, $foodVal) { // Create connection $con=mysqli_connect("localhost","root","","inshapewebsite"); // Check connection if (mysqli_connect_errno($con)) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $query = "SELECT Size, Calories FROM food where Food='$food' "; $result = mysqli_query($con,$query); $row = mysqli_fetch_array($result); if($foodVal=='Portion') { $fcal=$foodQuan*$row['Calories']; } else if($foodVal=='Grams') { $fcal=($foodQuan*$row['Calories'])/$row['Size']; } else $fcal=$row['Calories']; return $fcal; } Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433158 Share on other sites More sharing options...
farahZ Posted May 30, 2013 Author Share Posted May 30, 2013 as u have said before, the problem is with $c .. its not being changed or saved! Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433159 Share on other sites More sharing options...
mac_gyver Posted May 30, 2013 Share Posted May 30, 2013 by using three arrays, you are making three times too much code. do this - On 5/29/2013 at 8:54 PM, requinix said: If the food type is a string you can use it as array keys too so it's easier to tell if one has been... "used", or whatever... yet. and all your code will be simple - if (isset($_POST['add'])){ if (empty($_POST['foodType'])){ echo 'You need to select some food!'; } else { if(!isset($_SESSION['food'][$_POST['foodType']])){ $_SESSION['food'][$_POST['foodType']] = array('Quantity' => $_POST['fooDquantity'], 'Unit' => $_POST['quantityValue']); } } } Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433166 Share on other sites More sharing options...
farahZ Posted May 30, 2013 Author Share Posted May 30, 2013 and how can i print them and submit it? i.e. how can i extract their values??? using a for loop or foreach?? Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433167 Share on other sites More sharing options...
mac_gyver Posted May 30, 2013 Share Posted May 30, 2013 you would just use a foreach(){} loop. for your database query to get the calorie information, you should not run a query inside of a loop. since the foodTypes are the keys of the $_SESSION['food'] array, just get all the keys and run one query to get all the rows you need - $types = implode("','",array_keys($_SESSION['food'])); $query = "SELECT Food, Size, Calories FROM food where Food IN('$types')"; $result = mysqli_query($con,$query); $calories = array(); while($row = mysqli_fetch_assoc($result)){ $calories[$row['Food']] = $row; // store the rows using the Food as the key so that this information can be easily accessed when needed } as you loop over the $_SESSION['food'] array, the key (foodType) from this array can be used to get the corresponding calories/size information from the $calories array that was formed in the above code. Link to comment https://forums.phpfreaks.com/topic/278563-sessions-counter-problem/#findComment-1433168 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.