SQL werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Tom boka

tom boka

24/08/2014 20:19:17
Quote Anchor link
Hoi,

ik ben net begonnen met PHP + Mysqli, en ik dacht laat ik even een login systeem proberen te maken.
Het html stukje werkt wel maar maar de mysqli wilt niet werken.
ik krijg een error: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in: ...

dit is de 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
38
39
40
41
42
43
44
45
46
47
48
<?php
include("config.php");
if(isset($_POST['submit'])){
$blabla =  mysql_real_escape_string($_POST['gebruikensnaam']);
$blabla2 = mysql_real_escape_string($_POST['wachtwoord']);
$sql = $db->query("SELECT id FROM 'users' WHERE gebruikensnaam= '$blabla' AND wachtwoord = '$blabla2'");
    $userCount = mysql_num_rows($sql);

    $result=mysql_query($sql) or trigger_error(mysql_error().$sql);

    if ($userCount == 1) {
        while($row = mysql_fetch_array($sql)){
             $id = $row["id"];
    }

?>



van $result krijg ik :
Notice: Query was empty

voor als jullie dit nodig hebben dit is mijn config:


<?php
define("DB_HOST", "localhost");
define("DB_NAME", "loginsystem");
define("DB_USER", "root");
define("DB_PASS", "");

$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

?>


dit is nog voor de zekerheid de html:
<!DOCTYPE html>    
<form method="post" action="login.php">
    <TABLE BORDER="0">
        <TR>
            <TD width="80">gebruikensnaam:</TD>
            <TD WIDTH="80"><input type="text" name="gebruikensnaam" placeholder="gebruikensnaam"><br></TD>
        </TR>
        <TR>
            <TD width="80">password:</TD>
            <TD width="80"><input type="text" name="wachtwoord" placeholder="password"></TD>
        </TR>
    </TABLE>
    <input type='submit' name='submit' value='login'>
</form>



Sorry voor het slecht nederland ik heb dit met spoed getypt.

Alvast bedankt, tom.
- Aar -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 24/08/2014 20:28:33 door - Ariën -
 
PHP hulp

PHP hulp

24/04/2024 04:35:41
 
- Ariën  -
Beheerder

- Ariën -

24/08/2014 20:29:21
Quote Anchor link
mysql_num_rows() terwijl je MySQLi gebruikt?
Dat gaat niet werken.

Tevens meng je de procedurele met de OOP-versie door elkaar heen wat niet kan.
Gewijzigd op 24/08/2014 20:30:07 door - Ariën -
 
- SanThe -

- SanThe -

24/08/2014 21:18:58
Quote Anchor link
SELECT id FROM 'users' WHERE ...

Users staat tussen quotes dus is het tekst en geen sql-tabel of iets.
 
Tom boka

tom boka

24/08/2014 21:35:59
Quote Anchor link
- Aar - op 24/08/2014 20:29:21:
mysql_num_rows() terwijl je MySQLi gebruikt?
Dat gaat niet werken.

Tevens meng je de procedurele met de OOP-versie door elkaar heen wat niet kan.


Dankjewel voor je snelle reactie!

ik zou ff googlen hoe ik anders moet doen.
 
- Ariën  -
Beheerder

- Ariën -

24/08/2014 21:38:44
Quote Anchor link
Kijk eerst eens naar:
http://php.net/manual/en/mysqli.query.php

En bedenk dan of je de procedurele manier of de Object Oriënted (OO) manier wilt gebruiken.
 
Obelix Idefix

Obelix Idefix

24/08/2014 21:45:43
Quote Anchor link
Waar controleer je of de twee velden wel gevuld zijn?
Waarom mysql_real_escape_string niet in de query?
Waarom sowieso een mysql_real_escape_string over een wachtwoord?
Wachtwoorden nooit onbeveiligd opslaan (in een database).

Op regel 7 haal je het aantal rijen op, op regel 9 controleer je of de query gelukt is. Zou het omdraaien.

De while lijkt me overbodig: er is maar 1 resultaat, dus waarom een while-lus?

Verder is het gebruik van een tabel voor een formulier niet echt meer van deze tijd.
 
Tom boka

tom boka

24/08/2014 21:47:38
Quote Anchor link
Tom boka op 24/08/2014 21:35:59:
- Aar - op 24/08/2014 20:29:21:
mysql_num_rows() terwijl je MySQLi gebruikt?
Dat gaat niet werken.

Tevens meng je de procedurele met de OOP-versie door elkaar heen wat niet kan.


Dankjewel voor je snelle reactie!

oke! het werkt ik heb er dit van gemaakt:
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
<?php
$mysqli
= new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$blabla =  mysql_real_escape_string($_POST['gebruikensnaam']);
$blabla2 = mysql_real_escape_string($_POST['wachtwoord']);



    if ($mysqli->connect_errno) {
        echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
        exit();
    }



$sql = "SELECT id FROM users WHERE gebruikensnaam= '$blabla' AND wachtwoord = '$blabla2'";
    $userCount = $mysqli->query($sql);

    if ($userCount->num_rows == 1) {

         echo 's';

        }
else {
        echo 'That information is incorrect, try again';

    }

}

[
/code]

ik zou ff googlen hoe ik anders moet doen.
?>




Toevoeging op 24/08/2014 21:50:41:

Obelix en Idefix op 24/08/2014 21:45:43:
Waar controleer je of de twee velden wel gevuld zijn?
Waarom mysql_real_escape_string niet in de query?
Waarom sowieso een mysql_real_escape_string over een wachtwoord?
Wachtwoorden nooit onbeveiligd opslaan (in een database).

Op regel 7 haal je het aantal rijen op, op regel 9 controleer je of de query gelukt is. Zou het omdraaien.

De while lijkt me overbodig: er is maar 1 resultaat, dus waarom een while-lus?

Verder is het gebruik van een tabel voor een formulier niet echt meer van deze tijd.


Dit is gewoon voor mijzelf om teoefenen met php/mysqli.
Dus ik moet regel 7 + 9 omdraaien dankjewel!
Gewijzigd op 24/08/2014 21:48:26 door tom boka
 
- SanThe -

- SanThe -

24/08/2014 22:18:14
Quote Anchor link
Ik zie nog steeds mysql en mysqli door elkaar.
 
Tom boka

tom boka

24/08/2014 23:59:54
Quote Anchor link
- SanThe - op 24/08/2014 22:18:14:
Ik zie nog steeds mysql en mysqli door elkaar.


O, oke.
Kan je zeggen wat mysql is zodat ik het kan verbeteren.

(ik ben echt pas net begonnen met mysql + mysqli)
ik las op internet dat mysql verrouderd was daarom gebruik ik mysqli, maar omdat ik sommige stukjes code van internet haal kan het zijn dat mysqli + mysql door elkaar is.
 
- Ariën  -
Beheerder

- Ariën -

25/08/2014 00:02:59
Quote Anchor link
Functies waarin gesproken wordt over mysql_*() zijn MySQL-functies.
Waar gesproken wordt over mysqli_*() zijn MySQLi-functies.

Niet zo heel lastig. Bekijk ook eens mijn link die ik eerder gaf.
 
Willem vp

Willem vp

25/08/2014 00:27:46
Quote Anchor link
- Aar - op 24/08/2014 20:29:21:
Tevens meng je de procedurele met de OOP-versie door elkaar heen wat niet kan.

Dat kan prima (en is ook gesupport). Of het handig/verstandig is, is een andere discussie... ;-)
 
Tom boka

tom boka

25/08/2014 00:30:44
Quote Anchor link
- Aar - op 25/08/2014 00:02:59:
Functies waarin gesproken wordt over mysql_*() zijn MySQL-functies.
Waar gesproken wordt over mysqli_*() zijn MySQLi-functies.

Niet zo heel lastig. Bekijk ook eens mijn link die ik eerder gaf.


Dankjewel!



zo de
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
mysql_real_escape_string

zijn mysql

en die worden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$wachtwoord = mysqli_real_escape_string($mysqli, $_POST['wachtwoord']);
Gewijzigd op 25/08/2014 00:37:04 door tom boka
 
- Ariën  -
Beheerder

- Ariën -

25/08/2014 00:42:51
Quote Anchor link
In dit geval moet je wel de procedurele manier van verbinden gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mysqli= mysqli_connect("localhost", "username", "top_secret_password", "databasenaam");


Verder neem ik aan dat je wachtwoord encoded is. In dat geval hoef je er geen mysqli_real_escape_string() over te halen, omdat deze uit zichzelf al een hash geeft die geen SQL-injection kan blootleggen.
Gewijzigd op 25/08/2014 00:44:14 door - Ariën -
 
Tom boka

tom boka

25/08/2014 01:47:38
Quote Anchor link
- Aar - op 25/08/2014 00:42:51:
In dit geval moet je wel de procedurele manier van verbinden gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$mysqli= mysqli_connect("localhost", "username", "top_secret_password", "databasenaam");


Verder neem ik aan dat je wachtwoord encoded is. In dat geval hoef je er geen mysqli_real_escape_string() over te halen, omdat deze uit zichzelf al een hash geeft die geen SQL-injection kan blootleggen.


Jij bent mij held/heldin

Dankjewel voor al je hulp!

En is dit de veiligste manier want ik las iets over OOP ofzo.

-tom
 
- Ariën  -
Beheerder

- Ariën -

25/08/2014 01:56:54
Quote Anchor link
Zeg maar 'held' ;)

OOP staat voor Objectgeoriënteerd Programmeren, en dat heeft niks met beveiliging te maken. Op www.phptuts.nl staat een uitleg over OOP.

Of je die methode gebruikt is een keuze, maar bij grote scripts en meer-persoons-projecten is het zeker een aanrader.
Gewijzigd op 25/08/2014 01:58:02 door - Ariën -
 
Tom boka

tom boka

25/08/2014 02:04:10
Quote Anchor link
Hallo!

ik wil dat ik mijn wachtwoord opsla in de database met een soort van 'beveiling' ik had wat gegoogled en ik kwam op MD5 maar zijn er ook betere manieren?

alast bedankt!

-tom
 
Goto Learn

Goto Learn

25/08/2014 02:08:23
 
- Ariën  -
Beheerder

- Ariën -

25/08/2014 02:10:48
Quote Anchor link
Bcrypt is volgens mij nog een stukje sterker.
 
Tom boka

tom boka

25/08/2014 02:13:02
 
Goto Learn

Goto Learn

25/08/2014 02:14:12
Quote Anchor link
Aar heeft gelijk.. Bcrypt is sterker. Zo te zien ondersteunt password_hash() Bcrypt.
 
Tom boka

tom boka

25/08/2014 02:19:36
Quote Anchor link
Goto Learn op 25/08/2014 02:14:12:
Aar heeft gelijk.. Bcrypt is sterker. Zo te zien ondersteunt password_hash() Bcrypt.


O, oke!
ik zal er eens nakijken

(ik snap er niet veel van)

ik zat te denken aan :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$wachtwoord = $_POST['wachtwoord'];
$test = password_hash($wachtwoord, PASSWORD_DEFAULT)."\n";


ik weet niet dat dit werkt
wat denken jullie
Gewijzigd op 25/08/2014 02:22:22 door tom boka
 

Pagina: 1 2 volgende »



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.