JohndoeMAKT Skrevet 27. oktober 2008 Del Skrevet 27. oktober 2008 (endret) Forumet hadde lenge tråden PHP kode som andre kanskje kan bruke, men et stadig problem var at det ble postet kode ikke av alle vurdert som (gjen-/)brukbar og tråden ble derfor ganske utvannet. Tråden Diskusjon : Skal det lages et bedre system for deling av god PHP-kode? ble laget hvor jeg fikk lurt min mening inn som noe flertallet ønsket, og dette er resultatet. Dette nye systemet består av Tråden hvor forslag til gjenbrukbar PHP-kode legges og Kvalitetssikret og gjenbrukbar PHP-kode til fri bruk. Kodeforslag legges i den første tråden hvor en diskusjon om kvalitet og forbedringer kan holdes. Dersom koden blir vurdert til å være av god nok kvalitet og foreslåtte forbedringer blir gjort vil en moderator flytte den aktuelle posten inn i den siste tråden som er låst. På den måten holdes S/N høy og kvaliteten blir av god nok kvalitet til at den kan anbefales og gjenbrukes. -- I denne forslagstråden bør målet være å felles samle opp og sammarbeide om et fundament av god kode. Jeg håper derfor på saklig og konstruktiv diskusjon og kritikk med forumets to første regler sterkt i minnet. Dersom eventuelle regler for denne tråden er ønsket er det bare å rope det ut til diskusjon. Til slutt vil jeg bare skyte inn en kommentar om bruk av andres kode og lisenser. Dersom koden her skal med god samvittighet kunne brukes i kommersiell sammenheng, i fri programvare, eller i prosjekter med potensiale til å bli en av de to er det viktig at det blir oppgitt hvilken bruk som er tillatt når koden er av en viss kompleksitet. Her i tråden kan det enkelt oppgis ved å enten skrive noe så enkelt som "Fri bruk gis til hvem som helst til å gjøre hva som helst med koden" eller å oppgi navnet til én eller flere av de vanlige lisenene som BSD, MIT, GPL, LGPL, CC Attribution eller lignende. Endret 27. oktober 2008 av JohndoeMAKT Lenke til kommentar
Wackamole Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 (endret) Okei, da er vell jeg første mann ut - egentlig så blir denne posten en slags test post for min del, siden jeg vil finne ut hvor komplekse koder man skal legge ut. Om det er hele CMS'er eller koder som er mer enn små snutter... db_connect.class.php Klikk for å se/fjerne innholdet nedenfor <?php /* Connect and select database using classes Copyright (C) 2008 Fredrik Moe This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /*------------------------------------------------------------------------*/ class conn { function connect_mysql($host, $user, $pass) { $link = mysql_connect($host, $user, $pass); if (!$link) { die('MySQL error: Could not connect: ' . mysql_error()) . "<br>"; } } function select_db($db_name) { $db_select = mysql_select_db($db_name); if (!$db_select) { die ("MySQL error: Can't use $db_name database : " . mysql_error()) . "<br>"; } } } /*Example for connection and selecting database*/ //Create an connection $conn = new conn(); //Call the conn class and the db class //$conn->mysql('localhost', '****', '******'); //$conn->select_db('****'); ?> Også vil jeg vite hvordan man får opp php tagger, fordi dem funker ikke her Endret 29. oktober 2008 av Famen Lenke til kommentar
Martin A. Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Yet another DB class? Lenke til kommentar
Wackamole Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Jepp, det er egentlig ikke slike kommentarer jeg er ute etter... - Nå fikk jeg egentlig litt ut av den kommentaren, at du ikke ville ha flere klasser og koder som det allerede florerer av på nettet. Supert! Men hva om kompleksitet av kode? - er det noen som har en kommentar om dette, i forhold til hva som burde og ikke burde bli lagt ut her... Lenke til kommentar
JohndoeMAKT Skrevet 29. oktober 2008 Forfatter Del Skrevet 29. oktober 2008 Her er mine kommentarer til koden: Metoder som dette setter jeg pris på: $numUpdatedRows = $conn->update( $sql ); $newAutoIncrementId = $conn->insert( $sql ); $sql er fullverdige SQL-settninger, men alt etter hvilken "utføringsmetode" den kjøres med returneres mysql_num_rows_something osv. Det bør også være mulig å kjøre de to metodene i konstruktøren. Litt mer kritisk: - die() er en uting som ikke bør brukes - metodene bør kaste exceptions i stedet - variabler bør testes før potensielt kritiske feil kan oppstå - navnet er ikke mye forklarende - metodene bør returnere boolianske verdier dersom exceptionkasting ikke blir lagt til - $link bør være en klassevariabel som kan hentes ut slik at flere databaser kan tilkobles samtidig Og til slutt hadde jeg selv defaulted til 'localhost', 'root' og '' i connect-metoden, men ikke alle er så dumdristige/late som meg. -- Når det gjelder kodekompleksitet skal det nok ikke mye til ( i antall linjer ) før det er verd å ta vare på, så lenge det er bra og anvendelig. Jeg har f.eks funksjonene setCookie, getCookie og deleteCookie i javascript jeg alltid drar med meg, ikke fordi de er så fantastisk bra skrevet at jeg ikke kan gjøre det på nytt, men fordi de gjør jobben bra og å reimplementere de er kjedelig. Lenke til kommentar
Jonas Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 (endret) Jeg har f.eks funksjonene setCookie, getCookie og deleteCookie i javascript jeg alltid drar med meg, ikke fordi de er så fantastisk bra skrevet at jeg ikke kan gjøre det på nytt, men fordi de gjør jobben bra og å reimplementere de er kjedelig. Så enig, så enig. Jeg har selv en DB-klasse, og jeg ser nå at den inneholder kode som ikke er blitt endret på på over flere år. Et godt og funksjonelt rammeverk er et must for min del. <?php class MySQL { // Store general connection-information private $mysqlAddress; private $mysqlUsername; private $mysqlPassword; private $mysqlConnection; private $mysqlErrors = array(); private $mysqlQueries = array(); private $mysqlNumQueries = 0; private $mysqlNumRows = 0; private $mysqlAffectedRows = 0; private $mysqlTimer; private $mysqlTotalTime = 0; public function __construct ( $address, $username, $password, $db = NULL ) { parent :: __construct (); $this -> mysqlTimer = new FR_Object_Timer (); $this -> mysqlAddress = $address; $this -> mysqlUsername = $username; $this -> mysqlPassword = $password; if ( $db ) $this -> selectDB ( $db ); } public function connect () { if ( is_resource ( $this -> mysqlConnection ) ) return true; if ( $this -> mysqlConnection = mysql_connect ( $this -> mysqlAddress, $this -> mysqlUsername, $this -> mysqlPassword, true ) ) return true; else return false; } public function selectDB ( $database ) { $this -> connect (); mysql_select_db ( $database, $this -> mysqlConnection ); } public function getNext ( $query, $type = MYSQL_BOTH ) { if ( array_key_exists ( $query, $this -> mysqlQueries ) ) return mysql_fetch_array ( $this -> mysqlQueries[$query], $type ); $this -> mysqlQueries[$query] = $this -> run ( $query ); return $this -> getNext ( $query, $type ); } public function run ( $query ) { if ( is_array ( $query ) ) return array_map ( array(&$this, 'run'), $query ); $this -> connect (); $this -> mysqlTimer -> resetTime (); $resource = mysql_query ( $query, $this -> mysqlConnection ); if ( !$resource ) { $this -> mysqlErrors[] = array ( 'error' => mysql_error ( $this -> mysqlConnection ), 'query' => $query ); } else { $this -> mysqlNumQueries++; $this -> mysqlTotalTime += $this -> mysqlTimer -> getTime (); if ( stristr ( $query, 'select' ) ) $this -> mysqlNumRows = mysql_num_rows ( $resource ); if ( stristr ( $query, 'insert' ) || stristr ( $query, 'update' ) || stristr ( $query, 'delete' ) || stristr ( $query, 'replace' ) ) $this -> mysqlAffectedRows = mysql_affected_rows ( $this -> mysqlConnection ); } return $resource; } public function getRow ( $query, $type = MYSQL_ASSOC ) { if ( $type == MYSQL_ASSOC ) return mysql_fetch_assoc ( $this -> run ( $query ) ); elseif ( $type == MYSQL_NUM ) return mysql_fetch_row ( $this -> run ( $query ) ); } public function getNumRows () { return $this -> mysqlNumRows; } public function getAffectedRows () { return $this -> mysqlAffectedRows; } public function getMysqlConnection () { return $this -> mysqlConnection; } public function getNumQueries () { return $this -> mysqlNumQueries; } public function getQueryTime () { return $this -> mysqlTotalTime; } public function getLastId () { return mysql_insert_id ( $this -> mysqlConnection ); } public function escape ( $string ) { return mysql_real_escape_string ( $string, $this -> mysqlConnection ); } public function getErrors () { return $this -> mysqlErrors; } public function __destruct () { if ( is_resource ( $this -> mysqlConnection ) ) mysql_close ( $this -> mysqlConnection ); } } ?> <?php $query = 'SELECT users.* ' . 'FROM users'; while ( $user = $db -> getNext ( $query ) ) print_r ( $user ); echo 'Number of users: ' . $db -> getNumRows (); ?> <?php $query = 'SELECT user.* ' . 'FROM users user ' . 'WHERE user.id = \'' . $db -> escape ( $_GET['id'] ) . '\''; print_r ( $db -> getRow ( $query ) ); ?> Endret 29. oktober 2008 av Jonas Lenke til kommentar
Jonhoo Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Da kan jeg jo slenge med en bit kode som konverterer en PHP-array til en JS-array: function php_to_js_array($in, $variable, $first = true) { $o = ($first?'var ':'').$variable.' = new Array();'; if ( is_array ( $in ) && count ( $in ) ) { foreach ($in as $key => $value) { if (is_array($value)) { $o .= php_to_js_array($value, $variable.'['.(is_numeric($key)?$key:'"'.str_replace('"', '\"', $key).'"').']', false); } else { $value = str_replace ( "\r", '', $value ); $value = str_replace ( "\n", '', $value ); $o .= $variable.'['.(is_numeric($key)?$key:'"'.str_replace('"', '\"', $key).'"').'] = '.(is_numeric($value)?$value:'"'.str_replace('"', '\"', $value).'"').";"; } } } return $o; } Lenke til kommentar
OISNOT Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Da kan jeg jo slenge med en bit kode som konverterer en PHP-array til en JS-array: Er dette bedre enn json_encode funksjonen? Lenke til kommentar
Jonhoo Skrevet 29. oktober 2008 Del Skrevet 29. oktober 2008 Den er nok ikke det, jeg hadde ikke hørt om den funksjonen før... :S Eneste er at json_encode er bundet til UTF-8 data, samt at noen nettlesere er litt sære på håndteringen av JSON *kremt* Safari *kremt*.. =) Lenke til kommentar
Rabbid Skrevet 30. oktober 2008 Del Skrevet 30. oktober 2008 (endret) Enkel template-"motor": <?php class Template{ private $template_data; # Holds all the template variables # Contructor, define the template and template file public function __construct($template_file) { $this->file = $template_file; } # Set a template variable public function set($name, $value) { $this->template_data[$name] = $value; # Add the string to the variables array. } # template is run and returned when string data is requested by other functions. public function __toString(){ if(count($this->template_data)){ # Check if template actually has variables (to avoid errors). extract($this->template_data); # Extract the template variables to local namespace } ob_start(); # Start output buffering include($this->file); # Include the file $template_contents = ob_get_contents(); # Get the contents of the buffer ob_end_clean(); # End buffering and discard return $template_contents; # Return the contents } } ?> Ganske gammel, men har brukt den i mange prosjekter. Endret 30. oktober 2008 av Rabbid Lenke til kommentar
Alex Moran Skrevet 30. oktober 2008 Del Skrevet 30. oktober 2008 (endret) Yay Endret 21. august 2012 av Alex Moran Lenke til kommentar
PHP_Yoghurt Skrevet 8. november 2008 Del Skrevet 8. november 2008 En liten vri-om på skriptet til Famen: //======================================== // MySQL Databse Variabler //======================================== $host = "localhost"; $bruker = "root"; $pass = ""; $db = "mafiaspill"; //======================================== // Koble til, via klasse.. //======================================== class con { function hoved_sql($host,$bruker,$pass) { mysql_connect($host,$bruker,$pass); } function select_db($db) { mysql_select_db($db); } } $con = new con(); $con->hoved_sql($host,$bruker,$pass); $con->select_db($db); Lenke til kommentar
Wackamole Skrevet 8. november 2008 Del Skrevet 8. november 2008 Altså, du har bare forandret navn på variabler, klasser og funksjoner... Ellers så er scriptet HELT likt mitt... Hvis du mener at alt det skal være i en fil kan du jo heller bare skrive mysql_connect($host, $bruker, $pass); mysql_select_db($db); Lenke til kommentar
PHP_Yoghurt Skrevet 8. november 2008 Del Skrevet 8. november 2008 (endret) Hvis du mener at alt det skal være i en fil kan du jo heller bare skrive mysql_connect($host, $bruker, $pass); mysql_select_db($db); Samme med din.. ---- Helst ikke svar meg her, så ikke dette blir en diskusjons tråd.. Skal kun postes kode her. Endret 8. november 2008 av PHP_Yoghurt Lenke til kommentar
JohndoeMAKT Skrevet 8. november 2008 Forfatter Del Skrevet 8. november 2008 Helst ikke svar meg her, så ikke dette blir en diskusjons tråd.. Skal kun postes kode her. Kodeforslag legges i den første tråden hvor en diskusjon om kvalitet og forbedringer kan holdes. Det er i denne traaden koden som postes skal diskuteres. Lenke til kommentar
Wackamole Skrevet 8. november 2008 Del Skrevet 8. november 2008 I denne forslagstråden bør målet være å felles samle opp og sammarbeide om et fundament av god kode. Jeg håper derfor på saklig og konstruktiv diskusjon og kritikk med forumets to første regler sterkt i minnet. Anywho, det er helt sant, jeg bare påpeker at du ikke har gjort noen "Vri-om" på scriptet mitt, du har bare lagt ut samme koden som din egen... Lenke til kommentar
Lokaltog Skrevet 8. november 2008 Del Skrevet 8. november 2008 (endret) Ingen av scriptene deres bør legges i noen samling over kvalitetskode uansett, så dere taper begge to. Endret 8. november 2008 av Lokaltog Lenke til kommentar
PHP_Yoghurt Skrevet 8. november 2008 Del Skrevet 8. november 2008 du har bare lagt ut samme koden som din egen... japp.. JohndoeMakt: ok Lenke til kommentar
Rabbid Skrevet 8. november 2008 Del Skrevet 8. november 2008 Regner vel med at kodetraaden kommer til aa være tom en god stund... Lenke til kommentar
Wackamole Skrevet 8. november 2008 Del Skrevet 8. november 2008 Ingen av scriptene deres bør legges i noen samling over kvalitetskode uansett, så dere taper begge to. Ja, er fullstendig klar over dette, koden som jeg la ut var for at jeg skulle finne ut hvor komplekst koden/scriptet skulle være - som jeg fikk svar på btw Lokaltog: har ikke du en kode som er kvalitetsbevist utført? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå