Jump to content

Invalid argument on foreach


graham23s

Recommended Posts

Hi Guys,

 

in my login code im implementing some error checking i have initialsed an array for the errors but when trying to display them i get an "Invalid argument supplied for foreach() "

 

<?php
session_start();

if(isset($_POST['submit']))
{
include("inc/dbconnection.php");

// vars //
$email = mysql_real_escape_string(trim($_POST['email']));
$password = mysql_real_escape_string(trim($_POST['password']));
$cookie = mysql_real_escape_string($_POST['remember']);

// initialise errors array //
$errors = array();

// check for empty fields use javascript to //
if(empty($email) || empty($password))
{

$errors = "<br /><div class=\"formerror2\"><img src=\"images/cross.gif\"> <b>You never filled in both login fields.</b></div>";

}

// see if the details are in the database //
$querylogin = "SELECT `id`,`email`,`password`,`first_name` FROM `fcp_customers` WHERE `email`='$email' AND `password`='$password' LIMIT 1";
$resultslogin = mysql_query($querylogin) or die (mysql_error());
$row = mysql_fetch_array($resultslogin);

// results from the login attempt //
$num = mysql_num_rows($resultslogin);

if($num != 1)
{

  include("inc/header.php");
  include("inc/navigation.php");
  
  // display errors //
  foreach($errors as $error)
  {
   print("test$error");
  }
  
  include("inc/footer.php");
  exit;
  
} //else {

  // there was results so update the login timer and set a session //
  $querytimer = mysql_query("UPDATE `fcp_customers` SET `lastloggedin`=now() WHERE `email`='$email' AND `password`='$password'");
  
  $_SESSION['id'] = $row['id'];
  $_SESSION['username'] = $row['username'];
  $_SESSION['first_name'] = $row['first_name'];
  $_SESSION['logged_in'] = 'yes'; 
  
  $cookie_id = $row['id'];
  $cookie_customername = $row['username'];
  
  // check if the remember is set value of remember is yes //
  if(isset($cookie))
  {
   // if it is set the set a cookie //
   setcookie("customers_cookie_id", $cookie_id, time()+3600);
   setcookie("customers_cookie_customer", $cookie_customername, time()+3600);
  }

  
  // redirect to members page //
  header("Location: account.php"); 
  die();  

//}

} // end isset //
?>
<?php
// include the database connection //
include("inc/dbconnection.php");
include("inc/online.php");
include("inc/header.php");
include("inc/navigation.php");
?>
<?php
// standard header //
print("<div class=\"subheader\"><div id=\"title\">Home > <span class=\"blue\">Login to your account</span></div>You can update your personal details and view orders in here. forgot your password? no worries recover it <a href=\"recoverpassword.php\">here</a>.</div>");

// check to see if the session exists //
if(isset($_SESSION['id']))
{
print("<div id=\"shopping_login_error\">You are already logged in.</div>");
include("inc/footer.php");
exit;
}

// login box //
print("<form action=\"login.php\" method=\"post\" name=\"loginform\" onSubmit=\"return logincheck()\">");
print("<table class=\"login_table\" border=\"1\" cellpadding=\"5\">");
print("<tr><td class=\"login_border\" align=\"right\">E-Mail:</td><td class=\"login_border\" align=left><input type=\"text\" size=\"40\" name=\"email\" /></td></tr>");
print("<tr><td class=\"login_border\" align=\"right\">Password:</td><td class=\"login_border\" align=left><input type=\"password\" size=\"40\" name=\"password\" /></td></tr>");
print("<tr><td class=\"login_border\" align=\"right\"> </td><td class=\"login_border\" align=left><input type=\"checkbox\" name=\"remember\" value='yes'>Remember me next time i log in.</td></tr>");
print("<tr><td class=\"login_border\" colspan=\"2\" align=\"right\"><input type=\"submit\" name=\"submit\" value=\"Login\" class=\"btn\"></td></tr>");
print("</table></form>\n");
?>
<?php
// include the footer //
include("inc/footer.php");
?>

 

i'm not sure what the problem could be.

 

thanks guys

 

Graham

Link to comment
Share on other sites

In the following few lines:

 // initialise errors array //
$errors = array();

// check for empty fields use javascript to //
if(empty($email) || empty($password))
{

$errors = "<br /><div class=\"formerror2\"><img src=\"images/cross.gif\"> <b>You never filled in both login fields.</b></div>";

}

You initiate the $error variable as an array. Then a few lines down you are reseting the $error variable as a string which is why you are getting the error message. You should add [] after $error to add the string to an array. So use the following instead:

$errors[] = "<br /><div class=\"formerror2\"><img src=\"images/cross.gif\"> <b>You never filled in both login fields.</b></div>";

Link to comment
Share on other sites

Also, you are doing the foreach only if rows returned does not = 1.  If there are 0 rows but the name/pw is wrong, your array will be empty.  Seems like you would want your $error checking outside of the loop where you check for valid accounts.

Link to comment
Share on other sites

Yeah there are a few problems with that code.

<?php
session_start();

if(isset($_POST['submit'])) {
include("inc/dbconnection.php");
// vars //
$email = mysql_real_escape_string(trim($_POST['email']));
$password = mysql_real_escape_string(trim($_POST['password']));
$cookie = mysql_real_escape_string($_POST['remember']);

if (!empty($email) && (!empty($password))) {
	if (eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
		// results from the login attempt //
		$querylogin = mysql_query("SELECT `id`,`email`,`password`,`first_name` FROM `fcp_customers` WHERE `email`='$email' AND `password`='$password' LIMIT 1") or die(mysql_error());
		if (mysql_num_rows($resultslogin) == 1) {
			// A row was found matching the user //
			$querytimer = mysql_query("UPDATE `fcp_customers` SET `lastloggedin`=now() WHERE `email`='$email' AND `password`='$password'");
			while ($row = mysql_fetch_array($querylogin)) {
				$_SESSION['id'] = $row['id'];
				$_SESSION['username'] = $row['username'];
				$_SESSION['first_name'] = $row['first_name'];
				$_SESSION['logged_in'] = 'yes'; 
				$cookie_id = $row['id'];
				$cookie_customername = $row['username'];
			}
			// check if the remember is set value of remember is yes //
			if(isset($cookie)) {
				// if it is set the set a cookie //
				setcookie("customers_cookie_id", $cookie_id, time()+3600);
				setcookie("customers_cookie_customer", $cookie_customername, time()+3600);
			}

			// redirect to members page //
			header("Location: account.php");
			exit;
		}
		else {
			return_error("Invalid e-mail and/or password provided.");
		}
	}
	else {
		return_error("Invalid e-mail address format provided.");
	}
}
else {
	return_error("E-mail and/or password fields were empty.");
}
}
function return_error($text) {
include("inc/header.php");
include("inc/navigation.php");
echo "<br /><div class=\"formerror2\"><img src=\"images/cross.gif\"> <b>{$text}</b></div>";
include("inc/footer.php");
exit;
}
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.