http://php.net/manual/en/language.operators.string.php
De correcte manier om variabelen in een string te krijgen.
http://php.net/manual/en/language.operators.string.php
De correcte manier om variabelen in een string te krijgen.
$connection_database1 = mysql_connect($host, $userdb, $passdb) or die(mysql_error());
$connection_database2 = mysql_connect($host, $userdb, $passdb) or die(mysql_error());
mysql_select_db($database1, $connection_database1) or die(mysql_error());
mysql_select_db($database2, $connection_database2) or die(mysql_error());
mysql_query($sql, $connection_database1);
mysql_query($sql, $connection_database2);
Dat is al ietsjes netter. Betere error handling is aan te raden, maar het gaat om het idee.
Standaard wordt de laatst geopende connectie gebruikt.
http://jaspan.com/improved_per…ogin_cookie_best_practice
Goed leesvoer.
Verder heeft je database niets met je sessies te maken. Tenzij jij ze via php code aan elkaar gekoppeld hebt zodat als er iets in de database mist je de sessie verwijderd.
Er bestaan verschillende ereg() functies eregi() is bijvoorbeeld niet hoofdletter gevoellig. Maar bij preg_match() moet je dat op een andere manier aangeven: aan het einde van de string. Maar dan zou het moeilijk te bepalen zijn wat hij de regex hoort en wat een modifier is.
Daarom moet je het begin en eind van de regex aangeven met tekens naar eigen keus. De slash wordt het meest gebruikt. Het eerste teken in de string moet dus ook gebruikt worden om het einde van de regex aan te geven, in jouw geval is dat ^. Maar aangezien het dakje een speciale betekenis heeft (het matched het begin van een string) wil je waarschijnlijk iets anders gebruiken.
is dus wat je wilt. De slash zou je ook kunnen vervangen door een hekje, een een tilde, een plus teken of wat je maar wilt.
Zie http://www.php.net/manual/en/regexp.reference.delimiters.php
Haal regel 23 weg...
Waarom staat er nu een mysql_query() op regel 23? Zonder ; nog wel.
Zie http://www.phphulp.nl/php/tuto…fhandeling-query-sql/735/
Vergeet display_errors niet.
Laten we om te beginnen eens de fout lezen: "Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/marco/public_html/Projecten/login-zelfscript/config.php on line 27." mysql_num_rows() heeft een verkeerde waarde gekregen voor de eerste parameter op regel 27.
Als we regel 27 er even bij pakken: $count = mysql_num_rows($result); zien we dat het ook nog eens maar een parameter krijgt, namelijk $result. $result is blijkbaar een boolean volgens de foutmelding terwijl mysql_num_rows() een resource verwacht.
Laten we nu eens zoeken wat $result bevat. Ah, gevonden: $result = mysql_query($sql); mysql_query() retourneert blijkbaar een boolean, laten we eens kijken wat het nog allemaal kan retourneren.
Op http://nl2.php.net/manual/en/function.mysql-query.php kunnen we lezen dat mysql_query() voor een SELECT/SHOW/DESCRIBE/EXPLAIN query een resource retourneert wanneer de query succesvol is of anders FALSE.
Ok, is de query die we uit willen voeren een SELECT/SHOW/DESCRIBE/EXPLAIN query? De query die we uit willen voeren is $sql, om laten we $sql er even bij pakken dan maar: $sql="SELECT * FROM $tbl_name WHERE username='$username and password='$password'";
Ja, $sql is een SELECT query dus mysql_query() retouneerd een resource wanneer de query geen fout bevat, en FALSE (een boolean) wanneer deze wel een fout bevat.
Nu je dat allemaal zelf hebt gedaan zie je misschien ook wel dat je een ' mist na $username.
Verder heb ik het volgende te melden:
- Vervang session_is_registered('username') door isset($_SESSION['username'])
- zie http://nl2.php.net/manual/en/function.session-destroy.php
- gebruik <?php in plaats van de kortere maar niet door elke server ondersteunde <?
Dat is de code die het formulier weergeeft, niet de code die het inloggen afhandelt.
In dat geval hebben we meer info nodig om mee te werken.
De code die je inlogt en de code die controleert of je bent ingelogd bijvoorbeeld.
Je hebt de gegevens voor de database connectie ingevuld, goed. Maar heb je ook die database gevuld met tabellen? Waarschijnlijk is er wel een bestand met een .sql extensie of naam die "database", "mysql" of "sql" bevat om te importeren. (Via phpmyadmin bijvoorbeeld.)
Mcrypt is een encryptie module. Encryptie is omkeerbaar (decoderen). Hashing niet.
Ben je zelf iets aan het schrijven? Want dat wil je absoluut niet doen.
Gebruik een bestaand algoritme gemaakt door cryptografen. Kijk eens naar de mcrypt module in PHP.
Bij je "nieuwe link" rewrite rule moet er volgens jouw code verplicht een slash aan het einde van de url. Als je een vraagteken achter de slash zet wordt de slash optioneel.
Alleen mysql_real_escape_string() is goed voor wanneer je iets in de database wilt zetten. Wanneer je user input in html wilt zetten gebruik je functies als strip_tags/htmlspecialchars/htmlentities.
Dat is de goede werkwijze.
Zelfs htmlentities vervangt die tekens niet. htmlspecialchars, mysql_real_escape_string etc zijn functies om data te sanitizen, als je niet ook nog aan valideren doet ben je verkeerd bezig.
Valideer de correctheid van de data die je ontvangt. Die query zou niet eens uitgevoerd mogen worden als iemand AND bank = bank + 1000000 invoert.
mysql_real_escape_string is goed, htmlspecialchars/htmlentities totaal niet! htmlspecialchars/htmlentities gebruik je om tekst die HTML kan bevatten veilig tussen andere HTML te stoppen. mysql_real_escape_string gebruik je om tekst die SQL kan bevatten veilig tussen andere SQL te stoppen.
Welke je moet gebruiken hangt dus van de situatie af.