Help with submitting records into a database.

Discussion in 'PHP' started by shuffweb, Apr 11, 2008.

  1. #1
    Hi everyone, Im looking for a bit of help concerning a php problem ive stumbled upon.

    Scenario: For my final year project at uni I have to create an online attendance register system using PHP & MySQL which allows a lecturer to;

    1) login ->
    2) view the modules they teach (modules.php)->
    3) view a list of timetabled sessions for the chosen module (Labs, Tutorials, Lectures etc...) (session.php)->
    4) view a class list for the chosen session, containing a list of all the students timetabled for the session (student_session.php) -->
    5)submit a form which inserts the relevant values (student_id, session_id, week_no, attendance[0 or 1]) into a 'student_session' table.

    Problem:So far I have completed tasks 1-4 without any problems, however I am considerably stuck on task 5.

    Below is the relevant part of 'student_session.php', which displays a new row for every timetabled student, along with a check box to mark their attendance, and then passes it onto the form handler (submit_attendance.php)

    
    <?php	
    		include ('./includes/db_connect.php');
    										
    					$query  = 
    					"SELECT  CONCAT_WS(' ',student.first_name, student.last_name) AS name, student.student_id, student.course_id, module.module_id, module.course_id
    					FROM	student, module
    					WHERE student.course_id = module.course_id 
    					AND module.module_id = '{$_SESSION['module_id']}'
    					ORDER BY name ASC ";
    								
    					$result = mysql_query($query);
    					$num = mysql_num_rows($result);					
    
    					// If it ran OK, display the records.
    					if ($num > 0) 
    					
    					{ 
    						echo 
    							"<p>There are <strong>$num</strong> students timetabled to attend this session.</p>\n"
    							
    						;
    						
    
    						// Table header.
    						echo 
    							'<form method="post" action="submit_attendance.php">
    							<table class="modules" align="left" cellspacing="0" cellpadding="5" >
    								<tr>
    									<td class="moduletitle" colspan="2">Tick the box to record a students attendance</td>
    								</tr>
    						
    								<tr class="hover">
    									<td class="module" align="left"><b>Name</b></td>
    									<td class="module" align="left"><b>Present</b></td>
    								</tr>'
    						;
    					// Fetch and print all the records.
    					while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    					
    						{
    							echo 
    								'<tr class="module" align="left">
    									<td class="module" align="left">
    										<a href="./student_details.php? student_id=' . $row['student_id'] .'">' . $row['name'] .'</a>
    										<input type="hidden" name="student[]"  />
    									</td>
    									
    									<td class="module" align="left">
    										
    
    											<input type="checkbox" name="attendance[]" value="1" >
    												<img src="./images/green_tick.png" width="12px" height="12px"/>
    											<br>
    										
    									</td>
    									
    										
    								</tr>';
    							
    						}
    							echo 
    								'<tr>
    									<td>
    									
    									<input type="submit" class="submit"  name="submit" value="Submit" />
    									<input type="hidden" name="submitted" value="TRUE" />
    									</td>
    								</tr>
    								</table></form><br/>'
    							;
    							
    					// Free up the resources.						
    					mysql_free_result ($result); 
    
    					} 
    					
    					else // If it did not run OK.
    					{ 
    						echo
    							'<p class="error">No students are timetabled to attend this session.</p>'
    						;
    					}
    		
    				
    					?>
    
    Code (markup):
    submit_attendance.php - This is where the problem occurs, the desired result would be to enter the values of the $_SESSION['session_id'] and $_SESSION['week_no'] (to represent the teaching session: for later use to generate reports)
    and then the names of every student who was present.
    However all it does at present is enter one row into the 'student_session' table with null values for all fields except a '1' in the 'attendance' field.


    
    		<?php
    			session_start();
    		
    						include ('./includes/db_connect.php');													
    					
    					
    					
    					
    					if (isset($_POST['submitted'])) { // Check if the form has been submitted.
    					
    					
    					$a = isset( $_POST['attendance'] ) ? 1 : 0;
    	
    	
    		if (isset($_POST['student'])) {
    			$student = escape_data($_POST['student']);
    		} else {
    			$student = NULL;
    		}
    
    		if (isset($_SESSION['week_id'])) {
    			$week = escape_data($_SESSION['week_id']);
    		} else {
    			$week = NULL;
    		}
    		
    		if (isset($_SESSION['session_id'])) {
    			$sess = escape_data($_SESSION['session_id']);
    		} else {
    			$sess = NULL;
    		}
    
    	
    			
    		
    		}
    		
    		if ($a && $student && $week && $sess) { // If everything's OK.
    	
    		// Add the student_session to the database.
    		$query = "INSERT INTO student_session (attendance, student_id, week_id, session_id) VALUES ('$a', '$student', '$week', '$sess')";
    		if ($result = mysql_query ($query)) { // Worked.
    			echo '<p>The attendance has been recorded.</p>';
    		} else { // If the query did not run OK.
    			echo '<p><font color="red">Your submission could not be processed due to a system error.</font></p>'; 
    		}
    		
    		}
    	
    
    	
    	?>
    
    Code (markup):
    I know im nearly there, and im more than certain its just a case of a missing for loop or an array,
    sadly im more of a front end developer and I would really appreciate it if some kind PHP/MySQL guru would give me a hint or a push in the right direction. :)

    Thanks in advance - Dan
     
    shuffweb, Apr 11, 2008 IP
  2. m0nkeymafia

    m0nkeymafia Well-Known Member

    Messages:
    399
    Likes Received:
    12
    Best Answers:
    0
    Trophy Points:
    125
    #2
    print out the query before you run it
    also do a print_r on $_SESSION and $_POST to make sure those values are as you expect

    my guess is that if you do this the problem will be easy to spot
     
    m0nkeymafia, Apr 11, 2008 IP