Inlägg

Inlägg som Purren har skrivit i forumet
Av Purren

Helt säker från SQL injections med PDO?

Som titeln lyder, om man använder PDO och medföljande bindParam/bindValue för att infoga värdena i SQL-uttrycket, är man då 100% säker mot SQL-injections eller är det någon mer koll man behöver göra?

Av Purren
Citat:

Ursprungligen inskrivet av Smurphen
Men vad är det för typ av hemsidor du har då? Känns mera som att det är "stavfel i url:n" hemsidor du driver. Eller?

Spelar det någon roll? Han tjänar pengar på det.

Av Purren

Tjänat pengar online

Jag är lite nyfiken över vad ni har för historier. Är det någon av er som tjänar/at pengar online genom hemsidor? Då menar jag inte som ett arbete att man programmerar/designar en sida för någon och får betalt, utan självstartade projekt som lyckats dra in en summa pengar.

Berätta gärna vad projektet gick ut på, hur mycket ni drog in och hur stora utgifter ni hade.

Av Purren

Om det vore fallet, borde det inte räcka med att jag hade kört

header("Content-type: text/html; charset=ISO-8859-1");

högst upp på alla berörda sidor?

Edit:
Jag prövade din poäng och du hade rätt!

Nu struntade jag förstås att övergå till utf8 eftersom det verkar vara mer arbete än det är värt, men för framtida referens så använda jag utf8_decode för att få en användbar sträng.

Alltså

$safestring = utf8_decode($_POST['ajaxvariable']);

Av Purren

Ajax med svenska tecken, åäö

Jag stöter på problem när jag försöker lägga in saker på i min databas med svenska tecken, alltså å, ä och ö. Sökhjälte blir sökhjälte.

Jag använder samma funktion och samma databaskoppling som annars för att lägga in raderna i databasen.

Min gissning är att det blir något fel med teckenuppsättningen när värden skickas med AJAX.

Min uppställning:
Sida -> Ajax -> PHP -> Mysql

Någon som har en lösning?

Av Purren

Kategorisystem

För en artikelsida jag skapar nu har jag hittlls använt en tabell i databasen namngiven categories. Där lagras alla kategorierna och hämtas ut vid behov.

Det jag funderade på nu var om det inte är smartare att spara kategorierna i en multidimensionell array. Säg kategorilistan växer långsamt upp till 100 kategorier, mer än så lär det aldrig bli. Sen är den mer eller mindre konstant.

Fördelar:
Hastighet (färre querys till databasen)

Nackdel:
Krångligare att hantera/uppdatera/skapa nya kategorier

Vad tycker ni?

Av Purren
Citat:

Ursprungligen inskrivet av blomqvist
Kolla efter om du blev skickad till filen genom din controller, som tittar efter om sessionen existerar. Detta går visserligen också komma runt genom att pula lite med webbläsare, men stoppar de flesta, I guess?

Stoppar de flesta = inte speciellt säkert alls.

Det får bli if satser på varje sida

Av Purren
Citat:

Ursprungligen inskrivet av blomqvist

<?php if (!isset($_SESSION['inloggad'])) { header("Location: www.xxx.com"); exit(); } ?>

Lite taskigt mot användare vars sessioner har gått ut...

Jag la inte till a-taggen i header!

Precis, men det där fungerar inte riktigt.

Om man har det i index filen stoppar det inte människorna från att nå filerna direkt genom att gå till controller/fil.php.

Om man har det i fil.php går det inte att omdirigera de eftersom en del html redan spottats ut i index.php.

Av Purren

Blir dock aningen krångligt om någon hittar controllermappen och startar filer som är till för folk som är inloggade. Måste man ha en kontroll på varje sida då?

Av Purren

Ännu en programmeringsdesignfråga från mig

Hej. Ännu än gång är jag tillbaka med en designfråga.

Denna gången gäller det att få lite feedback på följande modell:

index.php är den primära controllern.

/*header stuff*/ if ($_GET['c']=='articleview') include('controller/articleview.php'); elseif ($_GET['c']=='articleadd') include('controller/articleadd.php'); // OSV OSV /*footer stuff*/

controller/*.php i sin tur bestämmer och anropar model/*.php och view/*.php och gör det den ska göra för den sidan.

Fördelar:
*Endast en huvudfil
*Slipper upprepa header/footer delen.

Nackdelar
*Stor fil

Feedback?

Jag har otroligt svårt för att hitta bra praktiska exempel på hur man bör lägga upp arbetet för en större site med PHP.

Av Purren

MVC/Design-fråga, PHP

Jag har försökt att omstrukturera en sida jag jobbar med enligt mvc. Och visst, det blir mer lättöverskådligt med det. Men nu har en designfråga dykt upp.

Hittills har jag haft en model och en view klass för varje del av sidan, t.ex. mArtikel (model) och vArtikel (view). Den första med funktionen mHämtaArtikel och den senare med vVisaArtikel.

Så som jag lagt upp det nu så anropar vVisaArtikel funktionen mHämtaArtikel internt. Det jag undrar om det inte vore smartare att vVisaArtikel får resultatet från mHämtaArtikel som en parameter istället så att den endast "oroar" sig över att visa artikeln.

Alltså nu:

function mHämtaArtikel() { /* kod för att hämta artikeln*/ return Artikel; } function vVisaArtikel() { $bärare = mHämtaArtikel(); /* kod för att visa artikeln */ } vVisaArtikel();

Förslag

function mHämtaArtikel() { /* kod för att hämta artikeln*/ return Artikel; } function vVisaArtikel($artikel) { /* kod för att visa artikeln */ } vVisaArtikel(mHämtaArtikel());

Jag har lite svårt för att hitta praktiska exempel för hur man tillämpar MVC modellen inom PHP, de flesta guiderna verkar antingen bara upprepa samma saker ("controllern är det som kontrollerar...") eller handla om väldigt grundläggande saker ("nu ska vi göra en gästbok.."), så om det är någon som har ett bra länktips så tveka inte.

Av Purren
Citat:

Ursprungligen inskrivet av Myris
Jag tycker det låter som ett rätt lämpligt projekt. Inte för lätt, men definitivt inte omöjligt, enda jag undrar lite över är hur ni ska dela upp det på tre personer, brukar bli klurigt om tre pers ska alla jobba på exakt samma grejj, så ni kanske ska fundera på om det går att dela upp programmet i tre delar så alla skriver varsin.

OO FTW

Av Purren

Yes,

nämligen

SELECT * FROM votes WHERE vid = '%' AND pid = '%' AND uid = '%' AND feel ='%'

returnerar precis ingenting. Jag tror den letar efter ett % tecken snarare än sätter det som en joker.

Av Purren

"Dynamisk" query med PDO

Meningen med följande kodstycke var att om en av de paramterarna som skulle angivits till funktionen är satta till NULL så skulle den delen exkluderas. Jag försökte därför att sätta värdet till '%' men tydligen så funkar det inte om ingenting annat finns i strängen?

Den enda lösningen jag kommer på är en väldigt ful lösning med dubbla if-satser för varje variabel.

function fetchVote($vid, $pid, $uid, $feel) { if ($vid===NULL) $vid='%'; if ($pid===NULL) $pid = '%'; if ($uid===NULL) $uid = '%'; if ($feel===NULL) $feel = '%'; $stmt = $this->dbh->prepare("SELECT vid, pid, uid, feel FROM votes WHERE vid = :vid AND pid = :pid AND uid = :uid AND feel = :feel"); $stmt->bindParam(':vid', $vid); $stmt->bindParam(':pid', $pid); $stmt->bindParam(':uid', $uid); $stmt->bindParam(':feel', $feel); $stmt->execute(); }

Av Purren

Php, Pdo & Mvc

Jag pillade en del på min site häromdagen efter att jag läst upp om MVC efter tips i den här tråden

http://www.sweclockers.com/forum/showthread.php?s=&threadid=7...

Så nu satte jag mig ner och lade alla viktiga kodsnuttar inom ett visst område, röstningen, i små funktioner, vilket blev betydligt mer lätthanterligt och snyggt på "Controller" sidan. Dock stötte jag på ett problem med databasanslutningen.

Tidigare har jag haft en databasfil som sett ut ungefär såhär:

<? $db_adress = "localhost"; $db_username = "root"; $db_password = ""; // Database names $db_name = "belle"; $table_users = "adam"; // OSV OSV $mysql_handler = mysql_connect ($db_adress, $db_username, $db_password); mysql_select_db($db_name); if (!$mysql_handler) die ("Could not connect!"); ?>

På varje sida jag sedan behöver göra något mot databasen så inkluderar jag endast denna fil och så är jag igång direkt. Problemet som infann sig nu är att ingen av dessa variabler är tillgängliga till funktionerna. Visserligen skulle jag kunna använda global för att kunna nå de iallafall, eller t.om. inkludera filen i varje funktion, men det känns som ett väldigt fult trick och bör kunna göras på ett smartare vis.

Min andra tanke var nu att kapsla in dessa röstningsfunktioner i en röstningsklass. När ett röstningsobjekt skapas, skickar man en referens till ett PDO objekt och en referens till en array som innehåller tabelluppgifterna till konstruktorn.

Alltså får jag följande struktur:

dbh.inc - Innehåller en kodsnutt som skapar $dbh vilket är ett PDO objekt. Filen inkluderas på sidor där databashantering ska hanteras. Innehåller även $tbh som innehåller tabellnamnen.
votes.php - Innehåller klassen Votes, som tar en referens till $dbh och $tbh.

Det jag undrar är om det finns någon anledning för varför det här är ett dåligt sätt att angripa problemet, och jag skulle gärna vilja se hur ni brukar göra, då jag sett flera varianter på nätet som jag inte riktigt gillar och skulle behöva lite inspiration från era empiriska studier.

Av Purren

Ah, trevligt. Precis något åt det hållet jag letar efter. Tack!

Edit: När jag tittar på MVC så är det hyfsat likt det jag gör nu. PHP-exemplena jag ser verkar dock sätta det mesta i objekt, medan jag själv kört mer "oorienterat".

Edit2: Nej, det gör jag förresten inte alls. Inte i full utsträckning iallafall.

Av Purren

Lägga alla sitefunktionerna i en PHP klass

En idé slog mig idag. Det berör en artikelbaserad sida, en sorts community, jag arbetar med för tillfället. På sidan finns t.ex. röstnings, kommentars och taggingmöjligheter.

Just nu är det upplagt som så att alla procedurer finns på varje sida som de berör. T.ex. koden för att lägga till en artikel ligger "löst" på lägga till artikel sidan, koden för att lägga till en kommentar ligger "löst" på lägga-till-kommentarsidan osv.

Det som slog mig nu var om det inte skulle bli väldigt cleant om man la alla dessa funktionerna i en klass, och lägga denna klassen i en separat fil. Vid varje sida som behöver denna funktionaliteten så inkluderar man denna klassfil där all funktionalitet är inlagd och därefter anropar man det man behöver.

Istället för en kodsnutt på 5-50 rader gör man ett funktionsanrop, typ Site.AddComment($comment, $user); Och så sköts det i bakgrunden.

Fördelarna jag ser med detta är flera; man får en väldigt clean kod, man kan separera kontroll av data och användandet av datan, alla funktioner samlas på ett ställe och ett abstraktionslager sätts emellan som gör att det blir lättare att göra förändringar i funktionaliteten.

Nackdelarna är att man antagligen får en stor klassfil, alla funktionerna behövs inte heller på varje sida så det blir onödigt att kompilera in de.

Jag tänkte höra med er, har ni någon erfarenhet eller åsikt av denna modellen? Hur stora kan prestandaförlusterna bli? Används denna metod inom större projekt?

Av Purren

Tack för hjälpen! Funkade galant!

När vi ändå är igång;

jag försöker centrera thumbbox elementet i votebox elementet med margin-left: auto och margin-right: auto; men det verkar inte gå.

Jag tänkte att det kanske var margin: 5px som krockade så jag prövade även att ta bort det utan resultat. Ideer?

Nuvaranda CSS

.votebox { width: 90px; height: 30px; margin-top: 10px; } .thumbbox { width: 16px; height: 16px; padding: 0; display: block; float: left; } a.thumbsup { background-image: url('images/sprites.gif'); background-position: 0 -16px; background-repeat: no-repeat; } a.thumbsup:hover { background-position: -16px -16px; } a.thumbsdown { background-image: url('images/sprites.gif'); background-position: 0 0; background-repeat: no-repeat; } a.thumbsdown:hover { background-position: -16px 0; }

Av Purren

Tom div tagg i firefox / CSS

Bakgrund
Jag håller på att skapa ett röstningssystem där man kan rösta antingen positivt eller negativt. Tummen upp samt tummen ner är satta som bakgrunderna i två tomma div taggar, båda med bredden och höjden 16px.

[b]Problemet[b]
I Internet Explorer visas det helt rätt efter den bredden och höjden jag specificerat. I Firefox däremot så verkar de tomma <div> taggarna som håller i bilden trunkeras och visas inte alls.

Sätter jag display: block; på thumbup/thumbdown klasserna så blir det förvisso rätt och Firefox lyder den angivna bredden och höjden, men då blir de båda tummarna placerade på olika rader.

Någon som har en lösning för mig?

CSS

.thumbbox { width: 16px; height: 16px; padding: 0; margin: 0; display: inline; } a.thumbsup { background-image: url('images/sprites.gif'); background-position: 0 -16px; background-repeat: no-repeat; margin: 5px; } a.thumbsup:hover { background-image: url('images/sprites.gif'); background-position: -16px -16px; background-repeat: no-repeat; } a.thumbsdown { background-image: url('images/sprites.gif'); background-position: 0 0; background-repeat: no-repeat; margin: 5px; } a.thumbsdown:hover { background-image: url('images/sprites.gif'); background-position: -16px 0; background-repeat: no-repeat; }

HTML

<div class="scorecontainer"> <div class="scorebox"></div> <div class="votebox"> <div class="thumbbox"><a href="javascript: return false;" class="thumbsup thumbbox"></a></div> <div class="thumbbox"><a href="javascript: return false;" class="thumbsdown thumbbox"></a></div> </div> </div>

PS. Vad är det med forumets CODE taggar? De verkar inte byta font i den innehållande texten. DS.

Av Purren
Citat:

Ursprungligen inskrivet av Phod
Varför vill du spara användar-ID? Ska användarna kunna ta bort sina taggar i efterhand? Annars är en tabell med artikel-ID, tag och räknare kanske en bättre lösning.

Det är sant, det är en effektivare metod. Men det blir lite svårt att skydda sig från att någon missbrukar systemet. Någon bra ide?

Citat:

Ursprungligen inskrivet av totoo
Phod har en bra tanke, förutsatt att du inte sparar användarID för att försäkra dig om att ingen taggar flera gånger.

Däremot undrar jag... Varför skulle någon volja tagga dina artiklar? Jag skulle aldrig räkna med att någon skulle vilja tagga de som jag skriver iaf. Vad skulle någon få ut av detta?

Artiklar i det här sammanhanget var ett försök i att översätta items, det är inte skrivna artiklar alltså utan "items"