Hey allen,

Momenteel heb ik een tutorial gevolgd voor een mysqli register/login form alleen loop ik vast wanneer ik ga inloggen. want ik kom niet verder wanneer ik een gebruiker wil inloggen.



Register Form

<?php require "php_conectie/Connectie.php";?>
<?php
	if(isset($_POST['Register'])){
		
		session_start();
		$FName = $_POST['First_Name'];
		$LName = $_POST['Last_Name'];
		$Email = $_POST['Email'];
		$PW = $_POST['Password'];
		
		$StorePassword = password_hash($PW, PASSWORD_BCRYPT, array('cost'=> 10));
		
		$sql = $con->query("INSERT INTO user (Fname, Lname, Email, Password)Values('{$FName}', '{$LName}', '{$Email}', '{$StorePassword}')");	
		
		header('Location: Login.php');
	}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Register</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
	<div class="Container">
    	<div class="Header"></div>
        <div class="Menu">
        	<div id="Menu">
            	<nav>
                	<ul class="cssmenu">
                    	<li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
        <form action="" method="post" name="RegisterForm" id="RegisterForm">
            	<div class="FormElement">
                	<input name="First_Name" type="text" required="required" class="TField" id="First_Name" placeholder="First Name">
                </div>
                <div class="FormElement">
                	<input name="Last_Name" type="text" required="required" class="TField" id="Last_Name" placeholder="Last Name">
                </div>
                <div class="FormElement">
                	<input name="Email" type="email" required="required" class="TField" id="Email" placeholder="E-mail">
                </div>
                <div class="FormElement">
                	<input name="Password" type="password" required="required" class="TField" id="Password" placeholder="Password">
                </div>
                <div class="FormElement">
                	<input name="Register" type="submit" class="button" id="Register" value="Register">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Login

<?php require "php_conectie/Connectie.php";?>
<?php
	if(isset($_POST['LogIn'])){
		
		$EM = $_POST['email'];
		$PW = $_POST['password'];
		
		//$result = $con->query("select * from user where Email='$EM' AND Password='$PW'");
		$result = $con->query("select * from user where Email='$EM'");
		
		$row = $result-> fetch_array(MYSQLI_BOTH);
		
		if(password_verify($PW, $row['Password'])){
		
			session_start();
			$_SESSION["UserID"] = $row['UserID'];
			header('Location: Account.php');
		}else{
			session_start();
			$_SESSION["LogInFail"] = "Yes";	
		}
	}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>LogIn</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
	<div class="Container">
    	<div class="Header"></div>
        <div class="Menu">
        	<div id="Menu">
            	<nav>
                	<ul class="cssmenu">
                    	<li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
            <form name="form1" method="post" action="">
            <?php if(isset($_SESSION["LogInFail"])){?>
				<div class="FormElement">LogIn Failed! Please Try Again.</div>
			<?php } ?>
                <div class="FormElement">
                	<input name="email" type="email" required="required" class="TField" id="email" placeholder="E-mail">
                </div>
                <div class="FormElement">
                	<input name="password" type="password" required="required" class="TField" id="password" placeholder="Password">
                </div>
                <div class="FormElement">
                	<input name="LogIn" type="submit" class="button" id="LogIn" value="LogIn">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Account

<?php require "php_conectie/Connectie.php";?>
<?php
	session_start();
	if(isset($_SESSION["UserID"])){
	}else{
		//header('Location: Login.php'); // hier loop ik vast
	}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Account</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
	<div class="Container">
    	<div class="Header"></div>
        <div class="Menu">
        	<div id="Menu">
            	<nav>
                	<ul class="cssmenu">
                    	<li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                        <li><a href="LogOut.php">LogOut</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">Your Account<br>
			<br><?php echo $_SESSION["UserID"];?>
      </div>
        <div class="Footer"></div>
     </div>
</body>
</html>


Logout

<?php require "php_conectie/Connectie.php";?>
<?php
	session_start();
		unset($_SESSION["UserID"]);
		session_destroy();
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>LogOut</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
	<div class="Container">
    	<div class="Header"></div>
        <div class="Menu">
        	<div id="Menu">
            	<nav>
                	<ul class="cssmenu">
                    	<li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">You have Logged Out!<br>
			<br><?php echo $_SESSION["UserID"];?>
      	</div>
        <div class="Footer"></div>
</div>
</body>
</html>


Update Account

<?php require "php_conectie/Connectie.php";?>
<?php
	session_start();
	if(isset($_SESSION["UserID"])){
	}else{
		header('Location: Login.php'); // hier loop ik vast
	}
?>
<?php
	$User = $_SESSION["UserID"];
	$result = $con->query ("select * from user where UserID='$User'");
	$row = $result->fetch_array(MYSQLI_BOTH);
	session_start();
	
	$_SESSION["FirstName"] = $row['Fname'];
	$_SESSION["LastName"] = $row['Lname'];
	$_SESSION["Email"] = $row['Email'];
	$_SESSION["PW"] = $row['Password'];
?>
<?php
	if(isset($_POST['Update'])){
		
		$UpdateFName = $_POST['FirstName'];
		$UpdateLName = $_POST['LastName'];
		$UpdateEmail = $_POST['Email'];
		$UpdateFPassword = $_POST['Password'];
		
		$sql = $con->query("UPDATE user SET Fname = '{$UpdateFName}', Lname = '{$UpdateLName}', Email='{$UpdateEmail}', Password='{$UpdateFPassword}' where UserID= $User");
		
		header('Location: UpdateAccount.php');
		
	}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>UpdateAccount</title>

<link href="css/Master.css" rel="stylesheet" type="text/css">
<link href="css/Menu.css" rel="stylesheet" type="text/css">

</head>

<body>
	<div class="Container">
    	<div class="Header"></div>
        <div class="Menu">
        	<div id="Menu">
            	<nav>
                	<ul class="cssmenu">
                    	<li><a href="Register.php">Register</a></li>
                        <li><a href="Login.php">LogIn</a></li>
                    </ul>
                </nav>
           </div>
        </div>
        <div class="LeftBody"></div>
        <div class="RightBody">
        	<form name="form1" method="post" action="">
                <div class="FormElement">
                  <input name="FirstName" type="text" required="required" class="TField" id="FirstName" value="<?php echo $_SESSION["FirstName"]; ?>">
                </div>
                <div class="FormElement">
            	    <input name="LastName" type="text" required="required" class="TField" id="LastName" value="<?php echo $_SESSION["LastName"]; ?>">
                </div>
                <div class="FormElement">
        	        <input name="Email" type="email" required="required" class="TField" id="Email" value="<?php echo $_SESSION["Email"]; ?>">
                </div>
                <div class="FormElement">
    	            <input name="Password" type="password" required="required" class="TField" id="Password" value="<?php echo $_SESSION["PW"]; ?>">
                </div>
                <div class="FormElement">
 	               <input name="Update" type="submit" class="button" value="Update Info">
                </div>
            </form>
        </div>
        <div class="Footer"></div>
</div>
</body>
</html>
want ik kom niet verder wanneer ik een gebruiker wil inloggen.

En hoe komt dit tot uiting? Het inloggen lukt niet? Je komt in een oneindige loop terecht? Je krijgt een foutmelding? Wat gebeurt er wat je niet verwacht?

Na een header('Location: ...'); hoort trouwens altijd een exit; te staan.
Thomas van den Heuvel op 14/09/2015 22:17:37

want ik kom niet verder wanneer ik een gebruiker wil inloggen.

En hoe komt dit tot uiting? Het inloggen lukt niet? Je komt in een oneindige loop terecht? Je krijgt een foutmelding? Wat gebeurt er wat je niet verwacht?


Ik krijg een scherm met helemaal niets erin. Geen errors, geen meldingen. ook niet aan de hand van een echo melding
Dan zou ik me eerst eens richten op het melden van foutmeldingen:

<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>
- Aar - op 14/09/2015 22:29:58

Dan zou ik me eerst eens richten op het melden van foutmeldingen:

<?php
error_reporting(E_ALL);
ini_set('display_errors',true);
?>


Fatal error: Call to a member function query() on a non-object in /home/i296429/domains/i296429.iris.fhict.nl/public_html/page/WP31/Week1/Login.php on line 13

Wat staat er (met gecensureerde inloggegevens!) in php_conectie/Connectie.php?
- Aar - op 14/09/2015 22:34:46

Wat staat er (met gecensureerde inloggegevens!) in php_conectie/Connectie.php?



// Verbinden met MySQL Database 
	$host = "localhost"; // Welke server : localhost 
	$username = "Gebruikersnaam"; // Gebruikersnaam 
	$password321 = "Wachtwoord"; // Wachtwoord 
	$dbnaam = "Naam database"; // Naam van de database 
	

$con = mysqli_connect("$host", "$username", "$password321", "$dbnaam");

Ah, ik zie het al. Je gebruikt procedureel en en object-oriënted door elkaar heen, en dat kan niet. Zie ook deze voorbeelden.

Gebruik dan dit als connectie:
<?php
// aanmaken variabelen hier.
$con= new mysqli($host, $username, $password321, $dbnaam);
?>

Verder is er op lijn 9 van de login nog een SQL-injection mogelijk.
> Je gebruikt procedureel en en object-oriënted door elkaar heen, en dat kan niet.

Kan prima (zie documentatie PHP). Hooguit is het niet aan te bevelen, maar het zou wel gewoon moeten werken.
Is dit zo? Want die melding die hij vertelt, duidt er toch echt op dat de instance ontbreekt. of zou elke mysqli_*()-functie dan gewoon werken via die OO-instance?
Volgens mij zit het probleem hierin:

In het formulier staat

<input name="Email" ...>

en in het script wordt verwezen naar

$EM = $_POST['email'];

Aangezien array indices case sensitive zijn, bestaat $_POST['email'] niet; het moet $_POST['Email'] zijn.

> of zou elke mysqli_*()-functie dan gewoon werken via die OO-instance?
Jep.

Reageren