Hallo,
Ik heb geprobeerd een inlog systeem te maken, maar op de een of andere manier blijf ik maar steeds dezelfde error krijgen met mysql_num_rows. en ook als ik de goede gegevens invul blijft hij maar zeggen dat ik een verkeerde username en password heb ingevuld.
Misschien dat jullie me kunnen helpen.

error code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in **********/checklogin.php on line 25

mijn code:

<?php

ob_start();
$host="*******";
$username="*******";
$password="*******";
$db_name="*******";
$tbl_name="*******";
$link=mysql_connect("$host", "$username", "$password");

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];


$myusername = stripslashes($myusername);
$encrypted_mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$encrypted_mypassword = mysql_real_escape_string($mypassword);
$result=mysql_query("SELECT * FROM ".$tbl_name." WHERE username='".$myusername."' and password='".$mypassword."'", $link);

// Hier zit de fout ergens
$count=mysql_num_rows($result);

if($count==1){

session_register("myusername");
session_register("mypassword");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
ob_end_flush();
?>

Als jullie me kunnen helpen zou dit top zijn!
bedankt,

Joost
session_register gaat verdwijnen vanaf php 5.4, gebruik gewoon $_SESSION.

[size=xsmall]Toevoeging op 02/04/2013 12:27:59:[/size]

Ik denk dat er een fout zit in je query.
Je maakt onnodige variabelen aan.
Volgens mij klopt gewoon je query niet.

Echo je query eens:

<?php
$result=mysql_query("SELECT * FROM ".$tbl_name." WHERE username='".$myusername."' and password='".$mypassword."'", $link);

echo $result;
?>

Klopt dat wat je in de database hebt staan?
Dan moet je een nette foutafhandeling maken wanneer $count dus niet gelijk is aan 1 en dat weergeven.
Verder gebruik je bovenin session_start(); en de global $_SESSION. Daarin zet je never, never nooit een username en password, maar een ding als $_SESSION['logged_in'] die true is ofzo.
Op je andere beveiligde pagina's check je die $_SESSION of deze nog steeds klopt.


@Bart: Een query kan je niet op die manier echo'en. Je zult dan de result van de mysql_query zien, waar een mens weinig mee kan.
OB is nergens voor nodig.
Veel onnodige variabelen in je script.
Waarom twee keer connecten?
Je kijkt niet of er wel gepost is.
Je query zal mislukt zijn, bouw nette foutafhandeling in.
Zet error_reporting aan.
En, zoals Tim al zei, session_register() is antiek.
nou vooruit dan, even een opzet dat je het wel kunt controleren. :)

<?php
$Ssql = "SELECT * 
               FROM 
               ".$tbl_name." 
               WHERE 
               username = '".$myusername."' 
               AND 
               password = '".$mypassword."'");

$result = mysql_query($Ssql);

if( $result === FALSE )
{
   echo $Ssql;
}
?>
Allemaal bedankt voor jullie snelle reacties, ik ga zometeen meteen even kijken of het werkt!




[size=xsmall]Toevoeging op 02/04/2013 18:37:42:[/size]

oke, mijn eerste probleem is nu opgelost.
Alleen telkens wanneer ik nu inlog met de juiste gebruikersnaam en wachtwoord geeft hij aan dat het fout is.
Dus ik denk dat ik nu een fout heb in mijn query. De gegevens worden dus niet goed uit de database gelezen.
Weten jullie misschien dan hoe ik de query dan moet opstellen?
code:
<?php

mysql_connect("localhost","*****","*****","*****");
mysql_select_db("*****")or die("cannot select DB");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];


$myusername = stripslashes($myusername);
$encrypted_mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$encrypted_mypassword = mysql_real_escape_string($mypassword);

$Ssql = "SELECT * FROM users WHERE inlognaam=$myusername AND wachtwoord=$mypassword";

$result = mysql_query($Ssql);


if( $result === TRUE )
{
$_SESSION['myusername'];
$_SESSION['mypassword'];
header("location:login_succes.php");
}
else {
echo "Wrong Username or Password";
}

?>

verder heb ik wat overbodige variabelen weggehaald zoals jullie zeiden en ik heb nu $_SESSION gebruikt.
Dit zal nooit waar zijn:
if( $result === TRUE )

$result zal of false zijn of een #resource bevatten.
oke, ik heb TRUE veranderd naar FALSE. Als ik nu de goede combinatie inlognaam en wachtwoord invul word ik door gelinkt naar login_succes.php Maar als ik inlog met verkeerde gegevens word ik hier ook naar toegeleid.
if( ! $result === FALSE ) zou het mi moeten zijn.

If not FALSE (dus TRUE) word de if uitgevoerd.
Bij FALSE de else.
<?php
$_SESSION['ingelogd'] = false;
if( $result === false )
{
echo "ERROR: ".mysql_error();
}
elseif(mysql_num_rows($result) != 1)
{
echo ' Foute inloggegevens';
}
else
{
$_SESSION['ingelogd'] = true;
header("location:login_succes.php");
}
?>

Geen inloggegevens in een session zetten.

Reageren