We help IT Professionals succeed at work.

How to echo variables in a page outside of a function

Black Sulfur
Black Sulfur asked
on
143 Views
Last Modified: 2016-09-17
I have an edit form which should be showing users details in a form once they have logged in and want to edit their details. If I use code in the actual page itself I have no problem, but I have put everything in a function and can't use the variables inside the form. How can I do this?

The function:

function updateProfile($link){
	
	
	
	$sql = "SELECT user_firstname, user_lastname, user_email FROM `users` WHERE user_username = '{$_SESSION['username']}'";
		$result = $link->query($sql);
			if($result->num_rows === 1){
				while($row = $result->fetch_assoc()){
					
					$db_firstname = htmlentities($row['user_firstname']);
					$db_lastname = htmlentities($row['user_lastname']);
					$db_username = htmlentities($_SESSION['username']);
					$db_email = htmlentities($row['user_email']);
					$db_userid = $row['user_id'];
				}
			}

	
	$message = "";
	
	if(isset($_POST['updateprofile'])){
		
		if(empty($_POST['user_firstname'])) {
			
			$message .= "First name required<br>";
		}
		
		if(empty($_POST['user_lastname'])) {
			
			$message .= "Last name is required<br>";
		}
		
		if(empty($_POST['user_username'])) {
			
			$message .= "Username is required<br>";
		}
		
		if(empty($_POST['user_email'])) {
			
			$message .= "Email address required";
		}
		
		if(!filter_var($_POST['user_email'], FILTER_VALIDATE_EMAIL)) {

			$message .= "Email address invalid";
		}
		
		if(!empty($_POST['someinput'])) {
				
				$message .= "Be gone spam bot!";
			}
		
		if ($message) {
			
			$message = "<div class='alert alert-danger'><strong>There were errors in your form:<br></strong>" .$message. "</div>";
			
		} else {
			
			$user_firstname = $link->real_escape_string($_POST['user_firstname']);
			$user_lastname = $link->real_escape_string($_POST['user_lastname']);
			$user_username = $link->real_escape_string($_POST['user_username']);
			$user_email = $link->real_escape_string($_POST['user_email']);
			
			
			$update_profile = "UPDATE `users` SET user_firstname = '$user_firstname', user_lastname = '$user_lastname', user_username = '$user_username', user_email = '$user_email' WHERE user_id = '$db_userid'";
				
			if($result = $link->query($update_profile) === TRUE){
				
				$message = "<div class='alert alert-success>User profile updated</div>";
			}
			
		}
	
	}
	
	return $message;
	
	
}

Open in new window


The form:

<form action="" method="post" enctype="multipart/form-data">
	<div class="form-group">
		<label for="firstname">First name</label>
		<input type="text" class="form-control" name="user_firstname" value="<?php echo $db_firstname;?>"> </div>
	<div class="form-group">
		<label for="lastname">Last Name</label>
		<input type="text" class="form-control" name="user_lastname" value="<?php echo $db_lastname;?>"> </div>
	<div class="form-group">
		<label for="Username">Username</label>
		<input type="text" class="form-control" name="user_username" value="<?php echo $db_username;?>"> </div>
	<div class="form-group">
		<label for="form-group">Email</label>
		<input type="email" class="form-control" name="user_email" value="<?php echo $db_email;?>"> </div>
	<div class="form-group">
		<label for="form-group">Password</label>
		<input type="password" class="form-control" name="user_password"> </div>
	<div class="form-group">
		<label for="form-group">Repeat password</label>
		<input type="password" class="form-control" name="password_repeat"> </div>
	<div class="form-group">
		<input type="text" style="display:none" name="someinput"> </div>
	<div class="form-group">
		<input class="btn btn-primary" type="submit" name="updateprofile" value="Update details"> </div>
	<div>
		<?php echo updateProfile($link);?>
	</div>
</form>

Open in new window

Comment
Watch Question

Mukesh YadavFull Stack Developer
CERTIFIED EXPERT

Commented:
You can make variables global you want to use in form to echo their values and there is no need of while statement:
$row = $result->fetch_assoc();

Open in new window

will also work.
CERTIFIED EXPERT
Top Expert 2010

Commented:
You might consider creating an object outside of the function and update it inside the function.  This is a step towards OOP.

Author

Commented:
I want to try achieve it without using global as I believe it isn't great to use that.
Owner (Aidellio)
CERTIFIED EXPERT
Most Valuable Expert 2015
Commented:
This problem has been solved!
(Unlock this solution with a 7-day Free Trial)
UNLOCK SOLUTION

Author

Commented:
That worked a treat, thank you! :)