datum opslaanin datbase
Quote:
mysql_query("INSERT INTO leden (username, password, email, validated, ip, datum )
VALUES ('" . $myusername . "', '" . $mypass1 . "', '" . $myemail . "', '0', '".$_SERVER['REMOTE_ADDR']."' '".NOW()."')");
VALUES ('" . $myusername . "', '" . $mypass1 . "', '" . $myemail . "', '0', '".$_SERVER['REMOTE_ADDR']."' '".NOW()."')");
Kan er iemand mee helpen?
Ik moet de datum in de database neer zetten. Tijdens het registreren maar weet niet wat ik fout doe.
Wanneer ik naar de registratie_bevestigen.php ga krijg ik een witte pagina.
Dit stukje code heb ik aangepast.
Gewijzigd op 03/04/2014 17:00:40 door Webmaster Robbe
NOW() niet tussen quotes.
Volgens mij mis je ook een komma tussen de waardes van Ip adres en de datum now()
bedankt. Nu werkt die wel.
Voor een gehasht (toch?) password is dat minder van belang.
Het ligt eraan welke controles je erop uit voert, ook een emailadres hoef je niet te escapen als je dat eerst valideert op geldigheid
http://en.wikipedia.org/wiki/E-mail_address#RFC_specification
Quote:
The local-part of the email address may use any of these ASCII characters.[4] RFC 6531 permits Unicode characters beyond the ASCII range:
* Uppercase and lowercase English letters (a–z, A–Z) (ASCII: 65–90, 97–122)
* Digits 0 to 9 (ASCII: 48–57)
* These special characters: ! # $ % & ' * + - / = ? ^ _ ` { | } ~ (limited support)
* Uppercase and lowercase English letters (a–z, A–Z) (ASCII: 65–90, 97–122)
* Digits 0 to 9 (ASCII: 48–57)
* These special characters: ! # $ % & ' * + - / = ? ^ _ ` { | } ~ (limited support)
$mypass1=sanitize_a_string($_POST['pass1']);
$mypass2=sanitize_a_string($_POST['pass2']);
$myemail=sanitize_a_string($_POST['email']);
Gebeurd hier al, denk ik?
sanitize_a_string() klinkt als een zelf geschreven functie die de php functie filter_input() nabootst?
Maar wat je daar precies doet?
sowieso vraag ik me af waarom je een password zou moeten sanitizen.
Mogelijk haal je daar een "gevaarlijk" teken als een ' uit de string? Dat lijkt me niet handig, aangezien je dan overal dezelfde speciale handeling op dat password moet uitvoeren, wil de gebruiker met zo'n ' in zijn pass nog in kunnen loggen.
En dan nog:
wat ik hierboven zeg, is dat een ' een geldig teken in een emailadres is.
Dan sanitize jij die ' er uit, zodat je veilig een niet bestaand mailadres opslaat,
of je laat hem staan, maar dan had je toch mysqli_real_escape_string nodig.
Best escape je niet de variabelen ergens buiten het zicht, maar direct in de query. Dan zie je dat het daar zeker gebeurt, en is het niet "ik dacht dat dat 304 regels hoger in het script wel gedaan werd"
Daarnaast "escape" je data voor een database anders dan data die naar het scherm moet, of die naar een ander merk database moet.
Toevoeging op 04/04/2014 11:03:05:
nav je prive bericht met code:
if(trim($_POST['funname'])!=''){
disconnectfromdb();
//redirect naar de index page
echo '<meta http-equiv="refresh" content="0;url=index.php" />';
}
dat werkt niet:
aangenomen dat de robot die string terug krijg en leest: je script stopt niet.
Zet daar een exit(); achter
sanitize_a_string() wordt ergens gedefineerd. Waarschijnlijk in routines.php.
En je doet een controle of de user met die username en dat wachtwoord al bestaat. Zo niet dan maak je hem aan.
Gebruikelijker is het om te controleren of de username al bestaat. Het password laat je daar buiten.
anders heb je straks 10 users met username Pietje. Is niet handig als ze dan besluiten om hun password aan te passen naar 123456
of als een user zijn password kwijt is: welke Pietje?
Verder geldt gewoon wat er op http://wiki.pfz.nl/sqlinjectie staat: overal in de query mysql_real_escape_string toepassen.
Je sanitize-functies kunnen best goed zijn, maar ook evengoed een foutje bevatten.
Dus het kan geen kwaad om gewoon te gebruikelijke escaping toe te passen.
Toevoeging op 04/04/2014 11:07:08:
en natuurlijk: passwords sla je niet plain-text op.
Die hash je minimaal met md5() of met een betere routine.
Dus als een user het wachtwoord ABcd wenst, dan doe jij
$ww = md5('ABcd');
daar komt uit 15d1fa643b0a20e21b87c413c1dd5621
en dus sla je 15d1fa643b0a20e21b87c413c1dd5621 op in het wachtwoord veld.
Wil de gebuiker later inloggen, dan haal je het dan ingevoerde wachtwoord wederom door md5() en kijk je of dát resultaat overeen komt met hetgeen in de db staat.
Voordeel is, dat als er ooit iemand in je database kan kijken, hij niet direct ABcd ziet staan.
Als je dit door hebt, kun je nog uitbreiden met salt.