[Not Sent from Trinity College] Re: [Sahana_proj] POST variable array

Ralph Morelli ram at cs.trincoll.edu
Wed Mar 14 21:53:13 EDT 2007


Hi Turner,

I looked at your code but can't see anything wrong either.  It  
certainly looks like the $_POST does not contain the selected  
hospitals, as you expect it to.  The only thing I can suggest is  
putting the following debugging code into your program:

//    include_once $global['approot']."/mod/vr/ 
utility_functions.inc";   // Local Library: Contains dbgpost()
//    dbgpost($_POST);

The dbgpost($_POST) will display all the attributes and values in the  
$_POST.  Perhaps it will help you narrow down where the error is  
occurring.  To use it you need to include the utility_functions.inc  
file, which is contained in the vr module, which you should have.

Sorry to hear your vacation has been boring---but cheer up, there's  
more than a week to go.  I'm heading to Ft. Myers on Saturday!

-- ram

On Mar 14, 2007, at 3:35 PM, Turner Hayes wrote:

> Hello all,
>
>    I've been having a little trouble with one of our  
> functionalities. In editing information about a hospital staff  
> member (or adding a staff member), a user is asked to select from a  
> multi-select box which hospital(s) the particular staff member is  
> employed at. This is passed in the $_POST variable to a validation  
> function before any information is actually added to the database.  
> If there is something wrong with the input, the user is informed of  
> the problems and given a button to go back and try again. I want  
> the information that the user submitted to be preserved, so that  
> when he goes back to fix the errors, he doesn't have to input all  
> the information again. Unfortunately, the array of hospitals  
> doesn't seem to be appearing once the user is redirected from the  
> validation page. I'm probably missing something, so I thought hey,  
> the more eyes, the better.
>
> If you so desire, you can see the problem for yourself on our  
> server: http://sahana.cs.wesleyan.edu/index.php? 
> mod=hr&act=view_all_staff <http://sahana.cs.wesleyan.edu/index.php? 
> mod=hr&act=view_all_staff>
> Click the pencil icon (courtesy of PHPmyadmin) to edit a staff  
> member, then make sure to make a fatal error, such as inputing no  
> staff name or unchecking all specialty boxes. Click "Edit staff",  
> then click the button to go back when the error page comes up. You  
> will see that none of the previously selected hospitals are  
> selected (in fact none are selected). You will also see some  
> debugging printouts that inform you that no array of hospitals was  
> passed in $_POST. I'm attaching the relevant code for your perusal:  
> the relevant functions are shn_hr_edit_staff() and  
> shn_hr_validate_edit_staff() (lines 386-555).
>
> I sincerely apologize for the long, rambling email, but it's been  
> frustrating me. As you may guess, I've had an extraordinarily  
> boring vacation.
>
> Thank you,
>    Turner
> <?php
>
> /**
> * This file includes all the methods for staff management in  
> Hospital Registry
> *
> * LICENSE: This source file is subject to LGPL license
> * that is available through the world-wide-web at the following URI:
> *  {@link http://www.gnu.org/copyleft/lesser.html}
> *
> * @author Turner Hayes <thayes at wesleyan.edu>
> * @author Bach Vu Dao <bdao at wesleyan.edu>
> * @version 1.0
> * @package Sahana
> *
> */
>
>
> /**
> * Global variable containing much-used variables throughout Sahana.
> */
> global $global;
>
> /**
> * Library functions for validating forms
> */
> require_once $global['approot']."/inc/lib_validate.inc";
> /**
> * Database handilng functions
> */
> require_once $global['approot']."/inc/handler_db.inc";
> /**
> * Library functions for the hospital registry
> */
> include_once "lib_hr.inc";
>
> /**
>  * This function will display the add staff form in the hospital  
> registry
>  *
>  * @author Bach Dao
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  * @todo fix the hospital selection box so that it will select the  
> correct hospitals if there is a POST variable
>  * set for the hospital selection (right now PHP doesn't seem to be  
> passing it as an array)
>  */
> function shn_hr_add_staff(){
> 	echo "<br /><br />\$_POST:<br />";
> 	foreach($_POST as $key => $value) {
> 		if($value == "Array") {
> 			echo "(";
> 			foreach($_POST[$key] as $k => $v) {
> 				echo "$k => $v,";
> 			}
> 			echo ")";
> 		}
> 		else {
> 			echo "$key => $value<br />";
> 		}
> 	}
> 	echo "<br /><br />";
> 	
> 	echo "<h1>Add a new staff member</h1>";
> 	echo "<div id='formcontainer'>";
> 	
> 	shn_form_fopen("validate_add_staff");
> 	
> 	//general information
> 	shn_form_fsopen("General Information");
> 	echo "<div class='info'>";
> 	echo "This is general information about a staff member";
> 	echo "</div>";
> 	$extra_opts['req'] = true;
> 	shn_form_text(_("Name: "), 'name', 'size="50"', $extra_opts);  // 
> Get name
> 	shn_form_text(_("Email: "), 'email', 'size="50"');
>
> 	shn_form_fsclose();
> 	
> 	//specialty information
> 	shn_form_fsopen("Specialties Information");
> 	echo "<div class='info'>";
> 	echo "This is information about the staff specialties";
> 	echo "</div>";
> 	
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		$checked = null;
> 		if(isset($_POST[$spec])) {
> 			$checked = "checked";
> 		}
> 		shn_form_checkbox($spec, $spec, $checked);
> 	}
> 	shn_form_fsclose();
> 	
> 	//hospital assignment information
> 	shn_form_fsopen("Hospital Assignment Information");
> 	echo "<div class='info'>";
> 	echo "This is information about the staff hospital assignment";
> 	echo "</div>";
> 	$hosp_names = array();
> 	$hosp_names = get_field_data_from_db('shm_hospital', 'name');
>
> 	$selected_hosps = array();
> 	$selected_hosps = $_POST["hospital_names"];
>
> 	if($selected_hosps) {
> 		echo "<br /><br />\$selected_hosps:<br />";
> 		foreach($selected_hosps as $key => $value) {
> 			echo "$key => $value<br />";
> 		}
> 	}
> 	$extra_opts['value'] = $selected_hosps;
> 	shn_form_multi_select("hospital_names", $hosp_names, _("Hospitals:  
> "), 'multiple="multiple" size=5', $extra_opts);
>
> 	shn_form_fsclose();
> 	shn_form_submit("Add staff");
> 	shn_form_fclose();
> 	print ("</div>");
> 	
> }
>
> /**
>  * This function will validate if the the input to the add hospital  
> page is correct
>  *
>  * @author Bach Dao
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  */
> function shn_hr_validate_add_staff(){
> 	// echo "<br /><br />\$_POST:<br />";
> 	// foreach($_POST as $key => $value) {
> 		// if($value == "Array") {
> 			// echo "(";
> 			// foreach($_POST[$key] as $k => $v) {
> 				// echo "$k => $v,";
> 			// }
> 			// echo ")";
> 		// }
> 		// else {
> 			// echo "$key => $value<br />";
> 		// }
> 	// }
> 	// echo "<br /><br />";
>
>
> 	$name = $_POST["name"];
> 	$email = $_POST["email"];
> 	
> 	$specs = array();
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		if(isset($_POST[$spec])){
> 			$specs[] = $spec;
> 		}
> 	}
> 	
> 	if(!$specs) {
> 		$errors = true;
> 		add_error("You must select at least one specialty.");
> 	}
> 	
> 	$hospital_names = array();
> 	$hospital_names = $_POST["hospital_names"];
> 	
> 	echo "<br /><br />\$hospital_names:<br />";
> 	foreach($hospital_names as $key => $value) {
> 		echo "$key => $value<br />";
> 	}
> 	
> 	if(!$hospital_names) {
> 		$errors = true;
> 		add_error("You must select at least one hospital of employment");
> 	}
> 	
> 	if(!shn_validate_field($name, 'Staff Name', 75, true)) {
> 		$errors = true;
> 	}
> 	
> 	if(!shn_valid_email($email)){
> 		$errors = true;
> 		add_error("You did not enter a valid email address.");
> 	}
> 	
> 	if($errors) {
> 		display_errors();
> 		echo "<br /><br />";
> 		echo "<form method='POST' action='index.php?mod=hr&act=add_staff'>";
> 		shn_form_hidden($_POST);
> 		echo "<input type='submit' value='Click to go back and resubmit'>";
> 		echo "</form>";
> 	}
> 	else {
> 		shn_form_hidden($_POST);
> 		shn_hr_add_staff_process();
> 	}
> 	
> }
>
> /**
>  * This function will process the data sent from the  
> validate_add_staff function
>  *
>  * This will perform all the sql queries
>  * @author Bach Dao
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  */
> function shn_hr_add_staff_process(){
> 	global $global;
> 	
> 	
> 	$name = $_POST["name"];
> 	
> 	$email = $_POST["email"];
> 	
> 	$specs = array();
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		if(isset($_POST[$spec])){
> 			$specs[] = $spec;
> 		}
> 	}
> 	$hospital_names = $_POST["hospital_names"];
> 	
> 	$h_ids = array();
> 	//get the id of the hospital
> 	foreach($hospital_names as $h_name) {
> 		$h_id = get_field_from_id("shm_hospital", "name", $h_name,  
> "hospital_id");
> 		$h_ids[] = $h_id;
> 	}
> 	
> 	//add the staff into the database
> 	$sql = "INSERT INTO shm_staff SET name='$name', email='$email'";
> 	$result = $global["db"]->Execute($sql);
>
> 	if($result) {
> 		//get the id of the new staff
> 		$staff_id = get_field_from_id("shm_staff", "name", $name,  
> "staff_id");
>
> 		//for each spec add a new entry in the shm_specialdis
> 		foreach($specs as $specialty){
> 			$spec_id = get_field_from_id("shm_spec", "name", $specialty,  
> "spec_id");
> 			$sql = "INSERT INTO shm_specialdis SET staff_id='$staff_id',  
> spec_id='$spec_id'";
> 			$result = $global["db"]->Execute($sql);
> 			if(!$result) {
> 				echo "<b class='red'>Unable to assign to specialty $specialty.</ 
> b>\n<br />\n";
> 			}
> 		}
> 		
> 		//for each hospital add a new entry in the shm_staffdis
> 		foreach($h_ids as $h_id){
> 			$hospital = get_field_from_id("shm_hospital", "hospital_id",  
> $h_id, "name");
> 			$sql = "INSERT INTO shm_staffdis SET staff_id='$staff_id',  
> hospital_id='$h_id'";
> 			$result = $global["db"]->Execute($sql);
> 			if(!$result) {
> 				echo "<b class='red'>Unable to assign to hospital $hospital.</b> 
> \n<br />\n";
> 			}
> 		}
> 		echo "<b class='red'>Added staff member $name.</b>";
> 	}
> 	else {
> 		echo "<b class='red'>Unable to add staff member $name.</b>";
> 	}
> 	shn_hr_view_all_staff();
> }
>
>
> /**
> * Displays information about each staff member in the database
> *
> * This function displays a list of all staff members in the  
> database, with information such as name, email,
> * specialty (or specialties), and place(s) of employment.
> *
> * @author Turner Hayes <thayes at wesleyan.edu>
> * @access public
> * @todo add paging capabilities, similar to {@link  
> shn_hr_view_all_problems}
> */
>
> function shn_hr_view_all_staff() {
> 	global $global;
> 	
> 	echo "<h2><center>All hospital staff</center></h2>\n<br />\n<br /> 
> \n";
> 	
> 	$staff_ids = get_field_data_from_db("shm_staffdis", "staff_id");
> 	
> 	foreach($staff_ids as $staff_id) {
> 		$staff_name = get_field_from_id("shm_staff", "staff_id",  
> $staff_id, "name");
> 		$staff_email = get_field_from_id("shm_staff", "staff_id",  
> $staff_id, "email");
> 		$hosp_ids = get_field_data_from_db("shm_staffdis", "hospital_id",  
> null, "staff_id", $staff_id);
> 		$spec_ids = get_field_data_from_db("shm_specialdis", "spec_id",  
> null, "staff_id", $staff_id);
> 		
> 		echo "<h3>$staff_name<div align='right'><a href='index.php? 
> mod=hr&act=edit_staff&id=$staff_id'><img src='../theme/default/img/ 
> edit.png' border=0 /></a>&nbsp;&nbsp;<a href='index.php? 
> mod=hr&act=confirm_delete_staff&id=$staff_id'><img src='../theme/ 
> default/img/del.png' border=0 /></a></div></h3>\n<br />\n";
> 		echo "<b>Email: </b><a href='mailto:$staff_email'>$staff_email</a> 
> \n<br />\n<br />\n";
> 		echo "<b>Specialties:</b>\n<br />\n<br />\n";
> 		foreach($spec_ids as $spec_id) {
> 			$spec_name = get_field_from_id("shm_spec", "spec_id", $spec_id,  
> "name");
> 			echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$spec_name\n<br />\n";
> 		}
> 		echo "<br />\n<br />\n";
> 		echo "<b>Hospitals that employ $staff_name:</b>\n<br />\n<br />\n";
> 		foreach($hosp_ids as $h_id) {
> 			$hospital = get_field_from_id("shm_hospital", "hospital_id",  
> $h_id, "name");
> 			echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='index.php? 
> mod=hr&act=view_specific_hosp&id=$h_id'>$hospital</a>\n<br />\n";
> 		}
> 		
> 		echo "\n<br />\n<br />\n<br />\n";
> 	}
> }
>
>
>
> /**
> * Creates the confirmation message for deleting a staff member
> *
> * This function asks the user if they really do want to delete the  
> selected staff member, and provides
> * them with a submit button to confirm their decision.
> *
> * @author Turner Hayes <thayes at wesleyan.edu>
> * @access public
> */
>
> function shn_hr_confirm_delete_staff(){
> 	echo "<h1>Delete a staff member</h1>";
> 	$staff_id = $_GET["id"];
> 	$name = get_field_from_id("shm_staff", "staff_id", $staff_id,  
> "name");
> 	if($name) {
> 		$extra_opts['req_message']=false;
> 		shn_form_fopen("delete_staff", null, $extra_opts);
> 		echo "You are about to delete staff member <b>$name</b>. Are you  
> sure?<br /><br />";
> 		echo  "By clicking Delete, all information about the staff member  
> will be erased. This action is irreversible.<br /><br />";
> 		
> 		shn_form_hidden(array("id" => $staff_id));
> 		shn_form_submit("Delete staff member");
> 		shn_form_fclose();
> 	}
> 	else {
> 		echo "<b>There is no staff memeber with this id.</b>";
> 	}
> }
>
>
> /**
> * Executes the query on the database and deletes distribution  
> information for the staff member
> *
> * @author Turner Hayes <thayes at wesleyan.edu>
> * @access public
> */
>
> function shn_hr_delete_staff(){
> 	global $global;
> 	$staff_id = $_POST["id"];
> 	$name = get_field_from_id("shm_staff", "staff_id", $staff_id,  
> "name");
> 	
> 	$sql = "DELETE FROM shm_staff WHERE staff_id='$staff_id'";
> 	$result = $global['db']->Execute($sql);
> 	
> 	if($result){
> 		$sql = "DELETE FROM shm_staffdis WHERE staff_id='$staff_id'";
> 		$staffdis_del_result = $global['db']->Execute($sql);
> 		//we only want to delete all information about the staff member  
> if the staff member information itself has been
> 		//successfully deleted
> 		if(!$staffdis_del_result) {
> 			echo "<b> class='red'>This staff member's hospital distribution  
> information could not be deleted.</b><br /><br />";
> 		}
> 		$sql = "DELETE FROM shm_specialdis WHERE staff_id='$staff_id'";
> 		$specdis_del_result = $global['db']->Execute($sql);
> 		if(!$specdis_del_result) {
> 			echo "<b class='red'>This staff member's specialty distribution  
> information could not be deleted.</b><br /><br />";
> 		}
> 		echo "<b class='red'>The staff member $name has been successfully  
> deleted.</b>";
> 		shn_hr_view_all_staff();
> 	}
> 	else {
> 		echo "<b class='red'>The staff member $name could not be  
> deleted.</b>";
> 		shn_hr_view_all_staff();
> 	}
> }
>
>
> /**
>  * This function will display the edit staff form in the hospital  
> registry (staff id obtained from GET variable)
>  *
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  * @todo fix the hospital selection box so that it will select the  
> correct hospitals if there is a POST variable
>  * set for the hospital selection (right now PHP doesn't seem to be  
> passing it as an array)
>  */
>
> function shn_hr_edit_staff() {
> 	global $global;
> 	
> 	$staff_id = $_GET['id'];
> 	
> 	$staff_name = get_field_from_id("shm_staff", "staff_id",  
> $staff_id, "name");
> 	$staff_email = get_field_from_id("shm_staff", "staff_id",  
> $staff_id, "email");
> 	$staff_hosp_ids = array();
> 	$staff_hosp_ids = get_field_data_from_db("shm_staffdis",  
> "hospital_id", null, "staff_id", $staff_id);
> 	foreach($staff_hosp_ids as $s_h_id) {
> 		$h_name = get_field_from_id("shm_hospital", "hospital_id",  
> $s_h_id, "name");
> 		$staff_hosps[$h_name] = $h_name;
> 	}
> 	$staff_spec_ids = array();
> 	$staff_spec_ids = get_field_data_from_db("shm_specialdis",  
> "spec_id", null, "staff_id", $staff_id);
> 	
> 	$staff_specs = array();
> 	foreach($staff_spec_ids as $s_id) {
> 		$s_name = get_field_from_id("shm_spec", "spec_id", $s_id, "name");
> 		$staff_specs[$s_name] = $s_name;
> 	}
> 	
> 	echo "<h1>Edit information for staff member $staff_name</h1>";
> 	echo "<div id='formcontainer'>";
> 	
> 	shn_form_fopen("validate_edit_staff");
> 	
> 	//general information
> 	shn_form_fsopen("General Information");
> 	echo "<div class='info'>";
> 	echo "This is general information about a staff member";
> 	echo "</div>";
> 	$extra_opts['req'] = true;
> 	$extra_opts['value'] = $staff_name;
> 	shn_form_text(_("Name: "), 'name', 'size="50"', $extra_opts);  // 
> Get name
> 	$extra_opts['req'] = false;
> 	$extra_opts['value'] = $staff_email;
> 	shn_form_text(_("Email: "), 'email', 'size="50"', $extra_opts);
>
> 	shn_form_fsclose();
> 	
> 	//specialty information
> 	shn_form_fsopen("Specialties Information");
> 	echo "<div class='info'>";
> 	echo "This is information about the staff specialties";
> 	echo "</div>";
> 	
> 	$spec_names = array();
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		$checked = null;
> 		
> 		if(isset($staff_specs[$spec])) {
> 			$checked = "checked";
> 		}
> 		shn_form_checkbox($spec, $spec, $checked);
> 	}
> 	shn_form_fsclose();
> 	
> 	//hospital assignment information
> 	shn_form_fsopen("Hospital Assignment Information");
> 	echo "<div class='info'>";
> 	echo "This is information about the staff hospital assignment";
> 	echo "</div>";
> 	$hosp_names = array();
> 	$hosp_names = get_field_data_from_db('shm_hospital', 'name');
>
> 	$selected_hosps = array();
> 	$selected_hosps = ($_POST["hospital_names"]) ? $_POST 
> ["hospital_names"] : $staff_hosps;
> 	
> 	echo "<br />\$_POST['hospital_names'] = ".$_POST 
> ['hospital_names']."<br />";
> 	echo "<br /><br />\$staff_hosps:<br />";
> 	foreach($staff_hosps as $key => $value) {
> 		echo "$key => $value<br />";
> 	}
>
> 	if($selected_hosps) {
> 		echo "<br /><br />\$selected_hosps:<br />";
> 		foreach($selected_hosps as $key => $value) {
> 			echo "$key => $value<br />";
> 		}
> 	}
> 	$extra_opts['value'] = $selected_hosps;
> 	shn_form_multi_select("hospital_names", $hosp_names, _("Hospitals:  
> "), 'multiple="multiple" size=5', $extra_opts);
>
> 	shn_form_fsclose();
> 	shn_form_hidden(array("staff_id" => $staff_id));
> 	shn_form_submit("Edit staff");
> 	shn_form_fclose();
> 	print ("</div>");
> }
>
>
> /**
>  * This function will validate if the the input to the edit  
> hospital page is correct
>  *
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  */
>
> function shn_hr_validate_edit_staff(){
> 	// echo "<br /><br />\$_POST:<br />";
> 	// foreach($_POST as $key => $value) {
> 		// if($value == "Array") {
> 			// echo "(";
> 			// foreach($_POST[$key] as $k => $v) {
> 				// echo "$k => $v,";
> 			// }
> 			// echo ")";
> 		// }
> 		// else {
> 			// echo "$key => $value<br />";
> 		// }
> 	// }
> 	// echo "<br /><br />";
>
>
> 	$name = $_POST["name"];
> 	$email = $_POST["email"];
> 	$staff_id = $_POST['staff_id'];
> 	
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		if(isset($_POST[$spec])){
> 			$specs = true;
> 			break;
> 		}
> 	}
> 	
> 	if(!$specs) {
> 		$errors = true;
> 		add_error("You must select at least one specialty.");
> 	}
> 	
> 	$hospital_names = array();
> 	$hospital_names = $_POST["hospital_names"];
> 	
> 	// echo "<br /><br />\$hospital_names:<br />";
> 	// foreach($hospital_names as $key => $value) {
> 		// echo "$key => $value<br />";
> 	// }
> 	
> 	if(!$hospital_names) {
> 		$errors = true;
> 		add_error("You must select at least one hospital of employment");
> 	}
> 	
> 	if(!shn_validate_field($name, 'Staff Name', 75, true)) {
> 		$errors = true;
> 	}
> 	
> 	if(!shn_valid_email($email)){
> 		$errors = true;
> 		add_error("You did not enter a valid email address.");
> 	}
> 	
> 	if($errors) {
> 		display_errors();
> 		echo "<br /><br />";
> 		echo "<form method='POST' action='index.php? 
> mod=hr&act=edit_staff&id=$staff_id'>";
> 		shn_form_hidden($_POST);
> 		echo "<input type='submit' value='Click to go back and resubmit'>";
> 		echo "</form>";
> 	}
> 	else {
> 		shn_form_hidden($_POST);
> 		shn_hr_edit_staff_process();
> 	}
> 	
> }
>
>
> /**
>  * This function will process the data sent from the  
> validate_edit_staff function
>  *
>  * This will perform all the sql queries
>  * @author Turner Hayes <thayes at wesleyan.edu>
>  * @access public
>  * @todo improve the specialty and hospital distribution update, as  
> described in the code
>  */
> function shn_hr_edit_staff_process(){
> 	global $global;
> 	
> 	
> 	$name = $_POST["name"];
> 	
> 	$email = $_POST["email"];
> 	$staff_id = $_POST['staff_id'];
> 	
> 	$specs = array();
> 	$spec_names = get_field_data_from_db('shm_spec', 'name');
> 	foreach ($spec_names as $spec){
> 		if(isset($_POST[$spec])){
> 			$specs[] = $spec;
> 		}
> 	}
> 	$hospital_names = $_POST["hospital_names"];
> 	
> 	$h_ids = array();
> 	//get the ids of the hospitals
> 	foreach($hospital_names as $h_name) {
> 		$h_id = get_field_from_id("shm_hospital", "name", $h_name,  
> "hospital_id");
> 		$h_ids[] = $h_id;
> 	}
> 	
> 	//add the staff into the database
> 	$sql = "UPDATE shm_staff SET name='$name', email='$email' WHERE  
> staff_id='$staff_id'";
> 	echo "<br />\$sql:<br />$sql<br /><br />";
> 	
> 	$result = $global["db"]->Execute($sql);
>
> 	if($result) {
> 	
> 		/**This commented out section was an attempt at making the  
> editing more efficient; since we don't know
> 		*  how many specialties the edited staff member will have, we  
> need to remove all existing specialty
> 		*  distribution information before adding the new info (because  
> there may be more or fewer specialties
> 		*  after editing, meaning we can't simply update the entries in  
> shm_specialdis). It would be much better
> 		*  if we could update as many rows as possible, and delete any  
> remaining rows if they end up unneeded,
> 		*  or insert new rows if there weren't enough existing entries in  
> shm_specialdis. That's what this was meant
> 		*  to be, but it sadly didn't work. It simply deleted all entries  
> from shm_specialdis for the staff member.
> 		*/
> 		
> 		/*$current_dis_ids = get_field_data_from_db("shm_specialdis",  
> "dis_id", null, "staff_id", $staff_id);
> 		$num_current_specs = count($current_dis_ids);
> 		
> 		$i = 0;		//index to keep track of how many spec distributions  
> have been updated
> 		
> 		foreach($current_dis_ids as $dis_id) {
> 			$spec_id = get_field_from_id("shm_specialdis", "dis_id",  
> $dis_id, "specs[$i]");
> 			//if there are still distribution rows available to be updated  
> and all distribution fields can be updated
> 			//(that is, there are fewer or equal existing dis_ids than/to  
> the number new specialties)
> 			if(($i<$num_current_specs) && ($i < count($specs))) {
> 				$sql = "UPDATE shm_specialdis SET spec_id='$spec_id' WHERE  
> dis_id='$dis_id'";
> 				$result = $global['db']->Execute($sql);
> 				if(!$result) {
> 					echo "<b class='red'>Unable to update specialty $specs[$i].</b>";
> 				}
> 				$i++;
> 			}
> 			//all existing dis_ids have been updated, need to add new rows  
> until number of selected specialties
> 			else if($i < count($specs)) {
> 				$sql = "INSERT INTO shm_specialdis SET staff_id='$staff_id',  
> spec_id='$spec_id";
> 				$result = $global['db']->Execute($sql);
> 				if(!$result) {
> 					echo "<b class='red'>Unable to add specialty $specs[$i].</b>";
> 				}
> 			}
> 			//eliminate remaining specialties for this staff member (if the  
> new set of specialties is less than
> 			//the previous one)
> 			else if($i<$num_current_specs) {
> 				$sql = "DELETE FROM shm_specialdis WHERE dis_id=$dis_id";
> 				$result = $global['db']->Execute($sql);
> 				if(!$result) {
> 					echo "<b class='red'>Unable to remove specialty $specs[$i].</b>";
> 				}
> 			}
> 		} */
> 	
> 	
> 		//first delete all existing specialty distribution information  
> for this staff member
> 		$sql = "DELETE FROM shm_specialdis WHERE staff_id='$staff_id'";
> 		$result = $global['db']->Execute($sql);
> 		
> 		//then, for each spec add a new entry in the shm_specialdis table
> 		foreach($specs as $specialty){
> 			$spec_id = get_field_from_id("shm_spec", "name", $specialty,  
> "spec_id");
> 			$sql = "INSERT INTO shm_specialdis SET staff_id='$staff_id',  
> spec_id='$spec_id'";
> 			$result = $global["db"]->Execute($sql);
> 			if(!$result) {
> 				echo "<b class='red'>Unable to assign to specialty $specialty.</ 
> b>\n<br />\n";
> 			}
> 		}
> 		
> 		//first delete all existing hospital distribution information for  
> this staff member
> 		$sql = "DELETE FROM shm_staffdis WHERE staff_id='$staff_id'";
> 		$result = $global['db']->Execute($sql);
> 		
> 		//then, for each hospital add a new entry in the shm_staffdis table
> 		foreach($h_ids as $h_id){
> 			$hospital = get_field_from_id("shm_hospital", "hospital_id",  
> $h_id, "name");
> 			$sql = "INSERT INTO shm_staffdis SET staff_id='$staff_id',  
> hospital_id='$h_id'";
> 			$result = $global["db"]->Execute($sql);
> 			if(!$result) {
> 				echo "<b class='red'>Unable to assign to hospital $hospital.</b> 
> \n<br />\n";
> 			}
> 		}
> 		echo "<b class='red'>Edited staff member $name.</b>";
> 	}
> 	else {
> 		echo "<b class='red'>Unable to edit staff member $name.</b>";
> 	}
> 	shn_hr_view_all_staff();
> }
> ?>_______________________________________________
> Sahana_proj mailing list
> Sahana_proj at lists.trincoll.edu
> http://lists.trincoll.edu/cgi-bin/mailman/listinfo/sahana_proj

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.trincoll.edu/pipermail/sahana_proj/attachments/20070314/b2116dbf/attachment-0001.html


More information about the Sahana_proj mailing list