Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[mysql] Rij wordt niet herkend

Pagina: 1
Acties:

  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
Informatie:
- MySQL - 4.1.11-standard
- phpMyAdmin - 2.8.2.4
- Tabel Leerling:
id int(5) auto_increment
klas int(5)
naam varchar(50) latin1_swedish_ci
gebruikersnaam varchar(50) latin1_swedish_ci
password varchar(50) latin1_swedish_ci
emailadres varchar(80) latin1_swedish_ci
geboortedatum date
- Password is niet md5 (dit door procesmatige redenen)
Beschrijving:
Ik krijg klachten van gebruikers dat ze niet kunnen inloggen.
Als ik dan op de gebruikersnaam (of een klein deel met like) zoek in mysql (phpmyadmin) vind hij deze gebruikersnaam niet. Password hetzelfde verhaal.
MySQL gaf een lege resultaat set terug (0 rijen).
Als ik zoek op ID werkt dit wel.
Als ik dit probleem wil verhelpen ga ik de row aanpassen (id aanpassen en weer terugzetten) en dan doet hij het meestal weer.
Zo af en toe krijg ik de klacht van gebruikers maar het is lang niet bij allemaal.
Wat kan hiervan het probleem zijn?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Hoe ziet een foutieve username eruit?

als dit de enige informatie is die je kan geven, vermoed ik dat dit een lang of een heel kort topic zal worden.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
Een foutief username is bijvoorbeeld : kimbeek of eriks
De username en password voor de foutieve doet het wel..
Wat kan ik nog meer voor aanvullende informatie geven wat kan helpen bij jullie?

[ Voor 26% gewijzigd door josjos op 03-10-2007 09:28 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

josjos schreef op woensdag 03 oktober 2007 @ 09:25:
Een foutief username is bijvoorbeeld : kimbeek of eriks
Username: kimbeek of eriks
(dus [kimbeek of eriks] is 1 username)
De username en password voor de foutieve doet het wel..
:?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
Nee, zijn 2 losse, excuse!
[kimbeek]
[eriks]
Ik heb gecontroleerd of er space achter of voor de username, password staan (niet het geval) maar ook met de like werkt dit niet.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Gast, je moet écht even wat meer informatie geven, anders is dit topic nog vóór 10 uur dicht. Post eens wat relevante PHP-code, ga debuggen (Query's echo'en) enz.

Sla ook de /14-FAQ er even op na.

[ Voor 14% gewijzigd door CodeCaster op 03-10-2007 09:32 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Verwijderd

josjos schreef op woensdag 03 oktober 2007 @ 09:12:
Als ik dit probleem wil verhelpen ga ik de row aanpassen (id aanpassen en weer terugzetten) en dan doet hij het meestal weer.
Zou je even volledig kunnen beschrijven wat je in deze stap doet?

  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
Ik voer mijn queries uit in phpmyadmin & php
Als ik select * from leerling doe en output laat hij de betreffende rij wel zien.
Maar zodra ik:
SELECT id
FROM leerling
WHERE gebruikersnaam='kimbeek'
krijg ik geen rijen terug (ook niet met LIKE).

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Kan je eens heel wat duidelijker zijn .....
De username en password voor de foutieve doet het wel
:?
Nee, zijn 2 losse
:?

Het werkt niet ? Wat dan precies ? Heb je gewoon al eens de queries die je uitvoert ge-echoëd ? Heb je al eens gekeken hoe die er uit zien ? Heb je die query dan zo al eens rechtstreeks op de DB uitgevoerd ?

https://fgheysels.github.io/


  • dezejongeman
  • Registratie: Juli 2006
  • Laatst online: 24-11 13:41
heb je ook foutmeldingen? gaat alles in het php script goed post daar ook eens wat van.

  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
Als ik het goed begrijp. Je hebt een tabel met accountjes. Deze bevat o.a. ID, gebruikersnaam en wachtwoord. Doe je een SELECT *, dan verschijnt de desbetreffende row wel in de SET, maar doe je een SELECT * FROM tabelnaam WHERE gebruikersnaam = "KIMBEEK", dan krijg je een lege SET.

Begrijp ik dit goed?

  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
De PHP query word gewoon uitgevoerd (geen foutmeldingen) maar het aantal teruggegeven rows is 0.
Script
code:
1
2
3
4
5
$result = mysql_query("SELECT * 
        FROM leerling
        WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' 
        AND password='".$_POST['wachtwoord']."'")  or die(mysql_error());
echo mysql_num_rows($result);

De output is altijd 0.
Ook met een LIKE query.
Zonder WHERE conditie geeft php en phpmyadmin wel een aantal rijen terug.

[ Voor 3% gewijzigd door josjos op 03-10-2007 09:53 ]


  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
smeerbartje schreef op woensdag 03 oktober 2007 @ 09:53:
Als ik het goed begrijp. Je hebt een tabel met accountjes. Deze bevat o.a. ID, gebruikersnaam en wachtwoord. Doe je een SELECT *, dan verschijnt de desbetreffende row wel in de SET, maar doe je een SELECT * FROM tabelnaam WHERE gebruikersnaam = "KIMBEEK", dan krijg je een lege SET.

Begrijp ik dit goed?
Correct

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
gebruik je misschien een collation die case-sensitive is ?

https://fgheysels.github.io/


  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
whoami schreef op woensdag 03 oktober 2007 @ 10:01:
gebruik je misschien een collation die case-sensitive is ?
Ik gebruik collation: latin1_swedish_ci, ik zoek low-case en de row is ook low-case

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Waarschijnlijk zit er een verborgen character voor of achter de gebruikersnaam.

Doe een

SQL:
1
2
select concat(':', gebruikersnaam, ':') 
 from leerling

Programmer - an organism that turns coffee into software.


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
LuCarD schreef op woensdag 03 oktober 2007 @ 10:06:
Waarschijnlijk zit er een verborgen character voor of achter de gebruikersnaam.

Doe een

SQL:
1
2
select concat(':', gebruikersnaam, ':') 
 from leerling
Maar als de topicstarter een LIKE gebruikt, dan zou de SET toch gewoon iets moeten bevatten wat overeen komt met de LIKE??

  • mddd
  • Registratie: Juni 2007
  • Niet online
In het wachtwoord zit ook niet toevallig een aanhalingsteken ofzo?

Edit: ik zie dat het ook niet werkt als er alleen op gebruikersnaam wordt geselecteerd dus dat zal het wel niet zijn. Een verborgen teken (einde-regel teken??) zou inderdaad de oorzaak kunnen zijn..

Overigens, je moet wel zorgen dat je je script een beetje beveiligt als je op deze manier werkt want als je POST variabelen zomaar in de SQL query gebruikt ben je natuurlijk zeer kwetsbaar voor aanvallen.

[ Voor 27% gewijzigd door mddd op 03-10-2007 10:10 ]

PV : 4650 Wp : 15 x AEG AS-M60XB-310 + GoodWe 4200D-NS : PVOutput


  • mithras
  • Registratie: Maart 2003
  • Niet online
josjos schreef op woensdag 03 oktober 2007 @ 09:53:
De PHP query word gewoon uitgevoerd (geen foutmeldingen) maar het aantal teruggegeven rows is 0.
Script
code:
1
2
3
4
5
$result = mysql_query("SELECT * 
        FROM leerling
        WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' 
        AND password='".$_POST['wachtwoord']."'")  or die(mysql_error());
echo mysql_num_rows($result);

De output is altijd 0.
Ook met een LIKE query.
Zonder WHERE conditie geeft php en phpmyadmin wel een aantal rijen terug.
offtopic:
Misschien is het een idee om je applicatie eens te gaan beveiligen tegen sql injection

  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
mddd schreef op woensdag 03 oktober 2007 @ 10:09:
In het wachtwoord zit ook niet toevallig een aanhalingsteken ofzo?

Overigens, je moet wel zorgen dat je je script een beetje beveiligt als je op deze manier werkt want als je POST variabelen zomaar in de SQL query gebruikt ben je natuurlijk zeer kwetsbaar voor aanvallen.
Daar heb je gelijk in, ik heb het even vereenvoudigd om te testen. Anders zou ik al mijn SQL classes moeten gaan meeposten. Er zitten geen speciale tekens (alleen a t/m z).

[ Voor 5% gewijzigd door josjos op 03-10-2007 10:12 ]


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
Volgens mij is dit ook niet het probleem van de topicstarter. Hij vraagt om mee te denken over zijn probleem m.b.t. het verkrijgen van een verwachte result set, niet over hoe hij zijn script kan beveiligen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
smeerbartje schreef op woensdag 03 oktober 2007 @ 10:15:
Volgens mij is dit ook niet het probleem van de topicstarter. Hij vraagt om mee te denken over zijn probleem m.b.t. het verkrijgen van een verwachte result set, niet over hoe hij zijn script kan beveiligen.
en dan mag hij ook niet gewezen worden op bepaalde beveiligingsfouten misschien ?

https://fgheysels.github.io/


  • smeerbartje
  • Registratie: September 2006
  • Laatst online: 23-11 14:59
whoami schreef op woensdag 03 oktober 2007 @ 10:18:
[...]

en dan mag hij ook niet gewezen worden op bepaalde beveiligingsfouten misschien ?
Ja natuurlijk wel, maar ik nam aan dat hij het vereenvoudigd had... wat achteraf ook bleek te zijn. Ik kan me voorstellen dat de topicstarter hier niet op zit te wachten en het geheel 'ontopic' wil houden. Ik dacht dat moderators hier juist voor aangenomen waren. ;)

  • mddd
  • Registratie: Juni 2007
  • Niet online
We hebben de topicstarter hierop gewezen, hij geeft aan dat het in de werkelijke applicatie wel goed geregeld is. Mooi toch.

On topic: als het met een versimpelde query nog steeds niet werkt, wordt het wel lastig.
josjos, heb je de query al uitgevoerd door hem helemaal in te vullen (dus niet met $_POST te werken) ? Misschien zit het probleem in de verwerking van $_POST en niet in je SQL gedeelte.

PV : 4650 Wp : 15 x AEG AS-M60XB-310 + GoodWe 4200D-NS : PVOutput


  • josjos
  • Registratie: November 2003
  • Laatst online: 19-12-2023
mddd schreef op woensdag 03 oktober 2007 @ 10:21:
We hebben de topicstarter hierop gewezen, hij geeft aan dat het in de werkelijke applicatie wel goed geregeld is. Mooi toch.

On topic: als het met een versimpelde query nog steeds niet werkt, wordt het wel lastig.
josjos, heb je de query al uitgevoerd door hem helemaal in te vullen (dus niet met $_POST te werken) ? Misschien zit het probleem in de verwerking van $_POST en niet in je SQL gedeelte.
Ja dit heb ik geprobeerd. Maar het vreemde is als ik in phpmyadmin deze query uitvoer:
code:
1
2
3
4
5
6
SELECT * 
FROM `leerling` 
WHERE `gebruikersnaam` LIKE CONVERT( _utf8 'kim'
USING latin1 ) 
COLLATE latin1_swedish_ci
LIMIT 0 , 30

wordt deze ook niet herkend. Zodra ik de id verander
code:
1
UPDATE `leerling` SET `id` = '404' WHERE `id` =336 LIMIT 1 ;

en de bovenste query uitvoer vind mysql kim wel.
Ook als ik dan de ID weer terugzet naar de oorspronkelijk wordt kim wel herkend en is het probleem opgelost voor deze user.

[ Voor 3% gewijzigd door josjos op 03-10-2007 10:30 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
je weet dat je bij Like ook wildcards moet gebruiken (in het geval van die kim iig)?

Edit:
(ik heb zo'n vermoeden dat je dat wel weet, bovendien draagt het niet echt bij aan de oplossing van je probleem... dus daarom maar even de lettertjes kleiner gemaakt)

[ Voor 53% gewijzigd door P.O. Box op 03-10-2007 10:38 ]


  • mddd
  • Registratie: Juni 2007
  • Niet online
Misschien heb je dan op de een of andere manier wel dubbele id's in een tabel waar dat eigenlijk niet is toegestaan? Ofzo? Als dit het oplost, zou je een simpel scriptje kunnen maken om de tabel door te lopen en id's te hernummeren (natuurlijk daarbij eventuele links naar deze id's ook aanpassen in andere tabellen) ?

PV : 4650 Wp : 15 x AEG AS-M60XB-310 + GoodWe 4200D-NS : PVOutput


Verwijderd

Probeer deze nog-niet-eerder-letterlijk-genoemde-maar-erg-voor-de-hand-liggende query eens:

code:
1
2
3
SELECT * 
FROM `leerling` 
WHERE `gebruikersnaam` LIKE `%kim%`



Mijn stelling:

Het veld type voor de gebruikersnaam is niet een Text of VarChar, maar TinyText ?

[ Voor 22% gewijzigd door Verwijderd op 03-10-2007 10:49 ]


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

In character encodings hoef je je probleem niet te zoeken: de karakters k, i en m zijn in utf-8 en latin1 (=iso-8859-1) hetzelfde gecodeerd.

Heb je al geverifieerd dat die PHP variabelen uberhaupt altijd goed gevuld zijn? Anders zoek je met je query gewoon op een lege string.

[ Voor 37% gewijzigd door Confusion op 03-10-2007 10:50 ]

Wie trösten wir uns, die Mörder aller Mörder?


  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 25-11 00:34

WPN

josjos schreef op woensdag 03 oktober 2007 @ 09:53:
De PHP query word gewoon uitgevoerd (geen foutmeldingen) maar het aantal teruggegeven rows is 0.
Script
code:
1
2
3
4
5
$result = mysql_query("SELECT * 
        FROM leerling
        WHERE gebruikersnaam='".$_POST['gebruikersnaam']."' 
        AND password='".$_POST['wachtwoord']."'")  or die(mysql_error());
echo mysql_num_rows($result);

De output is altijd 0.
Ook met een LIKE query.
Zonder WHERE conditie geeft php en phpmyadmin wel een aantal rijen terug.
wat is de output van je query als je gewoon met een echo toont?
je werkt met charactersets (latin1 en swedish enzow) hoe staat dat op je database ingestelt?
zeker weten dat er geen problemen daardoor ontstaan met het uitvoeren van je query?

kan me voorstellen dat wanneer je een update doet dat je record naar de standaard ingestelde characterset van je database wordt geupdate en dat jij dan zoekt op de ene set terwijl het in de database in de andere set staat

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Verwijderd

LuCarD schreef op woensdag 03 oktober 2007 @ 10:06:
Waarschijnlijk zit er een verborgen character voor of achter de gebruikersnaam.

Doe een

SQL:
1
2
select concat(':', gebruikersnaam, ':') 
 from leerling
Dit lijkt mij ook het meest waarschijnlijke. Is de data geïmporteerd uit bijvoorbeeld een excel document, wordt de invoer gecontroleerd, getrimd? Probeer anders nog ...
SQL:
1
2
3
4
5
6
SELECT 
    gebruikersnaam
FROM
    leerling
WHERE
    gebruikersnaam REGEXP '^[^[:alnum:]]|[^[:alnum:]]$'

... om te kijken of er gebruikersnamen zijn die niet met een alfanumeriek karakter beginnen of eindigen (er van uitgaande dat de meeste gebruikersnamen alfanumeriek zijn dus ;) )

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Verwijderd schreef op woensdag 03 oktober 2007 @ 10:45:
Probeer deze nog-niet-eerder-letterlijk-genoemde-maar-erg-voor-de-hand-liggende query eens:

code:
1
2
3
SELECT * 
FROM `leerling` 
WHERE `gebruikersnaam` LIKE `%kim%`
Maar dan met single quotes ipv backtics om kim heen. ;)
Peluso schreef op woensdag 03 oktober 2007 @ 10:51:
[...]
wat is de output van je query als je gewoon met een echo toont?
Precies. Bekijk altijd een letterlijk voorbeeld van een query gemaakt door je script, dwz met alle vars ingevuld. Als bv. $_POST['gebruikersnaam'] leeg is, of als je per ongeluk whitespace binnen de quotes hebt staan (is niet zo in de hier gegeven vereenvoudigde code, maar misschien wel bij de echte versie) zie je het tenminste meteen.

Oftewel, leer debuggen, gebruik functies als echo(), var_dump(), print_r() om te kijken hoe je variabelen er voor staan. Zet error_reporting aan en op een hoog niveau zodat je warnings krijgt bij niet gedeclareerde vars etc. etc.

Er wordt hier heel moeilijk gedacht, maar waarschijnlijk doe je juist iets heel eenvoudigs fout. ;)

{signature}

Pagina: 1