mySQL : WHERE of LIKE ?

Plaats reactie
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

ik heb een vraagje (weeral :P ):

Ik ben iets aant maken met een nieuwsysteem met verschillende profielen enzo, en ge moet inloggen met een paswoord.

Tis de bedoeling dat een 5-tal mensen kunnen inloggen, en hun gebruikersnaam en wachtwoord moeten geven.

Maar om de gegeven gebruikersnaam en paswoord te vergelijken met wat in de database staat, had ik aan hetvolgende gedacht:

Code: Selecteer alles

SELECT * FROM ledenlijst WHERE username=wa da ingegeven is


nu ist probleem dat, hoewel de juiste tabel en database bestaat, hij als fout geeft : no such table. Ik vermoed dus dat mijn mySQL syntax verkeerd is, of moet ik beter LIKE gebruiken?

Concreet : hoe haalt ge (het beste) een query op waarvan een bepaald veld exact is wa da gij hebt opgegeven?
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
NuKeM
Content Editor
Content Editor
Berichten: 5132
Lid geworden op: 10 nov 2002, 00:55
Uitgedeelde bedankjes: 67 keer
Bedankt: 156 keer
Contacteer:

Probeer eens:

Code: Selecteer alles

SELECT username, password FROM ledenlijst WHERE username='wa da ingegeven is'


Let op de ' '.

Een like wil je zeker niet gebruiken om logins te checken ;) dan kan iemand bvb inloggen (mits hij het paswoord kent) met 'adm' terwijl de echte login 'administrator' is om maar wat te zeggen... niet het toppunt van veiligheid dus.

Als je wat basics wil leren over SQL kan je bvb hier een kijkje nemen: http://www.w3schools.com/sql/default.asp
NuKeM
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Merci Nukem,

ik dacht wel dat WHERE het beste is, en dat ge met LIKE alleen maar kijkt of er iets is waar het op trekt, maar kwist nie hoe ge het moet schrijven. En das maar nen basiscursus PHP da ik hier liggen heb, over mySQL syntax weinig uitleg.

PS : is dit veilig genoeg als ge dit schrijft :

Code: Selecteer alles

SELECT * FROM ledenlijst WHERE username='ietske' AND paswoord='ook ietske'


en dan zien of er een record gevonden wordt?
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
Erik
Elite Poster
Elite Poster
Berichten: 1321
Lid geworden op: 15 sep 2002, 02:46
Uitgedeelde bedankjes: 2 keer
Bedankt: 18 keer

Pi R²,

volgens mij ga je veel te snel in het "leerproces" MySQL is niet voor php newbies .Je moet niet willen lopen voor je kan stappen want dan ga je vallen.Iedereen moet onderaan de ladder beginnen Pi R² .Dit is geen kritiek maar een goede raad

http://www.hotscripts.com/PHP/Scripts_and_Programs/
en

http://www.hotscripts.com/PHP/Scripts_a ... ublishing/
Registered Linux user #286313
Gebruikersavatar
NuKeM
Content Editor
Content Editor
Berichten: 5132
Lid geworden op: 10 nov 2002, 00:55
Uitgedeelde bedankjes: 67 keer
Bedankt: 156 keer
Contacteer:

Pi R² schreef:Merci Nukem,

ik dacht wel dat WHERE het beste is, en dat ge met LIKE alleen maar kijkt of er iets is waar het op trekt, maar kwist nie hoe ge het moet schrijven. En das maar nen basiscursus PHP da ik hier liggen heb, over mySQL syntax weinig uitleg.

PS : is dit veilig genoeg als ge dit schrijft :

Code: Selecteer alles

SELECT * FROM ledenlijst WHERE username='ietske' AND paswoord='ook ietske'


en dan zien of er een record gevonden wordt?


Ja, je kan ook hetvolgende doen:

Code: Selecteer alles

$sql_login =  "SELECT COUNT(*) FROM ledenlijst WHERE username='ietske' AND paswoord='ook ietske'";

$numb_of_counts = mysql_result(mysql_query($sql_login), 0);

if ($numb_of_counts == 1) then
{
  /* hier uw code voor als er een juist paswoord is ingegeven, session aanmaken ofzo */
}
else
{
  /* hier de code indien er iets niet klopt */
}
NuKeM
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Ik heb ondertussen wel de gewoonte van paswoorden altijd enkel de md5-hash op te slaan. Niet iedereen is er zo zot van dat de eigenaar zomaar de wachtwoorden kan lezen...

Dat inbouwen is vrij eenvoudig, dat kan meteen in uw query:

bij het aanmaken:

Code: Selecteer alles

INSERT INTO table VALUES ('".$_POST['username']."','".md5($_POST['password'])."');";


en bij het opvragen:

Code: Selecteer alles

$sql =  "SELECT COUNT(*) FROM table WHERE username='".$_POST['username']."' AND paswoord='".md5($_POST['password']."';";


Wat dan wordt opgeslagen is niet te lezen of terug te halen, maar het resultaat van een md5() is wel altijd hetzelfde, dus kan je mee vergelijken...
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

voorwa dient da md5 spullement eigenlijk?
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
NuKeM
Content Editor
Content Editor
Berichten: 5132
Lid geworden op: 10 nov 2002, 00:55
Uitgedeelde bedankjes: 67 keer
Bedankt: 156 keer
Contacteer:

Pi R² schreef:voorwa dient da md5 spullement eigenlijk?


Dat zet gewoon bvb een paswoord om in een code. Als je in je paswoord één letter veranderd krijg je een andere code, bij hetzelfde paswoord krijg je steeds dezelfde code terug.
Waarom is dit handig? Wel, op deze manier kan je bvb zoals hier is getoond een paswoord opslaan in een db in een 'onleesbare' vorm, zodat indien iemand je db in handen krijgt hij de paswoorden niet terug kan omzetten naar een bruikbare vorm (de vorm die hij kan ingeven om bvb in te loggen).
Als jouw programma nu wil checken of een paswoord correct is gaat hij gewoon de md5 code van beide vergelijken (hij zet het opgegeven paswoord om in md5 code en vergelijkt die code met de opgevraagde code uit de database).
Een veilige manier van werken dus.
NuKeM
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Vergelijk het met versleutelen van een tekst, met het verschil dat dit 1-richtings-verkeer is: je kan versleutelen, maar niet "ontsleutelen". Dat heeft als voordeel dat je nooit het origineel kan te weten komen. Het nadeel is dat je nooit het origineel te weten kan komen. Als je dus iemands wachtwoord wilt ophalen, kan dat niet.
Het idee is dat niemand iets heeft aan het te weten komen van wat er in de database staat, want die md5-hash kan je niet gebruiken om in te loggen...
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

Maar het is in mijn geval de bedoeling om zelf een rekord toe te voegen met paswoord en gebruikersnaam via phpmyadmin, en niet via een of ander inschrijfsysteem (slechts een beperkt aantal personen mag ervan gebruik maken). Moet ik dan voor mijzelf een simpel paginake maken dat ge als ge iemand een paswoord wilt geven da der gewoon eerst eens doordraait ofzo?

Code: Selecteer alles

echo md5($_POST["nieuwpaswoord"]) ;


een beetje extra moeite om toe te voegen, maar ne goeien tip. Kgaan mijn spel direct aanpassen se. Merci meon en nukem
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
Pi R²
Elite Poster
Elite Poster
Berichten: 811
Lid geworden op: 03 jan 2003, 17:15
Locatie: Sint-Niklaas
Contacteer:

ha, ik heb het al gevonden, ge kunt als ge nen nieuwe rekord toevoegt, als functie in phpmyadmin meegeven dat da in md5 moet zijn.
Lang Leve Mijn Eigen! Het geheim voor een lang leven: niet stoppen met ademen
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Inderdaad.

Dat is nog een voordeel van md5() - > het resultaat daarvan is op elk systeem hetzelfde, iets dat niet het geval is met crypt().
Plaats reactie

Terug naar “Development”