login systeem error: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resour

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Java developer met testervaring

Java developer met testervaring Functieomschrijving "De drempel tussen de burger en de Belastingdienst zo laag mogelijk houden: dat is de belangrijke taak van ons team. Dit doen we door het burgerportaal Mijn Belastingdienst continu te verbeteren." René, Java-specialist bij de Belastingdienst. De keten Interactie is een samenwerkingsverband van alle dienstonderdelen binnen de Belastingdienst. Samen zorgen we dat het contact met burgers en bedrijven goed kan plaatsvinden. Onze belangrijkste opgave? Zoveel mogelijk digitaliseren. Dat doen we binnen het onderdeel Informatievoorzieningen (IV), de ICT-organisatie van de Belastingdienst. Denk bij de producten die IV-Interactie ontwikkelt en onderhoudt aan portalen, formulieren en authenticatie- en

Bekijk vacature »

Joost Bouhof

Joost Bouhof

02/04/2013 12:17:25
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?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
Gewijzigd op 02/04/2013 12:19:31 door Joost Bouhof
 
PHP hulp

PHP hulp

27/10/2021 15:37:16
 
Tim S

Tim S

02/04/2013 12:23:37
Quote Anchor link
session_register gaat verdwijnen vanaf php 5.4, gebruik gewoon $_SESSION.

Toevoeging op 02/04/2013 12:27:59:

Ik denk dat er een fout zit in je query.
 
Bart V B

Bart V B

02/04/2013 12:30:08
Quote Anchor link
Je maakt onnodige variabelen aan.
Volgens mij klopt gewoon je query niet.

Echo je query eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?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.
Gewijzigd op 02/04/2013 12:31:37 door Bart V B
 
- Ariën -
Beheerder

- Ariën -

02/04/2013 12:32:58
Quote Anchor link
@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.
 
- SanThe -

- SanThe -

02/04/2013 12:33:30
Quote Anchor link
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.
 
Bart V B

Bart V B

02/04/2013 12:39:40
Quote Anchor link
nou vooruit dan, even een opzet dat je het wel kunt controleren. :)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$Ssql
= "SELECT *
               FROM
               "
.$tbl_name."
               WHERE
               username = '"
.$myusername."'
               AND
               password = '"
.$mypassword."'");

$result = mysql_query($Ssql);

if( $result === FALSE )
{

   echo $Ssql;
}

?>
 
Joost Bouhof

Joost Bouhof

02/04/2013 14:46:23
Quote Anchor link
Allemaal bedankt voor jullie snelle reacties, ik ga zometeen meteen even kijken of het werkt!




Toevoeging op 02/04/2013 18:37:42:

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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.
Gewijzigd op 02/04/2013 18:37:30 door Joost Bouhof
 
- SanThe -

- SanThe -

02/04/2013 18:39:22
Quote Anchor link
Dit zal nooit waar zijn:
if( $result === TRUE )

$result zal of false zijn of een #resource bevatten.
 
Joost Bouhof

Joost Bouhof

02/04/2013 18:59:16
Quote Anchor link
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.
 
Pieter Rekvelt

Pieter Rekvelt

02/04/2013 19:42:55
Quote Anchor link
if( ! $result === FALSE ) zou het mi moeten zijn.

If not FALSE (dus TRUE) word de if uitgevoerd.
Bij FALSE de else.
Gewijzigd op 02/04/2013 19:44:29 door Pieter Rekvelt
 
- SanThe -

- SanThe -

02/04/2013 20:08:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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.
Gewijzigd op 02/04/2013 20:11:45 door - SanThe -
 
Joost Bouhof

Joost Bouhof

02/04/2013 22:22:16
Quote Anchor link
Pieter Rekvelt op 02/04/2013 19:42:55:
if( ! $result === FALSE ) zou het mi moeten zijn.

If not FALSE (dus TRUE) word de if uitgevoerd.
Bij FALSE de else.


Als ik het zo doe, geeft hij aan dat ik verkeerde combinatie inlognaam en wachtwoord heb ingevuld. Zowel bij goede combinatie als foute.

Toevoeging op 02/04/2013 22:23:55:

- SanThe - op 02/04/2013 20:08:44:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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.


Als ik deze code neer plak
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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);


$_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");
}


?>


krijg ik deze error:
ERROR: Unknown column '******' in 'where clause'

Dus ik weet niet.
(****** = inlognaam )
Gewijzigd op 02/04/2013 23:50:18 door Joost Bouhof
 
- SanThe -

- SanThe -

02/04/2013 22:38:55
Quote Anchor link
Klopt. Je mist namelijk de enkele quotes voor mysql.
$Ssql = "SELECT * FROM users WHERE inlognaam='" . $myusername . "' AND wachtwoord='" . $mypassword . "'";
 
Joost Bouhof

Joost Bouhof

02/04/2013 23:35:19
Quote Anchor link
JA! Eindelijk werk alles!
Hartelijk dank voor jullie hulp!

joost
 
Landleven Tips

Landleven Tips

02/04/2013 23:43:07
Quote Anchor link
Even een tip haal de database gegevens uit je code. Nu weet iedereen je database gegevens.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.