Solved

Loop through 3 times

Posted on 2014-09-29
10
211 Views
Last Modified: 2014-09-29
I'm trying to automate our patients meal choices for our galley.
When a patient comes in, a nurse will get their meal choice for the next three meals and enter them into the computer.
It will show up like this:

name    Room    meal1   meal2   meal3

What I need help with is if there is only one meal for a person (might be waiting for approval to change diet or they may be going home before the 2nd meal), I need the system to put two blank cells in the table so everything lines up right.

The code I have is this which works great if there are three meals entered.

$today_time = date ("H:i");
$food_query = "SELECT fo.*, me.*, mc.* FROM food AS fo INNER JOIN mealchoice AS mc ON fo.Choice=mc.MCID INNER JOIN meal AS me ON me.MID=fo.Meal WHERE Patient = '$nurse_id' AND FDate >= '$current_date' Order By FDate, MID ASC"; 
							$food_query_result = mysql_query($food_query);

							if (mysql_num_rows($food_query_result) > 0)
							{
                                                           $count = 0;
								while ($food_row = mysql_fetch_assoc($food_query_result))

								{
									$food_id = $food_row['FID'];
							                $Meal = $food_row['MealChoice'];
									$Choice = $food_row['MealChoice1'];
									$Comments = $food_row['Comments'];
							
                                                                             echo"<td>$Choice </td>\n";
							
								$count++;
    if ($count == 3)
      break;
}								
							}

Open in new window

0
Comment
Question by:BHUC
  • 5
  • 5
10 Comments
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 40350894
I can't see from the code how you would know the number of meals.  Would it be determinable by the number of rows returned from the query?

Also, you have a database conversion coming up.
0
 

Author Comment

by:BHUC
ID: 40350904
I only want it to show the next three... so if one meal is entered, it would show
Choice   Add Meal   Add Meal

If two were entered, it would show
Choice     Choice     Add Meal

They can only enter up to three in advance.

Does that make sense.

I'll read up on the data conversion
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 40350917
Not quite...  Let me ask the question another way.  Regarding this:

$food_query_result = mysql_query($food_query);

What would you expect to find in mysql_num_rows($food_query_result) ?
0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 

Author Comment

by:BHUC
ID: 40350931
If any meals have been entered, I would find the number of meals that have been entered and what they are.. if no meals have been entered for that patient, there wouldn't be anything...

BTW - thanks for always making me think.. I learn stuff by seeing it work and making changes.. you always make me understand what I am doing... I know enough to be dangerous but don't always understand why something is done a certain way.
0
 
LVL 110

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 40350960
I can't test this so you will have to.  I think it's correct or pretty close.

Since we expect no more than 3 rows, we set the query LIMIT to three.  And we have a three position array to hold the meal choices.  We initialize all three of the array positions to NULL.  As we retrieve the rows, we overwrite the NULL positions in the $meals array.  Finally, we use the three $meals array positions to create our <td> statements.
$today_time = date ("H:i");
$food_query = "SELECT fo.*, me.*, mc.* FROM food AS fo INNER JOIN mealchoice AS mc ON fo.Choice=mc.MCID INNER JOIN meal AS me ON me.MID=fo.Meal WHERE Patient = '$nurse_id' AND FDate >= '$current_date' Order By FDate, MID ASC LIMIT 3"; 
$food_query_result = mysql_query($food_query);

// SET THE MEAL CHOICES TO NULLS
$meals[1] = $meals[2] = $meals[3] = NULL;

// SET THE COUNTER TO ZERO
$cnt = 0;
while ($food_row = mysql_fetch_assoc($food_query_result))
{
    // INCREMENT THE COUNTER TO PROVIDE AN INDEX INTO THE MEAL CHOICES
    $cnt++;
    
    $food_id = $food_row['FID'];
    $Meal = $food_row['MealChoice'];
    $Choice = $food_row['MealChoice1'];
    $Comments = $food_row['Comments'];
    
    // SAVE THIS MEAL INFORMATION
    $meals[$cnt] = $Choice;
}

// CREATE THE TABLE DATA ELEMENTS
$out = NULL;
$out .= '<td>' . $meals[1] . '</td>';
$out .= '<td>' . $meals[2] . '</td>';
$out .= '<td>' . $meals[3] . '</td>';

// WRITE THE TABLE DATA TO THE BROWSER
echo $out;

Open in new window

0
 

Author Comment

by:BHUC
ID: 40350977
Ray...

1) I had the Limit 3 in there and took it out because I thought it was duplicating the count. Now I know!
2) Code works great - but how do I set the value to "Add Meal" so if nothing is there, it will print out the "Add meal" and the user can click on it to add the meal to the database?  Is it in the $meals[1] = $meals[2] = $meals[3] = NULL; line?

3) is there a difference in writing it out using the echo stuff I usually use vs how you did it? Or is it just a preference for a coder?
0
 

Author Comment

by:BHUC
ID: 40351005
Ray, I answered my own question in #2, but was wondering about preference in writing code with echo vs how you did it.
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 40351026
As long as you produce the correct output, either way is OK.  I like to write scripts that produce all of my variables before there is any browser output.  Then I can use templates (learn about HEREDOC) to generate the HTML documents.  I find that this makes it easier to change templates and style the output.  For a really good explanation of the ideas, get Matt Zandstra's book.  It's not 100% up-to-date, nor is it light reading, but it has a wealth of good information for programmers.
http://www.amazon.com/Objects-Patterns-Practice-Experts-Source/dp/143022925X/
0
 

Author Closing Comment

by:BHUC
ID: 40351031
Thank you so much!
0
 
LVL 110

Expert Comment

by:Ray Paseur
ID: 40351034
Glad to be able to help.  Thanks for the points and thanks for using E-E, ~Ray
0

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Does the idea of dealing with bits scare or confuse you? Does it seem like a waste of time in an age where we all have terabytes of storage? If so, you're missing out on one of the core tools in every professional programmer's toolbox. Learn how to …
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
The viewer will learn how to look for a specific file type in a local or remote server directory using PHP.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

726 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question