Posts Tagged ‘PHP’

Funktioner för databashantering i PHP

augusti 12th, 2010

PHPGick igenom min utvecklingshårddisk (sommarstädning) och hittade några roliga databasfunktion som jag kodade ihop för cirka ett år sedan när jag hade tråkigt. Tyvärr verkar det som att jag inte fixade till delete-funktionen, så den får ni vara utan tills att jag får tid att göra det. De andra funktionerna ska fungera, gör dem inte det så hojta till.

Funktionerna är ganska simpla, inte det bästa jag gjort, kan skrivas bättre! De klarar också bara av de absolut enklaste SQL-frågorna.

Ni får använda det här hur ni vill. Se dock till att er webbserver har stöd för PDO.

PHP-fil för att hantera databasanslutningen

<?php
$hostname = 'localhost'; // Adress till databasen
$usr = ''; //Användarnamn för databasen
$pwd = ''; //Lösenord för databasen
$database = ''; //Namnet på databasen
 
//Följande skapar själva anslutningen till databasen
try {
$db_connect = new PDO("mysql:host=$hostname;dbname=$database", $usr, $pwd);
	}
 
catch(PDOException $e)
    {
echo $e->getMessage();
    }
?>

PHP-fil med funktionerna

<?php
/*########################################*/
/*################ SELECT ###################*/
/*########################################*/
function dbSelect($table, $field, $query, $attributes, $output) {
require ("connect.php");
 
$dbQuery 	= null;
$dbType 	= null;
$attribute	= null;
 
	if($query) {
		foreach($query as $id => $value) {
			$dbQuery .= $id." = :".$id.' AND ';
		}	
		$dbQuery = " WHERE"." ".$dbQuery;
		$dbQuery = substr($dbQuery, 0, -5);
	}
	$dbQuery = trim($dbQuery);
 
	foreach($attributes as $id => $att) {
		$attribute .= " ".$id." ".$att;
	}
 
	$do = $db_connect->prepare("SELECT $field FROM $table $dbQuery $attribute");
 
	foreach($query as $id => $value) {
		switch(is_int($value)) {
			case true: 	$dType = PDO::PARAM_INT; break;
			case false:	$dType = PDO::PARAM_STR; break;
		}
		$do->bindValue(':'.$id, $value, $dbType);
		unset($value);
	}
	$do->execute();
	switch($output) {
		case "all": $result = $do->fetchAll();
	break;
		case "item": $result = $do->fetch(PDO::FETCH_OBJ);
	break;
	}
 
return $result;
}
 
/*############################################*/
/*################# INSERT ######################*/
/*############################################*/
 
function dbInsert($table, $insert) {
require ("connect.php");
 
$fields = null;
$values = null;
 
	foreach($insert as $id => $value) {
		$fields .= $id.", ";
		$values .= ":".$id.", ";
	}
 
	$fields = substr($fields, 0, -2);
	$values = substr($values, 0, -2);
 
	$do = $db_connect->prepare("INSERT INTO $table ($fields) VALUES ($values)");
	foreach($insert as $id => $value) {
		$do->bindParam(':'.$id, $value);
		unset($value);
	}	
	$do->execute();
}
 
/*#############################################*/
/*################## UPDATE #####################*/
/*############################################*/
 
function dbUpdate($table, $sets, $wheres) {
require ("connect.php");
 
	$where = null;
	$set = null;
 
	foreach($wheres as $id => $value) {
		$where .= $id.' = '."'$value'".' AND ';
	}
	$where = " WHERE"." ".$where;
	$where = substr($where, 0, -5);
 
	foreach($sets as $id => $value) {
		$set .= $id."=:".$id.", ";
	}
 
	$set = "SET ".$set;
	$set = substr($set, 0, -2)." ";
 
	$do = $db_connect->prepare("UPDATE $table $set $where");
	foreach($sets as $id => $val) {
		$do->bindParam(':'.$id, $val);
		unset($val);
	}
	$do->execute();
}

Hur man använder funktionerna

/* SELECT */
$selects = dbSelect("namn på tabellen", "fält1,fält2,fält3",			
			$where = array(
				"fältnamn" => "data",
			), 
			$attributes = array (
                               "ORDER BY" => "fältnamn desc"
			),
			$output = "item"
	  );
 
/* För att skriva ut en hämtad rad (lägg märke till att $output = "item" */
echo $selects->id;
 
/* Sätt output till "all" om du hämtar flera rader*/
$output => "all"
 
/* Om output är satt till "all" kan du göra så här för att lista det som hämtats */
foreach($selects as $id => $row) {
	echo $row["fältnamn1"];
	echo $row["fältnamn2"];
	//etc....
}
 
/* attributes används när man vill ha LIMIT eller ORDER BY */
$attributes = array (	
			"ORDER BY"=> "name DESC",
			"LIMIT" => 5,
			 ),
 
 
/*
#####################################
#####################################
#####################################
*/
 
/* INSERT */
dbInsert("tabellnamn",
		$insert = array(
			"fältnamn1" =>"värde1",
			"fältnamn2" =>"värde",
		)
	);
 
 
/*
#####################################
#####################################
#####################################
*/
 
/* UPDATE*/
dbUpdate("tabellnamn",
		$change = array(
			"fältnamn1" =>"värde1",
			"fältnamn2" =>"värde",
		)
	);

Lär dig PHP – Funktioner

augusti 6th, 2010

PHPFunktioner är ett sätt att dela upp kodstycken på, dels för att skapa en bättre struktur, men kanske framför allt för att ta ut bitar ur koden som ska användas mer än en gång. Man kan genom dela upp kod som ska återanvändas vid flera tillfällen använda include, hämta in funktioner från PHP-filer och på så vis få en bättre och mer översiktlig struktur på all kod.

Funktionerna kan även göras ”dynamiska” för att minska mängden kod du behöver skriva. Beroende på vad vi skickar till funktionen, säga åt den att göra ett av x-antal saker.

Ett väldigt simpelt exempel på detta är om vi skulle få för oss att bygga någonting som antingen multiplicerar eller adderar två tal man skriver in i ett formulär.

Exempel 16 – mini-miniräknare

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>räknare</title>
</head>
<body>
	<?php
	function _calc($cmethod, $varde_1, $varde_2) {
 
		if($cmethod == "multiply") {
			$totalt = $varde_1 * $varde_2;
 
		} elseif($cmethod = "add") {
			$totalt = $varde_1 + $varde_2;
 
		} else {
			$total	= "n/a";
 
		}
		return $totalt;
	 }
 
	if(isset($_POST['skicka'])) {
 
		$tal_1 = $_POST['tal_1'];
		$tal_2 = $_POST['tal_2'];
		$ctype = $_POST['ctype'];
 
			if (empty($tal_1) || empty ($tal_2)) {
				echo 'Du har inte fyllt i båda fälten korrekt';
 
			} elseif(is_numeric($tal_1) == false || is_numeric($tal_2) == false) {
				echo 'Du får bara ange siffror i fälten';
 
			} else {
				echo "$tal_1 * $tal_2 = " . _calc($ctype,$tal_1,$tal_2);
 
			}
 
	}
 
	?>
	<form method="post" action="ex.php">
		Skriv in ett tal<br />
		<input type="text" name="tal_1" /><br />
		<input type="radio" name="ctype" value="multiply" checked> *<br />
		<input type="radio" name="ctype" value="add"> +<br />
		Skriv in ett till tal<br />
		<input type="text" name="tal_2" /><br />
		<input type="submit" name="skicka" value="skicka" />
	</form>
</body>
</html>

Genom att använda ett formulär, en funktion och ett par variablar, får vi en ack så liten, men välfungerande miniräknare som kan hantera multiplikation och addition.

Genom att vi först via formuläret skriver in två tal samt räknesättet och trycker skicka, så laddas sidan om och sparar värdena i $tal_1- och $tal_2-variablarna. Vi kan sedan i nästa steg kontrollera om dessa två variablar innehåller någonting. Om de inte gör det skriver vi ut ett felmeddelande, om de innehåller någonting går skriptet vidare till nästa del.

I elseif kontrollerar vi om de inskickade värdena är numeriska, och det görs med PHP-funktionen is_numeric() som returnerar false om värdena är allt annat än numeriska.

Om elseif inte blir sann (värdena är numeriska) tar else-satsen över och här skickar vi värdena i variablerna till funktionen _calc() där dem sparas om till $cmethod, $varde_1 och $varde_2.

Därefter kontrollerar vi vilket räknesätt funktionen ska använda, dvs kollar vilken radio-knapp som var ikryssad, och sedan multipliceras/adderas talen och sparas i variablen $totalt som vi genom return skickar tillbaka, in i echo. Vi anropar alltså funktionen _calc() i samma veva som vi skriver ut allting.

Vi skulle mycket enkelt kunna flytta ut funktionen _calc() genom att använda include(). Detta gör vi på följande sätt.

Funktionsfil.php

<?php
	function _calc($cmethod, $varde_1, $varde_2) {
 
		if($cmethod == "multiply") {
			$totalt = $varde_1 * $varde_2;
 
		} elseif($cmethod = "add") {
			$totalt = $varde_1 + $varde_2;
 
		} else {
			$total	= "n/a";
 
		}
		return $totalt;
	 }
?>

Huvud_fil.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>räknare</title>
</head>
<body>
 
	<?php
        include("Funktionsfil.php");
	if(isset($_POST['skicka'])) {
 
		$tal_1 = $_POST['tal_1'];
		$tal_2 = $_POST['tal_2'];
		$ctype = $_POST['ctype'];
 
			if (empty($tal_1) || empty ($tal_2)) {
				echo 'Du har inte fyllt i båda fälten korrekt';
 
			} elseif(is_numeric($tal_1) == false || is_numeric($tal_2) == false) {
				echo 'Du får bara ange siffror i fälten';
 
			}else {
				echo "$tal_1 * $tal_2 = " . _calc($ctype,$tal_1,$tal_2);
 
			}
 
	}
 
	?>
	<form method="post" action="ex.php">
		Skriv in ett tal<br />
		<input type="text" name="tal_1" /><br />
		<input type="radio" name="ctype" value="multiply" checked> *<br />
		<input type="radio" name="ctype" value="add"> +<br />
		Skriv in ett till tal<br />
		<input type="text" name="tal_2" /><br />
		<input type="submit" name="skicka" value="skicka" />
	</form>
</body>
</html>

Vi har nu placerat funktionen _calc() i en annan fil som vi genom PHP-funktionen include() anropar. På så sätt kan vi använda funktionen _calc () fler gånger i andra script. Att programmera med funktioner är att rekommendera vid större applikationer och vid tillfällen då kod kommer upprepas.

Lär dig PHP 3 – Formulär

augusti 5th, 2010

PHPDet har blivit dags att för första gången blanda in lite HTML i PHP-programmeringen. Att lära sig hur man hanterar formulär med PHP är ett måste! Via formulärer kan vi bland annat skapa login-funktioner, gästböcker, forum och mycket mycket mer. Ni bör dock ha det i åtanke att det jag visar är väldigt simpel formulärhantering och jag blandar inte in säkerhet och filtrering, vilket är otroligt viktigt när man hanterar formulär som ligger på publika webbplatser och som andra kommer använda.

POST & GET

Det finns två metoder för att skicka data via formulär, POST eller GET. Den absolut enklaste förklaringen av POST och GET är att om man använder GET-metoden i formulär kommer alla parametrar visas i adressfältet i webbläsaren, vilket inte görs med POST. Läs mer om just POST och GET här.


Exemplet nedan visar ett väldigt enkelt formulär med lite PHP för att hantera datan som skickas.

Exempel 13 – Skicka värden i formulär

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Din sida</title>
</head>
<body>
<?php
if (isset($_POST['skicka'])) {
  echo $_POST['fornamn'];
  echo "<br />";
  echo $_POST['mellannamn'];
  echo "<br />";
  echo $_POST['efternamn'];
}
?>
<form method="post" action="dinfil.php">
      Ditt förnamn<br />
      <input type="text" name="fornamn" /><br />
      Ditt mellannamn <br />
      <input type="text" name="mellannamn" /><br />
      Ditt efternamn<br />
      <input type="text" name="efternamn" /><br /><br />
      <input type="submit" name="skicka" value="skicka" />
   </form>
   </body>
</html>

När man fyllt i dessa tre fält och tryckt på skicka, kommer datan (det man fyllt i formulären) skickas med när sidan laddas om. Glöm inte att ändra action till rätt filnamn, alltså namnet på den fil du sparar denna koden i. Vi hämtar sedan datan genom att använda $_POST['variabel'] och skriver ut dem via echo. Som ni också kanske har märkt så har en ny funktion hittat in i vårt exempel. Denna gången är det isset( ).

Vi använder isset( ) i en if-sats för att kontrollera om $_POST['skicka'] är satt / skickad. Om den är det så skriver vi ut alla variablar på varsin rad. Jag vill också uppmärksamma er på att man kan spara dessa $_POST i egna variablar på följande sätt för lättare hantering.

$fornamn = $_POST['fornamn'];

Jag vill också påpeka att ur ett säkerhetsperspektiv är det otroligt viktigt att verkligen kontrollera datan som skickas med POST och GET. Man kan väldigt enkelt manipulera dessa. Om POST- eller GET-variabler kommer ha en databaspåverkan (sökning, nedsparning etc) är det extremt viktigt att hålla koll på innehållet i POST och GET.

Mer om detta kommer i en senare ”Lär dig PHP”-del.

Lär dig PHP 2 – if, else, while och foreach

augusti 3rd, 2010

PHPI programmering hittar vi alltid if-, else-, while- eller foreach-satser. Med hjälp av dessa kan vi kontrollera om ett eller flera värden är sanna eller falska, skriva ut allt ur en array, skriva ut något x antal gånger och mycket mycket mer. Det är tack vare dessa vi kan programmera som vi gör idag. I detta avsnittet kommer jag gå igenom if, else, while och foreach.

if

Med en if-sats kan vi göra så otroligt många roliga saker. Det är en av de viktigaste sakerna man måste lära sig när man programmerar. Ett exempel på hur en if-sats kan se ut finner ni nedan.

Exempel 9 – if

<?php
$tal1 = 10;
$tal2 = 10;
 
if ($tal1 == $tal2){
 
	echo "$tal1 och $tal2 är samma värden";
}
?>

I exemplet ovan kontrollerar vi med hjälp av en if-sats om $tal1 och $tal2 har samma värden, vilket dem har i detta fallet. Resultatet blir ”10 och 10 är samma värden”. Som ni också kan se så använder vi Comparasin operators när vi kontrollerar variablerna.


else

Med en else-sats kan vi faktiskt bygga vidare på exempel 9 där $tal1 och $tal2 har samma värde, men om dem inte hade haft det hade ingenting skrivits ut. Så i det kommande exemplet bygger vi vidare på exempel 9 och skriver ut ett felmeddelande om $tal1 och $tal2 inte har samma värde.

Exempel 10 – else

<?php
$tal1 = 10;
$tal2 = 5;
 
if ($tal1 == $tal2){
 
	echo "$tal1 och $tal2 är samma värden";
}
else {
       echo "$tal1 och $tal2 är inte samma värden";
}
?>

Utskriften blir ”10 och 5 är inte samma värden”. Detta är på grund av att $tal1 (10) och $tal2 (5) inte är samma, vilket vi kontrollerade med hjälp av if-satsen. Om if-satsen inte blir sann, vilket i den inte blir i det här fallet, aktiveras else-satsen och skriver ut meddelandet.

while

En while-sats är en väldigt användbar loop-funktion. Man använder while när man vill att något ska göras i koden så länge while-satsen är sann, dvs så länge det man skriver inom () är sant. Ett exempel på hur while kan användas finner ni nedan.

Exempel 11 – while

<?php
 
$i = 1;
while ($i <= 10) {
    echo $i++;  
} 
?>

Resultatet av detta blir att ”12345678910” skrivs ut. Vad som händer är att loopen hela tiden skriver ut $i samt plusar på $i med 1 så länge det som står innanför ( ) är sant.

foreach

Foreach kan exempelvis användas när man arbetar med arrayer. En foreach-sats kan loopa ut innehållet i en array, en och en tills det inte finns någonting mer att loopa ut. Om vi tar exempel 5 från när vi gick igenom arrayer, kunde vi inte skriva ut innehållet i en array eftersom vi inte visste hur. I exempel nedan kommer jag visa dig hur.

Exempel 12 – foreach

<?php
 
$arr = array(1, 2, 3, 4);
foreach ($arr as $varde) {
    $varde = $varde * 2;
	echo $varde;
}
 
?>

Vad som händer här är att genom en loop tas det första värdet ifrån $arr och placerar det i variablen $varde. Därefter multipliceras $varde med 2 och skriver ut resultatet av multipliceringen. Därefter börjar loopen om igen och den läser in det andra värdet i arrayen och multiplicerar det med 2 och skriver ut resultatet. I ren text blir det 1*2, 2*2, 3*2, 4*2 och resultatet blir ”2468”.

Nästa del kommer handla om formulär

”Lär dig PHP” återuppstår

augusti 3rd, 2010

PHPFör över två år sedan påbörjade jag en PHP-guide där syftet var att på ett väldigt enkelt sätt gå igenom grunderna i PHP. Det blev tyvärr bara en del på grund av att jag prioriterade andra saker. Men idag, 857 dagar senare, återupptar jag guiden. Anledningen är att det helt enkelt har varit efterfrågat. Planen ser dock lite annorlunda ut idag än vad den gjorde för två år sedan.

Jag kommer skriva mindre inlägg, men med jämnare mellanrum. Dels för att det inte blir så himla mycket att läsa på en gång, men också för att jag ska hinna. Inläggen om PHP tar i snitt längre tid än ett vanligt blogginlägg.

Mitt mål med guiden är att minst 1 person ska fastna för PHP och fortsätta med det.

Lär dig PHP 2 – if, else, while och foreach

Översättare till emoticons

september 30th, 2008

För er som inte vet vad en emoticon är så kan de se ut så här —> :)

För ett par dagar sedan jobbade jag en hel del med arrayer i PHP och fick undertiden en liten snilleblixt, eller en mindre stroke kanske? Hur som helst så fixade jag en liten mini klass som låter användaren översätta tecken till emoticons.

Vanligtvis ser man denna funktionalitet i forum, gästböcker, bloggar, chattar etc etc… utan att man kanske egentligen har funderat på hur den kan översätta : ) : D : P till små bilder.

Det jag har byggt består av en mapp med ikoner, en klass och en php-fil som styr klassen. Att använda klasser till detta behövs egentligen inte, men jag gjorde det i alla fall.

Ikonerna kommer ifrån den fantastiska samling man kan hitta på famfamfam.com

Ladda hem
Emoticons.zip

RSScompiler.com

juli 19th, 2008

Jahapp… då var det dags att presentera det nya projektet!

RSScompiler.com är adressen och vad det är för tjänst förklaras på sidan :)

Den är just nu i beta-stadiet… jag vet med mig att vissa feeds man lägger till inte fungerar… har med vissa tecken och tecken-kodning att göra… men jag har nog löst det snart också. Problemet hade inte behövt uppstå om alla följer rss-xml standarden :p

RSS klass i PHP

juli 17th, 2008

Jag kom på ett nytt projekt för bara några timmar sedan och håller just nu på att bolla med idén fram och tillbaka med mig själv. Återigen handlar det om webben och PHP, så när jag satt och tänkte på detta projekt och om det är möjligt eller ens värt att lägga tid på det, kodade jag lite.

Jag insåg att projektet är genomförbart och ska nog investera lite mer tid i det, men jag kom också på att jag faktiskt skapat någonting under denna lilla stunden som andra kanske har nytta av. Jag vill därför dela med mig av det så att andra kan ha nytta av det och återigen så är det fritt fram att ladda hem och göra vad man vill med.

Angående mitt nya projekt… ni får helt enkelt vänta och se.. men ni vet redan att det har någonting med RSS att göra :)

Vad pratar jag om?
Jo, det är en klass i PHP som ni kan använda för att hämta inlägg från en RSS-feed och sedan skriva ut artiklarna och länka till inläggen. Klassen gör allt jobb, det enda ni behöver göra är att ange RSS-adressen och hur många länkar ni vill visa…detta gör ni i filen show_feed.php

Ladda hem

Skapa thumbnails med PHP

juli 16th, 2008

Jag fick en fråga angående bildgalleriets thumbnailfunktion idag som jag tyckte var värd att ta upp. Personen frågade om han fick använda den separat för ett projekt och hur han gjorde det i så fall.

Självklart får ni använda det… ni får plocka det ni behöver. Jag har plockat ut den classen och redigerat den så att det blir lite mer användarvänligt. Jag har kommenterat i filen vad klassen behöver för att fungera… så det är bara att följa det och testa själva. Ni kan ladda ner den på följande sida under rubriken klasser.

Bildgalleriet snart klart

juli 14th, 2008

Jag har inte kodat så mycket som jag hade önskat idag…. men jag har fått en del saker klara i alla fall. Bland annat så har jag trixat lite med kontrollpanelen för att få in alla funktioner i den. De saker som är färdiga där är uppladdningen av bilderna och skapande av kategorier. Jag har också fått igång visningen av bilderna som baseras på vad som finns i databasen (filnamn osv).

Man kan till och med ladda upp bilder i olika kategorier (virtuella kategorier, inga mappar) och även titta på bilderna i de olika kategorierna.

En annan sak jag faktiskt är helt klar med är funktionen som kollar om den ”inloggade personen” verkligen är den ”inloggade personen”. Denna funktionen är inte så avancerad utan kolalr helt enkelt sessionen och sessionsvariablarna som skapades när man loggade in, jämför dessa med informationen i databasen och därefter bestämmer om allt är ok eller ej.

Jag ska fortsätta lite till ikväll, sen fortsätta imorgon någon gång på morgonen… så förhoppningsvis ska jag bli klar med allting under morgondagen!

Saker som är färdiga
Designen
Strukturen
Installationsfilen
Login
Uppladdning
Skapa kategori
Listning av bilder
Verifiering av inloggad

Saker som ska göras
Paging
Redigera bilder
Radera bilder
Redigera kategorier
Radera kategorier
Statistik (antal bilder, kategorier)
Slumpfunktionen

Fortsättning följer….