[PHP/mySQL] Login kan pw niet uit tabel weergeven

Pagina: 1
Acties:

  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
Hoi, ik was van plan om een (wel heel erg simpel ;)) nieuwssysteempje dat ik had gemaakt uit te breiden met login (eerst ging het via IP-adres, niet erg handig ivm meerdere locaties :)).
Ik was van plan dan een extra tabel aan te maken waarin alleen de username en het password stonden.

Zo gezegd, zo gedaan, althans begonnen ;) De code waar ik op uitkwam was deze:
PHP:
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
<form method="post" action="<?php echo "$PHP_SELF"; ?>">
id: <input type="text" name="id" value="<?php echo "$id"; ?>"><br>
pw: <input type="text" name="pw" value="<?php echo "$pw"; ?>"><br>
<input type="submit" value="submit" name="login"><br>
</form>

<?php
/* 
    CREATE TABLE login ( 
        username varchar(15) NOT NULL, 
        password varchar(15) NOT NULL
    );
    
*/
if($login == "submit") {

@mysql_connect("$dbhost","$dbuser","$dbpassword") or die ("Could not connect to Database"); 
mysql_select_db("$dbname"); 

$select= "SELECT * FROM login WHERE username='$id'";
$query = "mysql_query($select) or die (mysql_error())";

if ("$pw" == "$password") {
    
include "config.php";

Setcookie("id", $id, Time()+3600);
Setcookie("pw", $pw, Time()+3600);

echo "Dit is mooie test-text";
} else { echo "error"; }
}
else {}
?>


Alles goed en wel, maar tot mijn verbazing werkte hij niet :|
Na een paar uur erop te hebben geblokt en allerlei veranderingen aangebracht (die ik later weer verwijderd had omdat het geen nut bleek te hebben ;)) heb ik dat "error" onderaan veranderd in
PHP:
1
echo "$id, $pw, $username, $password, $list->username, $list->password";


De reden waarom ik $username, $password én $list->username, $list->password heb gedaan is simpel: ik ben nog een beetje een newbie met PHP, niet zoveel tijd als ik zou willen om me er 100% op te storten :( Maar ik ga vooruit :)

In ieder geval, hij weigerde om het username en password - dat hij zou moeten uitlezen uit de tabel - weer te geven. $id en $pw geeft 'ie vanzelfsprekend wel gewoon weer...

Ik neem dus aan dat de fout ergens zit bij het lezen uit de database, maar hij geeft geen mySQL error weer.
Heeft iemand enig idee waarom dit niet werkt, en desnoods een oplossing voor dit probleem geven? Misschien moet ik een totaal andere weg inslaan?

edit:
Toch maar ff zeggen dat ik heb gezocht op GoT, en Omega. Ik was 't eigenlijk vergeten |:( Nu nog even zoeken op Google :)

  • TweakBoy
  • Registratie: Augustus 2001
  • Laatst online: 29-08 23:24

TweakBoy

---

je moet je query resultaat eerst met mysql_fetch_object of mysql_fetch_array laten bewerken :P

---


  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
Hmmm, zou je me kunnen vertellen waarom? Nieuwsgierigheid :) (ben nu aan het zoeken hoe :P)

[edit_tussendoor]
mysql_fetch_array() is an extended version of mysql_fetch_row().
Ok weet al wat het doet :)[/edit_tussendoor]

edit:
ok, done, nu ff checken of ie t doet :)


->
Warning: Supplied argument is not a valid MySQL result resource in /var/www/nsa/auth.php on line 23

Line 23: while ($list = mysql_fetch_object($query)) {

Daarna heb ik _object in _array veranderd, dat werkt ook niet. Dan geeft ie dezelfde error... Wat kan ik fout hebben gedaan? Ligt dit aan mijn script of iets anders?

[edit2] Even ter verduidelijking: nu heb ik dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if($login == "submit") {

@mysql_connect("$dbhost","$dbuser","$dbpassword") or die ("Could not connect to Database"); 
mysql_select_db("$dbname"); 

$select= "SELECT * FROM login WHERE username='$id'";
$query = "mysql_query($select) or die (mysql_error())";

while ($list = mysql_fetch_array($query)) { 

if ("$pw" == "$password") {

include "config.php";

Setcookie("id", $id, Time()+3600);
Setcookie("pw", $pw, Time()+3600);

echo "Dit is mooie test-text";
} else { echo "$id, $pw, $username, $password, $list->username, $list->password"; }
}
}
else {}
bij de code

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
twee manieren om het te doen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[...]
$select= "SELECT * FROM login WHERE username='" . $id . "' AND password='" . $password . "'";
// query runnen
$result = mysql_query($select);
// aantal rijen tellen 
if (mysql_numrows($result) == 1)
    {
    // login ok
    {
else
    {
    // login / password kloppen niet
    }
;

de andere is die van jou.

Wat in jouw snippet niet klopt is dat je
- de query nergens uitvoert,
- in de eerste versie ben je mysql_fetch_array ook nog vergeten.
- Je kunt velden uit je resultset alleen als elementen uit een array aanroepen, het heet niet voor niets 'fetch_array' he! ;)

Dus maak maar eens iets wat ook de query runt, daaran de rij 'fetcht' en daarna het opgeslagen wachtwoord dmv. $result['password'] oid. aanroept.

lees even de manual van mysql_query, mysql_fetch_array en de rest die je nog niet helemaal snapt goed door.

Everyone complains of his memory, no one of his judgement.


  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
:o
Zo zou het natuurlijk wel kunnen, maar dat is toch een hele andere weg inslaan... Is het niet mogelijk om het op deze manier te doen?
En, waar is die '.' voor? En, waarom doe je
username='" . $id "' ipv alleen een ' ?

[edit] het is natuurlijk wel makkelijk om die code zomaar over te nemen, maar het is veel leuker als ik er ook nog iets van kan leren ;)
-> nm niet je hele post goed gelezen :)

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
lees ook even mijn reacties in [rml][ php] variabele met link meesturen[/rml]

Ik had al aangeduid waar het bij jou mis gaat:
Wat in jouw snippet niet klopt is dat je
- de query nergens uitvoert,
- in de eerste versie ben je mysql_fetch_array ook nog vergeten.
- Je kunt velden uit je resultset alleen als elementen uit een array aanroepen, het heet niet voor niets 'fetch_array' he!

Dus maak maar eens iets wat ook de query runt, daaran de rij 'fetcht' en daarna het opgeslagen wachtwoord dmv. $result['password'] oid. aanroept.

lees even de manual van mysql_query, mysql_fetch_array en de rest die je nog niet helemaal snapt goed door.

Everyone complains of his memory, no one of his judgement.


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 17:07
Het lijkt mij een slim plan om eerst eens MySql/php tutorial door te lopen, dan begrijp je wellicht ook waarom het moet.

Die -- '.' -- is een operator om strings aan elkaar te knopen. En sebas heeft er voor gekozen om variabelen op die manier aan de query string te plakken. Dat hoeft overigens niet je kunt ook:
$select= "SELECT * FROM login WHERE username='$id' AND password='$password' ";

doen.
btw merk op dat bij data dat uit een formulier komt, via POST bij jouw wel op de 'manier van sebas' moet.

  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Wat ik heb gedaan moet je zo vooral overnemen als je je site in no time gehacked wilt hebben.

Voor de volledigheid:

Voordat je een query bouwt met variabelen uit een request moet je deze checken en addslash()'en. Anders maak je sql-injection wel erg makkelijk.

Of je het met GET of POST doet maakt voor de rest weinig uit, je moet alleen indien register globals uitstaat de variabelen uit de request in je script aanroepen, dus $pw = $_POST['pw'] of $ps = $_GET['pw'] .

Everyone complains of his memory, no one of his judgement.


  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
k thx, ik neem aan dat ik er nu wel uitkom :)

[edit] woei hij werkt :)

Verwijderd

BTW, dit is dus gewoon een letterlijke string en niet iets wat een MySQL zou kunnen retourneren!
PHP:
1
$query = "mysql_query($select) or die (mysql_error())";

Dit is nu letterlijk:
mysql_query(SELECT * FROM login WHERE username='$id') or die(mysql_error())
Behalve dan $id, maar ik kan ook niet ruiken wat dat moet zijn :)
Pagina: 1