Har man Xampp och Codeigniter installer lokalt på sin dator så är det inte helt uppenbart hur man ansluter från Codeigniter till MySQL-databasen.

För det första om Apache lyssnar på port 80 så ligger phpMyAdmin på adressen http://localhost/phpmyadmin. Om den lyssnar på vilken annan port som helst måste man skriva in det portnumret. Alltså: http://localhost:xxxx/phpmyadmin. Vilken port Apache lyssnar på hittar man i httpd.conf-filen.

För det andra måste man anropa sin databas med en användare som har rättigheter att ansluta till den specifika databasen och som har rättigheter att göra allt annat också. Som standard med Xampp kan man ansluta till sin databas utan vare sig användarnamn eller lösenord. Försöker man anropa sin databas utan användarnamn från Codeigniter får man felmeddelandet Unable to select the specified database, eftersom denna användare inte har rätten att göra något med databasen. Anslut istället med användare root och inget lösenord så kommer det att funka. Användare root har rättigheter att göra vad som helst med databasen.

För det tredje, om Apache lyssnar på annan port än port 80 måste man i Codeigniters database.php-fil ange vilken port MySQL lyssnar på. I vanliga fall är detta 3306.

Så här kan det se ut i Codeigniters database.php-fil som exempel:
$db[‘default’][‘hostname’] = ‘localhost:3306’;
$db[‘default’][‘username’] = ‘root’;
$db[‘default’][‘password’] = ”;
$db[‘default’][‘database’] = ‘min_databas’;
$db[‘default’][‘dbdriver’] = ‘mysql’;

Codeigniter är ett bra framework för php. Men det finns ett jobbigt moment med detta framework, och det är att index.php inte automatiskt tas bort från url:er trots att man oftast inte vill ha det i sina projekt.

I user guiden rekommenderar de att man använder .htaccess-filen och modrewrite för att ta bort index.php. De rekommenderar följande bit modrewrite kod:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

Stycket innebär att index.php plockas bort men man får även normal tillgång till index.php-filen, en mapp som heter images och robots.txt filen.

Jag hittade ett modrewrite-stycke på nätet som tar bättre hänsyn till vad en användare begär i sina url:er:


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]


ErrorDocument 404 /index.php

I det här fallet kommer index.php att tas bort, men man har även normal tillgång till alla filer och mappar och inte bara till de filer och mappar som exklusivt är namngivna som i första fallet.

Sen finns det ett irriterande special fall som förutom modrewrite kräver en extra åtgärd. Det är när man använder form_open-metoden som ingår i Form Helper som är specialfallet. När man använder denna metod för att ange den öppnande

-taggen för ett formulär och sedan använder formuläret och skickar iväg det så ser man att index.php återvänder i url:erna på den resulterande sidan, trots att man använder en htaccess-fil för att ta bort index.php. Lösningen här är enkel men inte helt uppenbar. Öppna config.php i config-mappen. Omkring rad 30 ser du att det står:

$config[‘index_page’] = ‘index.php’;

Men som det står i den beskrivande texten för denna inställning så ska denna inställning lämnas blank när man använder en htaccess-fil för att ta bort index.php. Så det är bara att ändra denna till:

$config[‘index_page’] = ”;

Nu ska index.php vara borta i alla url:er överallt när man använder Codeigniter.