Ik ben een login script aan het bouwen, maar ik krijg altijd deze error (Call to a member function on a non-object), dit is mijn code
<?php
	
	if ($_SERVER['REQUEST_METHOD']=='POST'){ 

	require_once('../connect.php');
	dbconnect();
	$username = $_POST['username'];
	$password = sha1($_POST['password']);
	
	$sql = "SELECT username FROM login WHERE username = '.$username.' AND password = '.$password.'";
	$result = mysql_query($sql);
	
	if($result->mysql_num_rows() <1){
		/* Login mislukt */
		echo ' De login is mislukt.';
		
	}else{
		/*login gelukt*/
		echo 'De login is gelukt.';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Untitled Document</title>
</head>

<body>
	<form method="post" action="login.php"> 
	<table border="1">
		<tr>
			<td>Username:</td>
			<td><input type="text" name="username" /><br /> </td>
		</tr>
		<tr>
			<td>Password:</td>
			<td><input type="text" name="password" /><br /> </td>
		</tr>
			<td colspan="2"><input type="submit" name="knop" value="Versturen" /> </td>
		</tr>
	</table>
	</form>
</body>
</html>

Ziet iemand de fout?

Alvast bedankt
Je roept ergens een functie van een variable aan, alleen is dit geen object.
Hier gebruik je geen objecten, dus misschien in connect.php?

En je $sql klopt niet met quotes ed, zoiets moet het zijn:

<?php
$sql = "SELECT username FROM login WHERE username = '".$username."' AND password = '".$password."'";
?>

EDIT: ik zie het al je doet $result->mysql_num_rows(). Waarom die $result-> ervoor?
Hier zit je fout:

if($result->mysql_num_rows() <1){

PHP denkt dat je een class result hebt aangemaakt met een memberfunctie mysql_num_rows.

Verander je syntax in:

if(mysql_num_rows() < 1){
Moet waarschijnlijk zijn:
if(mysql_num_rows($result) <1)

Je query kan je beter zo doen, alhoewel die van jou ook wel goed is denk ik.
Evt. kan je (username,password) weglaten als dat de enige velden in je tabel zijn (maar dan moet je wel rekening houden met een evt. unieke sleutel (id)).
$sql = mysql_query("INSERT INTO login (username,password) VALUES('" . $username . "','" . $password . "') ")
                or die(mysql_error());


Ik heb nog een probleempje met een update script, dit is de code:


	$query = "UPDATE login SET lastactive = NOW() WHERE username = $_SESSION['user']";
	$result = mysql_query($query);


Wat is er hier mis aan?
een foutmelding is altijd handig, maar voor zover ik kan zien is je where clause fout, je waarde moet namelijk tussen quotes staan.
Daarnaast moet je er ook voor zorgen dat lastactive een datetime is.
zo dus:

$query = "UPDATE login SET lastactive = NOW() WHERE username = '".$_SESSION['user']."'";
Het probleem is dat er geen foutmeldingen zijn:s, dus kan ik ze niet tonen

EDIT : probleem is opgelost, de mysql server (local) was uitgevallen.
Tip: zet altijd dit bovenaan je script:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>
Je had dan waarschijnlijk wel een foutmelding gekregen op dbconnect() aangezien het verbinden met je mysql server mislukt. Ik weet niet hoe die functie eruit ziet, maar het blijkt maar weer waarom je ook altijd moet controleren of er wel degelijk een verbinding tot stand gebracht is...
Bedankt voor de tip, ik zal het gebruiken

Reageren