Zo, daar was ik weer, maar omdat het aanpassen moeilijk was, besloot ik maar gewoon uit niets te beginnen, want dat gaat beter werken en dan leer ik er meer van dan alleen van copy-pasten.
Ik heb dus effe heel simpel een formulier gemaakt met naam, pass, en e-mailadres
Nu heb ik een DB gemaakt, met een table 'users' erin. Hier is ook, al een onderverdeling van
*id (met auto_increment)
*name
*pass
*email
Dus, dat zit ook wel goed.
Nu krijg ik alleen een fout,
Parse error: syntax error, unexpected T_VARIABLE in /home/***/domains/***.nl/public_html/tt/register.inc.php on line 4
En het betreft de onderstaande regel.
$sql = "INSERT INTO users (name,pass,email) VALUES ('$name','$email','$pass')";
@Dem Ian
Heb je al eens eerder ergens gezien een opmerking van jou: als het werkt, ben ik tevreden.
Zo werkt het dus niet. Ook al is TS net begonnen, leer het dan gelijk goed. Anders kan hij/zij straks weer opnieuw gaan beginnen.
Ik wil het wel goed leren. Maar te grote stappen maken ben ik geen fan van.
Ben al wel weer wat verder met schrijven, want ben ondertussen al 2389237928x voor mn gevoel opnieuw begonnen.
Het ziet er nu al zo uit, werkt ook, alleen schrijft niet in de database. Alsof er geen connectie is, terwijl die er wel is, anders zou er een error zijn nml.
//Functie om de registratie in gang te zetten.
function register(){
//Variablen toekennen om de informatie naar de database te sturen.
$login = $_REQUEST['login'];
$pass = $_REQUEST['pass'];
$password_conf = $_REQUEST['password_conf'];
$email = $_REQUEST['email'];
$date = $_REQUEST['date'];
//Controle of alles is ingevuld.
if(empty($login)) {
die("Oeps! Je hebt je gebruikersnaam nog niet ingevuld!");
}
if(empty($pass)) {
die("Oeps! Je hebt je wachtwoord nog niet ingevuld!");
}
if(empty($password_conf)) {
die("Oeps! Je hebt je wachtwoord nog niet bevestigt!");
}
if(empty($email)) {
die("Oeps! Je hebt je email adres nog niet ingevuld!");
}
//Controleer of de e-mailadressen of gebruikersnamen al in de DB voorkomen.
$usercheck = mysql_query("SELECT login FROM users WHERE login='$login'");
$do_user_check = mysql_num_rows($usercheck);
$emailcheck = mysql_query("SELECT email FROM users WHERE email='$email'");
$do_email_check = mysql_num_rows($emailcheck);
if($do_usercheck > 0 or $do_email_check > 0 ) {
die("Dit e-mail adres of deze gebruikersnaam is bij ons al bekend. Gebruik de 'Wachtwoord Vergeten' functie.");
}
//Controleer op dezelfde wachtwoorden.
if($pass != $password_conf){
die("De wachtwoorden komen niet overeen, probeer opnieuw.");
}
//Als alles voldaan is mag er geregistreerd worden.
$insert = mysql_query("INSERT INTO users (login, pass, email) VALUES ('$login', '$pass', '$email')");
if(!$insert){
die("There's little problem: ".mysql_error());
}
echo $login.", We hebben je succesvol kunnen registreren. Ga door naar de <br><a href=login.php>Login</a> of <a href=index.php>Index</a>";
Een tip die ik eens kreeg, om extra veiligheid te verkrijgen was de variabelen waarmee je 'inlogt' op je SQL-database te unsetten.
Stel dat iemand in KAN breken en een simpele echo $password; voor elkaar krijgt? Dan weet hij dus het wachtwoord.
Dus unset deze wachtwoorden OF zet ze direct in de opdracht.
Voorbeeldje:
Ik wil het wel goed leren. Maar te grote stappen maken ben ik geen fan van.
Nee, juist kleine stapjes, maar dan liever wel de goede...
Ik ga er van uit dat je nog een nettere/betere foutafhandeling gaat inbouwen. 'die' is dat niet. Iemand gaat toch niet dood, als hij een veld niet (juist) heeft ingevuld. Jouw script wel...
Je formulier heeft als method --> POST, waarom dan $_REQUEST gebruiken en niet $_POST?
Waarom die functie register() eigenlijk?
Je controle op de input is/blijft minimaal.
In je query's --> variabelen buiten quotes en er is geen enkele beveiliging op de input.
Echo je insert-query eens naar het scherm. Klopt het dan wat er staat?
Wat als je die kopieert naar phpadmin en daar direct uitvoert. Foutmelding?
Binnen html " gebruiken (en binnen php ') -->
<?php
echo $login.', We hebben je succesvol kunnen registreren. Ga door naar de <br><a href="login.php">Login</a> of <a href="index.php">Index</a>';
?>
Foutafhandeling kan inderdaad beter, wist alleen niet hoe ik dit snel netjes ging maken, zoals je misschien al wel door had, ik zoek veel verschillende source's op om te kijken hoe ze dingen afsluiten, of hoe ze dingen versturen. Ik probeer op basis daarvan mijn eigen login systeempje te maken.
Waarschijnlijk, (waar je me ook op wijst) is het nog niet veilig genoeg. Ik ben in eerste instantie tevreden als het uberhaupt werkt, dan kan ik in ieder geval vordering zien, en daarna gaan aanpassen zodat het ook niet meer hack gevoelig is, voor SQLI Injection, sessionstealing, en dat soort dergelijke dingen.
En, als laatste, Hoe bedoelt u de volgende zin?
Je controle op de input is/blijft minimaal.
En, als laatste, Hoe bedoelt u de volgende zin?
Je controle op de input is/blijft minimaal.
Is nog vroeg, mogelijk kijk ik er over heen:
Waar controleer je of de ingevoerde datum bestaat?
Waar controleer je of de opbouw van e-mail goed is (deel voor @, deel er na en een . er in)?
Zijn er geen eisen aan een login naam/wachtwoord?
Dat klopt inderdaad, dat bestaat allemaal nog niet, omdat ik NIET zou weten hoe ik dat moet controleren, maar dat zijn dingen die ik natuurlijk later pas kan implementeren.
Zoals ik al zei, als ik een werkend script heb, wat ook serieus registreert, kan ik het gaan uitbreiden tot een wat groter fatsoenlijk script wat ik zelf begrijp, aan anderen kan uitleggen, en waar ik zelf ook een beetje mee kan spelen, (aanpassen, verbeteren, nieuwe dingen toevoegen)