/    Sign up×
Community /Pin to ProfileBookmark

displaying form errors (foreach error)

I am having some problems trying to echo errors produced from a login page. This is the error that I keep receiving even after I tried adding values into the $errors property “Warning: Invalid argument supplied for foreach() in /var/www/classLogin.php on line 130”

[code=html]<?php
require ‘classLogin.php’;
$classLogin = new Login;

$classLogin->loginWithPostData();
?>
<!DOCTYPE html>
<html lang=”en”>
<head>
<title>Login</title>
</head>

<body>

<div class=”container”>

<form method=”post”>
<h2>Please sign in</h2>
<input type=”text” class=”form-control” name=”user_name” placeholder=”Email address” value=”<?php if(isset($_POST[‘user_name’])) { echo ($_POST[‘user_name’]);} ?>” >
<input type=”password” class=”form-control” name=”user_password” placeholder=”Password” autofocus>
<button name=”submit” type=”submit”>Sign in</button>
</form>

</div>

</body>
</html>
[/code]

[code=php]<?php

/**
* Class login
* handles the user login/logout/session
*/
class Login
{
/**
* @var object The database connection
*/
public $db_connection;

public $user_name = “”;
/**
* @var string The user’s password
*/
public $user_password = “”;
/**
* @var boolean The user’s login status
*/
public $user_is_logged_in = false;
/**
* @var array Collection of error messages
*/
public $errors = array();
/**
* @var array Collection of success / neutral messages
*/
public $messages = array();

/**
* the function “__construct()” automatically starts whenever an object of this class is created,
* you know, when you do “$login = new Login();”
*/
public function __construct()
{
// TODO: adapt the minimum check like in 0-one-file version

// create/read session
session_start();

// check the possible login actions:
// 1. logout (happen when user clicks logout button)
// 2. login via session data (happens each time user opens a page on your php project AFTER he has sucessfully logged in via the login form)
// 3. login via post data, which means simply logging in via the login form. after the user has submit his login/password successfully, his
// logged-in-status is written into his session data on the server. this is the typical behaviour of common login scripts.
$this->db_connection = new mysqli(‘localhost’, ‘root’, ‘1’, ‘test’);

// if user tried to log out
if (isset($_GET[“logout”])) {
$this->doLogout();
}
// if user has an active session on the server
elseif (!empty($_SESSION[‘user_name’]) && ($_SESSION[‘user_logged_in’] == 1)) {
$this->loginWithSessionData();
}
// if user just submitted a login form
elseif (isset($_POST[“submit”])) {
$this->loginWithPostData();
}
}

/**
* log in with session data
*/
private function loginWithSessionData()
{
// set logged in status to true, because we just checked for this:
// !empty($_SESSION[‘user_name’]) && ($_SESSION[‘user_logged_in’] == 1)
// when we called this method (in the constructor)
$this->user_is_logged_in = true;
}

/**
* log in with post data
*/
public function loginWithPostData()
{
if (!empty($_POST[‘user_pasword’])) { echo ‘Congrats’; }
// if POST data (from login form) contains non-empty user_name and non-empty user_password
if (!empty($_POST[‘user_name’]) && !empty($_POST[‘user_password’])) {

// create a database connection, using the constants from config/db.php (which we loaded in index.php)
if ($this->db_connection->connect_errno) {
echo “Concet Failed ” . $this->db_connection->connect_errno . “”;
}

// if no connection errors (= working database connection)
if (!$this->db_connection->connect_errno) {
echo “Connection Successful”;

// escape the POST stuff
$this->user_name = $this->db_connection->real_escape_string($_POST[‘user_name’]);

// database query, getting all the info of the selected user
$sql = “SELECT user_name
FROM members
WHERE user_name = ‘” . $this->user_name . “‘”;
$checklogin = $this->db_connection->query($sql);

// if this user exists
if ($checklogin->num_rows == 1) {
echo “<br> user ecsis”;

// get result row (as an object)
$result_row = $checklogin->fetch_object();

// check if the provided passwords fits
if ($_POST[‘user_password’] === $result_row->user_password) {

$this->user_is_logged_in = true;
echo ‘You are now logged in’;

} else {
$this->errors[] = “Wrong username password combination”;
}
}
}
}
elseif (empty($_POST[‘user_name’])) {
$this->errors[] = “Username field was empty.”;
} elseif (empty($_POST[‘user_password’])) {
$this->errors[] = “Password field was empty.”;
}

foreach ($errors as $error) {
echo “$error”;
}
}
[/code]

to post a comment
PHP

2 Comments(s)

Copy linkTweet thisAlerts:
@ginerjmMay 13.2014 — In the half dozen or so lines just before your foreach you referenced the errors array correctly.. Then in the foreach you completely changed - for the worst.

foreach ($this->errors as $error)
Copy linkTweet thisAlerts:
@ytesfay80authorMay 13.2014 — In the half dozen or so lines just before your foreach you referenced the errors array correctly.. Then in the foreach you completely changed - for the worst.

foreach ($this->errors as $error)[/QUOTE]


Thanks a lot, that was the problem.
×

Success!

Help @ytesfay80 spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 5.25,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @AriseFacilitySolutions09,
tipped: article
amount: 1000 SATS,

tipper: @Yussuf4331,
tipped: article
amount: 1000 SATS,

tipper: @darkwebsites540,
tipped: article
amount: 10 SATS,
)...