fout in me script snap het niet. php7?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

Nilix bies

nilix bies

06/08/2018 13:09:24
Quote Anchor link
Ja oke dat snap ik maar alle wachtwoorden moeten worden om gezet.. Maar Hier zal toch wel eerst het voorste gedeelte van de gebruikersnaam goed moeten worden verwerkt?

Nu is de gebruikersnaam vast gesteld lijkt me ??

Of zie ik dit verkeert?
 
PHP hulp

PHP hulp

25/04/2024 02:50:36
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 13:15:35
Quote Anchor link
Als er wordt voldaan aan 1 gevonden record met de juiste gebruikersnaam, dan vindt de controle op het wachtwoord plaats. Dus de gebruikernaam klopt verder. Aan jouw om een scriptje te maken om eenmalig de wachtwoorden om te zetten.
 
Nilix bies

nilix bies

06/08/2018 13:26:21
Quote Anchor link
Heb dit al gedaan voor de gebruiker gilbert en de sleutel in de mysql geplakt op de juiste plek onder wachtwoord.
Toch logt het script nog nu nog steeds niet in.. en komt er nog te staan verkeerde wachtwoord
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 13:30:07
Quote Anchor link
Dan moet je even debuggen wat $password_db als inhoud biedt, en wat er in password_hash($_POST['wachtwoord'], PASSWORD_DEFAULT) staat (lijn 36).

Debuggen is de eerste oplossing als je merkt dat variabelen niet de juiste waarden geven.
 
Nilix bies

nilix bies

06/08/2018 13:40:31
Quote Anchor link
De inhoud van $password_db klopt wel met dat er in de data base staat..

pass uit db... rox

Verkeerd wachtwoord!

Heb het hier met en zonder sleutel het wachtwoord in de data base gezet...
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 13:43:43
Quote Anchor link
Als rox letterlijk in de databse staat, dan gaat dat niet werken ;-)
 
Nilix bies

nilix bies

06/08/2018 13:48:50
Quote Anchor link
Ik heb het nu goed.. De gebruiken gilbert kan inloggen in de site.. Zijn wachtwoord word nu herkent..

Maar probleem blijft nog steeds .. Er staat nu dan de gebruiker gilbert is zoals eerder de variabel werd op gegeven door :
$naam = 'Gilbert';

$gebrnaam = strtolower(trim($naam));

Nu kan een andere gebruiker niet inloggen nog?
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 13:53:42
Quote Anchor link
De naam wordt normaal altijd aan de hand van een $_POST-request opgehaald. Dan vindt de validatie plaats of de gebruiker bestaat, en dan pas vindt de controle van het wachtwoord plaats.

Normaal hoor je gebruiker niet hard-coded in je script te zetten. Ik deed dat enkel vanwege mijn test-case. Dan wil je alles zo compact mogelijk hebben. (plus het feit dat er de sandbox geen mysql-support heeft)
 
Nilix bies

nilix bies

06/08/2018 13:57:21
Quote Anchor link
Ben nog even aan het proberen geweest..
Het lijkt hier fout mee te gaan.

//$gebrnaam = strtolower(mysqli_real_escape_string(trim($_POST['gebruikersnaam'])));
deze regel heb ik even vervangen door:
$gebrnaam = strtolower($_POST['gebruikersnaam']);

Dan werkt het wel .. En is de gebruikersnaam te lezen.. en kunnen meerdere namen inloggen .
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 14:01:14
Quote Anchor link
Ik zou sowieso wel mysqli_real_escape_string gebruiken, nu ben je vatbaar voor SQL-injection. Ik zie wel dat de connectie-parameter mist.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$gebrnaam
= strtolower(mysqli_real_escape_string($con,trim($_POST['gebruikersnaam'])));
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

06/08/2018 16:12:10
Quote Anchor link
Escaping voor een specifieke context is altijd de laatste bewerking die je uit zou moeten voeren. Oftewel, eerst prepareer je de data zoals je die zou willen hebben, en dan escape je pas.

Aan de andere kant, die strtolower en trim zijn nogal loos niet? Het is aan de gebruiker om zijn/haar gebruikersnaam goed in te typen. Is er een specifieke reden om trim en strtolower te gebruiken, of heb je (de topicstarter) dit ergens vandaan geknipt en geplakt zonder er echt over na te denken?
Gewijzigd op 06/08/2018 16:12:41 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/08/2018 22:29:20
Quote Anchor link
- Ariën - op 06/08/2018 14:01:14:
Ik zie wel dat de connectie-parameter mist.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$gebrnaam
= strtolower(mysqli_real_escape_string($con,trim($_POST['gebruikersnaam'])));
?>


Jep dat zal de oorzaak zijn..



Toevoeging op 06/08/2018 22:34:47:

>> Aan de andere kant, die strtolower en trim zijn nogal loos niet?

Dat vind ik dan persoonlijk weer een kwestie van smaak. Het mag strtolower als je dat wilt maar is niet verplicht. Je bereikt er mee dat 'GeBrUiKeRsNaAm' doorgaat als 'gebruikersnaam' Nilix mag zich afvragen of hij (of zij) dat wil. trim haalt een eventuele spatie voor of achter de gebruikersnaam weg. Dit bespaart verwarring bij de gebruikers die 50+ zijn :-)
 
- Ariën  -
Beheerder

- Ariën -

06/08/2018 22:35:39
Quote Anchor link
Maar anders had je vast wel een error moeten krijgen. Dus als je niks ziet, dan is je fouten-rapportage niet aanwezig, en dat is niet handig tijdens het ontwikkelen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/08/2018 22:38:18
Quote Anchor link
Het kan overigens geen kwaad om een keer goed over het begrip gebruikersnaam na te denken.

- Moet een gebruikersnaam uniek zijn?
- Wat nou als je twee gebruikers hebt die dezelfde gebruikersnaam gebruiken?
- en wat nou als die twee gebruikers met dezelfde naam ook nog hetzelfde wachtwoord gebruiken ?
- Of laat ik gebruikers uitsluitend met een emailadres inloggen welke dan wel uniek moet zijn?

Allemaal leuke hersenkrakers.

Toevoeging op 06/08/2018 22:45:08:

- Ariën - op 06/08/2018 22:35:39:
Maar anders had je vast wel een error moeten krijgen. Dus als je niks ziet, dan is je fouten-rapportage niet aanwezig, en dat is niet handig tijdens het ontwikkelen.


Das dus ook al een hoofdstuk apart. Neem nou de functie mysqli_query(). Op php.net kun je lezen dat deze functie ook een FALSE terug kan geven als er iets foutgaat (Wat ook heel erg makkelijk kan gebeuren). Als je dat niet afvangt in je code dan zal je applicatie op een van de volgende regels fouten gaan genereren.

Voorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$result
= mysqli_query($con, 'SELECT * WHERE 1=1');
if(FALSE === $result) {
    $errors[] = 'Fout in query: ' . mysqli_error($con);
}

?>
Gewijzigd op 06/08/2018 22:55:22 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

06/08/2018 23:23:18
Quote Anchor link
Quote:
Dat vind ik dan persoonlijk weer een kwestie van smaak. Het mag strtolower als je dat wilt maar is niet verplicht. Je bereikt er mee dat 'GeBrUiKeRsNaAm' doorgaat als 'gebruikersnaam' Nilix mag zich afvragen of hij (of zij) dat wil. trim haalt een eventuele spatie voor of achter de gebruikersnaam weg. Dit bespaart verwarring bij de gebruikers die 50+ zijn :-)

Dat is ook een kwestie van smaak. Naar mijn mening zijn strtolower() en trim() in dit geval bewerkingen die recht proberen te buigen wat krom is. Een gebruikersnaam met teveel spaties aan het begin en aan het einde is naar alle waarschijnlijkheid gewoon verkeerde invoer, verkeerde invoer moet je niet proberen te repareren, verkeerde invoer moet je gewoon afkeuren.

Quote:
- Moet een gebruikersnaam uniek zijn?

Dat is eigenlijk een verkeerde vraag. De juiste vraag is eigenlijk: wat gebruik ik in mijn systeem om gebruikers van elkaar te onderscheiden / uniek te identificeren. In bijna alle gevallen is dat een of andere entiteit die iemand uniek maakt, zoals een (unieke) gebruikersnaam, een e-mailadres, een abonneenummer etc.

Quote:
- Wat nou als je twee gebruikers hebt die dezelfde gebruikersnaam gebruiken?

Vanuit een gebruikersperspectief is dat verwarrend en vanuit een ontwerperspectief is dat niet zo'n fantastische keuze. Dit is dus een situatie die je gewoon wilt vermijden, vooral als de gebruikersnaam een gebruiker uniek zou moeten identificeren.

Quote:
- en wat nou als die twee gebruikers met dezelfde naam ook nog hetzelfde wachtwoord gebruiken ?

Dezelfde namen is iets wat je zou moeten vermijden, hetzelfde wachtwoord maakt echt geen biet uit.

Quote:
- Of laat ik gebruikers uitsluitend met een emailadres inloggen welke dan wel uniek moet zijn?

Dat is ook een mogelijkheid, maar wat je als identificerende entiteit gebruikt hangt mede af van het systeem dat je bouwt.

Quote:
Allemaal leuke hersenkrakers.

Mja, als je iets eerst ontwerpt en dan bouwt is het makkelijker om van ongewenste sitiaties weg te sturen. Als je meteen begint met code kloppen sta je meestal na verloop van tijd gewoon vast in de (je eigen) modder.

Dat gezegd hebbende, als je een gebruikersnaam als identificerend attribuut hebt, zou ik deze nog steeds case-insensitive opslaan en controles case-insensitive uitvoeren. Immers, als iemand zich registreert als gebruiker "HENK" terwijl er al een gebruiker "Henk" in je database zit, dan wil je deze tweede persoon vriendelijk verzoeken om zijn (of haar :)) naam aan te passen, omdat "HENK" (case-insensitive) al in gebruik is.

Misschien realiseren mensen zich dit niet eens maar als je zoiets doet als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT *
FROM ...
WHERE <case insensitive kolom> = '<een of andere waarde>'

dan is deze vergelijking automatisch case-insensitive.
Gewijzigd op 06/08/2018 23:25:45 door Thomas van den Heuvel
 

07/08/2018 12:39:22
Quote Anchor link
Thomas van den Heuvel op 06/08/2018 23:23:18:
Quote:
- Wat nou als je twee gebruikers hebt die dezelfde gebruikersnaam gebruiken?

Vanuit een gebruikersperspectief is dat verwarrend en vanuit een ontwerperspectief is dat niet zo'n fantastische keuze. Dit is dus een situatie die je gewoon wilt vermijden, vooral als de gebruikersnaam een gebruiker uniek zou moeten identificeren.

Wanneer de gebruikersnamen uniek zijn maakt het inderdaad geen biet uit of de wachtwoorden gelijk zijn. Maar wanneer de gebruikersnamen niet uniek zijn is het verhaal al heel anders.

Zoek de verschillen:
piet met wachtwoord abc
piet met wachtwoord abc
piet met wachtwoord abc

Dus als je niet unieke gebruikersnamen toe staat moeten de wachtwoorden uniek zijn anders krijg je nog steeds geen uniek resultaat
 
Thomas van den Heuvel

Thomas van den Heuvel

07/08/2018 14:39:05
Quote Anchor link
Mja, maar dat is zoiets als:

Dus als je <een onhandige constructie toepast> dan <moet je je in allerlei rare bochten wringen>.

De notie om dan maar het wachtwoord uniek te maken is op zijn zachtst gezegd redelijk krankjorem. Hoe ga je dit afdwingen? Krijgt de gebruiker bij wijziging hiervan een melding "Sorry, dit wachtwoord is al in gebruik?". En wat als iemand niet meer bij zijn account kan, hoe gaat dat dan werken? Een e-mailadres zou dan nog uitkomst kunnen bieden.

Misschien is het handig om ook onderscheid te maken in welke betekenis je "gebruikersnaam" gebruikt:
- een publieke naam waaronder jij bij andere gebruikers bekend staat
- de naam waarmee je jezelf authenticeert bij een loginsysteem

In beide gevallen is het niet handig (of simpelweg onmogelijk tenzij je voortborduurt op dit slechte ontwerp) dat dit soort, of sterk gelijkende, namen niet uniek zijn.

Je zou zelfs zo ver kunnen gaan dat je zowel "gebruikersnaam" als e-mailadres (los van elkaar) de verplichting oplegt dat deze beide uniek zouden moeten zijn. Dit voorkomt zoveel gezeik down the road op het moment dat je een groot ledensysteem krijgt, zowel voor beheer als gebruik door eindgebruikers zelf.
 

07/08/2018 16:13:42
Quote Anchor link
Ik zeg ook niet dat het een juiste methode is, maar als je niet controleert bij de aanmelding of de gebruikersnaam al bestaat moet je wel wat
 
Thomas van den Heuvel

Thomas van den Heuvel

07/08/2018 16:55:15
Quote Anchor link
Bernhard Flokstra op 07/08/2018 16:13:42:
maar als je niet controleert bij de aanmelding of de gebruikersnaam al bestaat

Daar ontstaat het probleem, dus daar moet je het ook oplossen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

07/08/2018 17:12:01
Quote Anchor link
Hey Thomas bedankt voor de bijdrage. Mijn bericht was vooral bedoeld richting de Topic starter welke waarschijnlijk niet zo veel ervaring heeft als jij. Ik probeer bij de starters een denkproces te starten. Dat is - denk ik - het meest zinvol. In dit geval was de bedoeling om Nilix na te laten denken over het 'gegarandeerd juist onderscheiden' van verschillende gebruikers in zijn applicatie :-O
 

Pagina: « vorige 1 2 3 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.